[하루한줄] CVE-2021-31166: HTTP.sys 원격 코드 실행 취약점

URL

A WORMABLE CODE EXECUTION BUG IN HTTP.SYS

Target

Windows 10

Windows server 2004

Windows server 20H2

Explain

커널 드라이버 Http.sys를 사용하는 웹서버 IIS(Internet Information services) Windows Server에서 원격 코드 실행 취약점이 발견되었습니다. Http.sys는 http request 파싱 및 클라이언트로 보낼 response 생성을 담당합니다. 해당 취약점은 Http request header Accept-Encoding을 파싱 하고 관리하는 메커니즘의 설계 결함으로 발생합니다.

클라이언트는 Accept-Encoding header를 사용해 웹서버에게 사용 가능한 데이터 압축 방식을 전달합니다. 웹서버는 전달받은 Accept-Encodeing의 필드 값을 파싱하고 unknown, supported, invalid로 구분해 연결 리스트를 생성하고 관리합니다. unknown의 경우 원형 이중 연결 리스트를 사용하고, 파싱이 끝나 연결 리스트가 완성되면 스택 메모리에 있는 기존 root 노드를 버리고 internal structure 속 root 노드로 연결 리스트를 옮기는 작업을 합니다. 이때 기존 root 노드가 초기화되지 않아 여전히 연결 리스트에 연결되어 있고 이를 통해 use-after-free가 발생합니다. 해커는 이를 악용한 악성 HTTP request를 원격 시스템에 보내 Kernel 권한으로 임의 코드 실행을 할 수 있습니다.