Summary
UaP in IIRFilterHandler::Process
Product
Chrome
CVE
CVE-2020-6427
Tested Version
Chrome version: master branch build 8f57323, release build. Operating System: Ubuntu 18.04
Details
In the IIRFilterHandler::Process method, if an infinite output is encountered, the method IIRFilterHandler::NotifyBadState method will be posted to the main thread[1]:
if (HasNonFiniteOutput()) {
did_warn_bad_filter_state_ = true;
PostCrossThreadTask(*task_runner_, FROM_HERE,
CrossThreadBindOnce(&IIRFilterHandler::NotifyBadState,
WrapRefCounted(this)));
}
The method IIRFilterHandler::NotifyBadState first checks for Context and then call Context()->GetExecutionContext()[2].
void IIRFilterHandler::NotifyBadState() const {
DCHECK(IsMainThread());
if (!Context() || !Context()->GetExecutionContext())
return;
However, as Context is an UntracedMember[3], it is possible to remove it while the IIRFilterHandler::NotifyBadState method is waiting in the main queue. This then causes UaP and subsequently UaF in NotifyBadState.
The BiquadFilterHandler also has an identical routine, so it probably is also vulnerable to this issue [4].
-
https://source.chromium.org/chromium/chromium/src/+/b4c8e1370db91786c807e01ca6d56a88b4054070:third_party/blink/renderer/modules/webaudio/iir_filter_node.cc;l=108;bpv=1;bpt=1?originalUrl=https:%2F%2Fcs.chromium.org%2F
-
https://source.chromium.org/chromium/chromium/src/+/b4c8e1370db91786c807e01ca6d56a88b4054070:third_party/blink/renderer/modules/webaudio/iir_filter_node.cc;l=117;bpv=1;bpt=1?originalUrl=https:%2F%2Fcs.chromium.org%2F
-
https://source.chromium.org/chromium/chromium/src/+/b4c8e1370db91786c807e01ca6d56a88b4054070:third_party/blink/renderer/modules/webaudio/audio_node.h;drc=5cc67ce9c0e922a742dc0064ad38c4f8f9668aa9;bpv=1;bpt=1;l=291?originalUrl=https:%2F%2Fcs.chromium.org%2F
-
https://source.chromium.org/chromium/chromium/src/+/b4c8e1370db91786c807e01ca6d56a88b4054070:third_party/blink/renderer/modules/webaudio/biquad_filter_node.cc;l=88;bpv=1;bpt=1?originalUrl=https:%2F%2Fcs.chromium.org%2F
Impact
Use-after-free in renderer.
Coordinated Disclosure Timeline
- 25/02/2020 Reported as Chromium Issue 1055788
- 18/03/2020 Fixed in version 80.0.3987.149
Credit
This issue was discovered and reported by GHSL team member @m-y-mo (Man Yue Mo).
Contact
You can contact the GHSL team at securitylab@github.com, please include the GHSL-2020-035 in any communication regarding this issue.