Skip to content

QEMU qemu-img info json OOB write (CVE-2024-4467)

external-data-file adı bir json:{} block-device descriptor'ı olan crafted bir qcow2 image, qemu-img info'nun onu nested bir block device olarak açmasına yol açar; DoS'a ve mevcut bir host file'ının read/write'ına olanak verir.

Mechanism

Sınır neden kırılıyor

qemu-img info'nun, attacker-chosen host kaynaklarını hiç açmadan yalnızca image metadata'sını incelediği varsayılır. Bir qcow2 image bir external data file (data_file header extension'ı) adlandırabilir. QEMU o field'ı tam bir block-device specifier'ı olarak yorumlar; dolayısıyla bir attacker onu, açılabilir herhangi bir host file/device'ını adlandıran bir json:{...} descriptor'ına set edebilir. Aşılan invariant: read-only bir "inspect" operasyonu, hangi host file'ının açılacağını untrusted image metadata'sının belirlemesine izin vermemeli. NVD bu CVE'yi şu an CWE-787 (out-of-bounds write) olarak etiketler; buna karşın Red Hat / GitHub Advisory ekosistemi onu CWE-400 (uncontrolled resource consumption) olarak sınıflar. Bu CWE-787 etiketi teknik olarak tam isabetli değildir — load-bearing kusur, klasik bir buffer-bounds write'ı (index/offset hesabı hatası) değil, untrusted-filename → arbitrary block-device yorumu, yani untrusted metadata'nın hangi host file/device'ının açılacağını dikte etmesidir (kavramsal olarak input-validation / untrusted-deserialization sınıfına, ör. CWE-400 / CWE-20'ye daha yakındır). Sonuçta sözde read-only bir inspection, mevcut bir host file'ını okuyabilir ya da yazabilir. Bir guest gerekmez — bu, herhangi bir image-intake tooling'ini vurur (upload'larda qemu-img info çalıştıran cloud/CI pipeline'ları).

Walkthrough

Kavramsal, public advisory'den alınmıştır; çalışan bir exploit değil.

  1. Attacker, external-data-file adı bir host path'e işaret eden bir json:{ ... } block-device descriptor'ı olarak craft edilmiş bir qcow2 image sağlar.
# Conceptual: data_file string is a json: block-device spec, not a plain name
qemu-img info malicious.qcow2
  1. qemu-img info, qcow2 metadata'sını parse eder ve external data file'ını embed edilmiş JSON'a göre nested bir block device olarak açar.

  2. Inspection path'i artık attacker tarafından adlandırılmış bir host file'a dokunur → hedeflenen metadata-only davranışının dışında, denial of service ya da mevcut bir host file'ının read/write'ı.

Detection

  • Host tarafı: image-intake pipeline'larındaki qemu-img invocation'larını audit et; beklenmedik host path'leri ya da block device'ları açan bir qemu-img info anormaldir.
  • Telemetry: qemu-img çalıştıran servis hesabında, image file'ının kendisinin dışındaki access'leri gösteren File-access / open() auditing.
  • Image scanning: İşlemeden önce data_file header'ı bir json: prefix'i içeren qcow2 image'lerini flag'le.

Mitigation

  • Patch: QEMU'da 9.1.0'dan önce düzeltildi; Red Hat errata aracılığıyla dağıtıldı (RHSA-2024:4276/4277/4278/4420). info path'i artık external data file'ını arbitrary bir block-device spec'i olarak açmıyor.
  • Hardening: image-intake tooling'ini unprivileged ve sandbox'lanmış çalıştır; untrusted image'ler üzerinde qemu-img'i asla privileged bir kullanıcı olarak çalıştırma.
  • Defense in depth: --image-opts / explicit allowlisting kullan ve block-device backend'lerine untrusted string geçirmekten kaçın.

References