[하루한줄] CVE-2021-30522: Google Chrome WebAudio Code Execution Vulnerability

URL

Vulnerability Spotlight: Code execution vulnerability in Google Web Audio API

Target

  • Google Chrome 88.0.4324.146 (Official version) (64-bit)
  • Google Chrome 90.0.4405.0 (Build) (64-bit)

Explain

Google Chrome의 WebAudio blink::AudioNodeOutput::Pull에서 use after-free를 통한 code execution 취약점이 발견되었습니다. 조작된 웹 사이트에 접속하면 취약점이 트리거 되어 코드가 실행됩니다.

해당 취약점은 blink::AudioNodeOutput::Pull 함수에서 이미 초기화 된 메모리 영역인 in_place_bus (AudioBus 포인터)를 제공받아 발생합니다. WebAudio createGain()이 호출되면 AudioNode 객체 등이 할당되어 출력에 연결됩니다. AudioNode 인터페이스의 connect() 메서드는 노드의 출력 중 하나를 타깃에게 연결합니다. 루프에서 new Float32Array/Uint8Array를 사용하여 인접한 메모리를 연속해서 할당하며 이로 인해 garbage collector가 강제적으로 작동합니다. garbage collection이 수행되는 동안 audio rendering thread는 이미 해제된 AudioNode (AudioOutput)을 참조하므로 use after-free가 발생하며 blink::AudioNodeOutput::Pull은 이 AudioNode 객체를 실행합니다.