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.
- Host, CTL ile backed bir virtio-scsi device'ı guest'e expose eder:
-
Guest, virtio-scsi queue'su üzerinden bir SCSI
WRITE BUFFERcommand gönderir. -
ctl_write_bufferiç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 BUFFERcommand 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.