[하루한줄] CVE-2020-15994 : Chrome WebAssembly Engine UAF 취약점
URL
Exploiting CVE-2020-15994 Chrome WebAssembly Engine UAF Vulnerability
Target
Google Chrome WebAssembly
Explain
Google Chrome의 V8 WebAssembly 엔진에서 발견된 UAF 취약점에 대한 상세 정보가 공개되었습니다. WebAssembly는 JS의 단점을 보완하기 위해 브라우저에서 저수준 언어로 작성된 코드를 컴파일해 네이티브로 동작할 수 있도록 하는 기술 표준입니다.
WebAssembly의 AsyncCompileJob
객체는 WebAssembly.instantiateStreaming
함수에서 사용되는 기본 V8 객체이며 WebAssembly의 비동기 컴파일을 지원합니다.
취약점을 트리거하는 데 사용되는 함수는 다음과 같습니다.
AsyncCompileJob::FinishModule
- 컴파일된 WebAssembly 코드를 Javascript 객체로 인스턴스 화함AsyncCompileJob::Abort
- WebAssembly 코드 다운로드 실패 시 호출되며 모든 컴파일 프로세스를 취소함
위 두 함수는 모두 AsyncCompileJob
객체를 해제하는 기능이 있습니다.
WebAssembly.instantiateStreaming
함수를 이용하여 WebAssembly 코드를 컴파일하는 경우 WebAssembly 코드에서 Javascript 함수 및 객체에 접근하기 위한 인터페이스로 importObject
를 사용합니다. 이때 importObject
에 Getter를 정의하면 InstanceBuilder::SanitizeImports
함수는 Getter 함수를 콜백으로 호출합니다.
Getter를 AsyncCompileJob::Abort
로 정의해 콜백 함수로 호출하면 AsyncCompileJob::FinishModule
함수 이후 해제된 AsyncCompileJob
객체에 접근할 수 있어 UAF를 트리거할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.