Skip to content

bhyve virtio_scsi / CTL use-after-free host code execution (CVE-2024-45063)

ctl_write_buffer'da yanlış işlenen bir flag, command completion sırasında hâlâ referans verilen bir buffer'ı serbest bırakıyor — bhyve guest'inden virtio-scsi üzerinden (ve network'ten iSCSI ile) erişilebilen bir host-kernel use-after-free.

Mechanism

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

Bir bhyve virtio-scsi device'ı SCSI'yi userspace'te emüle etmez — guest SCSI command'larını doğrudan FreeBSD CAM Target Layer (ctl(4)) katmanına, yani ctld iSCSI daemon'unun da kullandığı aynı host-kernel SCSI target backend'ine iletir. ctl_write_buffer fonksiyonu (SCSI WRITE BUFFER command'ını işleyen) bir flag'i yanlış set ettiği için, bir data buffer'ı ona hâlâ canlı bir referans varken serbest bırakılıyordu; command işlenmeyi bitirdiğinde dangling reference kullanılıyordu — klasik bir use-after-free (CWE-416). Vulnerable kod host kernel içinde çalıştığından isolation crossing doğrudandır: bir SCSI command gönderen guest host-kernel state'ine ulaşır ve serbest bırakılmış kernel memory'sini corrupt edip code execution'a doğru ilerleyebilir. İhlal edilen invariant: bir completion path, command path'in zaten serbest bıraktığı bir buffer'a referans vermemelidir.

Walkthrough

FreeBSD-SA-24:11'den kavramsal yol; örnekleyici, weaponize edilmiş bir chain değil.

  1. Host, CTL ile backed bir virtio-scsi device'ı guest'e expose eder:
bhyve -s 0,hostbridge -s 5,virtio-scsi,/dev/cam/ctl ... vm0
  1. Guest, virtio-scsi queue'su üzerinden bir SCSI WRITE BUFFER command gönderir.

  2. ctl_write_buffer içinde yanlış set edilmiş flag, ilgili buffer'ın işleme sırasında hâlâ referans verilirken serbest bırakılmasına yol açar; command completion'da serbest bırakılmış buffer tekrar dokunulur → kernel UAF. O allocation'ı attacker-shaped data ile reclaim etmek, dangling use'u bir corruption primitive'ine dönüştürür.

İki erişilebilirlik vektörü

Aynı ctl(4) kodu, CTL/iSCSI target export eden host'larda kötü niyetli bir iSCSI initiator tarafından uzaktan erişilebilir — bu yüzden local guest-to-host vektörünün (NIST 8.8, S:C) yanında CISA-ADP CVSS 9.8 (network) skoru da var.

Detection

  • Host tarafı: Hatayı ctl_write_buffer'a veya CTL command completion'a bağlayan kernel panic / UAF raporu (instrumented kernel'lerde KASAN).
  • Davranışsal: free/use penceresini kazanmak için tasarlanmış pattern'lerle WRITE BUFFER command gönderen bir guest veya iSCSI initiator şüphelidir; target üzerinde SCSI command auditing bunu ortaya çıkarabilir.

Mitigation

  • Patch: FreeBSD-SA-24:11.ctl uygula (2024-09-04'te düzeltildi: 13.3-p5, 14.0-p9, 14.1-p3); fix, flag handling'i düzelterek buffer'ın completion'da yanlışça free/reuse edilmemesini sağlar. Advisory ilgili CTL CVE'lerini bir arada toplar.
  • Maruziyet azaltma: Güvenilmeyen CTL/iSCSI target'larını export etme; host CTL ile backed virtio-scsi'nin hangi guest'lere verildiğini kısıtla.

References