QEMU es1370 audio OOB access (CVE-2020-13361)¶
QEMU'nun emüle ENSONIQ ES1370 sound card'ında guest-to-host bir out-of-bounds access; burada bir es1370 register yazması sırasında validate edilmemiş, guest-controlled bir frame count, audio-transfer loop'unu buffer'ının ötesine sürer.
Mechanism¶
Note
ES1370 modeli (hw/audio/es1370.c), bir channel'ın frame buffer'ını dolaşarak
audio stream eder: guest-programlanan register'lardan türetilen bir frame count,
es1370_transfer_audio()'ya kaç frame taşınacağını söyler. Invariant, bu count'un
byte'lara ölçeklendiğinde channel'ın map'lenmiş buffer'ı içinde kalmasıdır.
CVE-2020-13361'de count, buffer sınırlarına karşı düzgün validate edilmez,
böylece bir guest kontrol eden register'ları yazdığında (es1370_write() path'i)
transfer loop'unu hedeflenen region'ın dışında index'leten bir frame count
ayarlayabilir. Sonuç, tamamen guest register değerleriyle sürülen host QEMU
process'inde bir out-of-bounds read/write'tır — guest→host sınırını en azından bir
host crash/DoS olarak aşar.
Bu, bir device modelinde bir input-validation (bounds-check) hatasıdır, out-of-bounds-write ve device OOB durumu qemu-arm-gic-oob-heap-access ile aynı sınıf.
Walkthrough¶
Public, hâlihazırda patch'lenmiş advisory'den (SUSE/Red Hat CVE sayfaları, Debian
DLA-2262-1, upstream hw/audio/es1370.c fix). Yalnızca kavramsal reproduction.
- Guest, bir ES1370 audio channel'ını enable eder ve frame-buffer ile frame-count register'larını MMIO/PIO üzerinden programlar.
- Per-frame boyutla ölçeklendiğinde channel'ın map'lenmiş buffer'ını aşan bir frame count (ve/veya buffer parametreleri) seçer.
- Transfer, register-write path'i üzerinden tetiklenir;
es1370_transfer_audio()şişirilmiş count üzerinde döngü yapar ve buffer sonunun ötesine index'ler — host process'inde bir out-of-bounds access. - Vulnerable bir build'de bu tipik olarak bir QEMU crash (DoS) olarak tezahür eder.
Warning
Tarihsel, patch'lenmiş bir sorun (QEMU ≤ 5.0.0). Low severity olarak derecelendirildi. Bu giriş kavramsal kalır: tuning yapılmış bir corruption primitive'i değil, eksik bound'u adlandırır.
Missing-bound concept (shape of the fix)
Detection¶
- Host tarafı: guest audio-device register yazmalarıyla ilişkilenen,
es1370_transfer_audio/es1370_write(hw/audio/es1370.c) içinde kök salan QEMU crash / AddressSanitizer heap-buffer-overflow ya da OOB-read raporları. - Behavioral: yapılandırılan DMA buffer'ından daha büyük transfer'leri ima eden ES1370 frame count'ları programlayan bir guest anormaldir.
Mitigation¶
- Transfer'den önce frame count'u validate eden CVE-2020-13361 için upstream QEMU fix'ini uygulayın (distro backport'ları: Debian DLA-2262-1, SUSE, Red Hat).
- Legacy
es1370(ya da diğer gereksiz legacy audio) device'ını untrusted guest'lere expose etmeyin; headless server VM'lerinden emüle sound card'ları kaldırın. - Defense-in-depth: QEMU'yu confine edin (seccomp, SELinux/sVirt) ki bir OOB access, host compromise yerine sınırlanmış bir crash olsun.
References¶
- SUSE — CVE-2020-13361: https://www.suse.com/security/cve/CVE-2020-13361.html
- Ubuntu — CVE-2020-13361: https://ubuntu.com/security/CVE-2020-13361
- Debian DLA-2262-1 (qemu security update): https://lists.debian.org/debian-lts-announce/2020/06/msg00032.html