QEMU virtiofsd xattrmap capability leak (CVE-2021-20263)¶
virtiofsd'nin
xattrmapseçeneği kullanımdayken,security.capabilityextended attribute'u bir dosya değiştirildiğinde drop edilmiyordu, bu yüzden bir guest yeniden yazılmış bir executable üzerinde file capability'lerini koruyabiliyordu — normal bir write'ı bir privilege-retention primitive'ine dönüştürüyordu.
Mechanism¶
Sınır neden kırılıyor
Linux'ta security.capability extended attribute'u file capability'lerini —
bir binary'nin çalıştırıldığında kazandığı ayrıcalıkları — saklar. Temel bir kernel
güvenlik kuralı şudur: bir dosyaya yazmak security.capability'yi drop eder,
böylece bir saldırgan trusted, capability taşıyan bir binary'nin içeriğini
ayrıcalıklarını korurken üzerine yazamaz. virtiofsd guest filesystem işlemlerini
host'tan sunar ve guest ile host arasında xattr namespace'lerini remap/rename eden
(örn. user xattr'lara prefix ekleyen) bir xattrmap özelliği ekledi. Açık:
xattrmap aktifken, name translation drop-on-write mantığına müdahale etti,
böylece security.capability temizlenmek yerine bir guest write'ı boyunca
kalıcı oldu. İhlal edilen invariant şudur: xattr erişimine aracılık eden
herhangi bir katman, kernel'in drop-privileged-xattr-on-modify garantisini
korumalıdır; attribute adlarını remap etmek onu bypass etmemelidir. Etki: bir
guest unprivileged kullanıcısı, shared filesystem'deki capability taşıyan bir
executable'ın gövdesini, file capability'leri ekli kalırken üzerine yazar ve
değiştirilmiş ayrıcalıklı bir executable üretir — guest'te local privilege
escalation. Bu,
qemu-virtiofsd-sgid-file-ownership-flaw.md'deki
set-id ownership açığının capability kardeşidir ve kavramsal olarak
../kernel/overlayfs-userns-capability-privesc.md'deki
capability-retention escalation'a paraleldir.
Walkthrough¶
Public advisory ve virtiofsd fix'inden kavramsal yeniden kurgu; yalnızca mantıksal adımlar.
- Host, shared export için xattr namespace'lerini remap edecek şekilde yapılandırılmış
xattrmapseçeneğiyle virtiofsd çalıştırır. - Guest içinde, unprivileged bir kullanıcı
security.capabilitytaşıyan bir dosyayı açar ve ona yazar (içeriğini değiştirir). - xattrmap path'i capability drop'una müdahale ettiği için,
security.capabilityxattr'ı write'ta temizlenmez. Guest artık saldırgan seçimli içeriğe sahip ama hâlâ orijinal file capability'lerini veren bir executable'a sahiptir — privilege escalation.
Kavramsal fix
Fix, ayrıcalıklı xattr'ın name remapping'den bağımsız olarak modify'da hâlâ drop edilmesini sağlar:
/* always honor the kernel's drop-on-write for security.capability, */
/* mapping the *unprefixed* name so the clear is not bypassed */
"The new 'xattrmap' option may cause the 'security.capability' xattr in the guest to not drop on file write, potentially leading to a modified, privileged executable in the guest." — NVD CVE-2021-20263
Detection¶
- Capability integrity: Shared-export binary'lerinde
security.capability'yi periyodik olarak enumerate edin (getcap -r) ve known-good bir baseline'la karşılaştırın; içeriği değişmiş ama file capability'leri kalıcı olmuş bir executable birincil sinyaldir. - Config denetimi: Patch'lenmemiş bir build'de
xattrmapile başlatılan virtiofsd instance'larını exposed olarak işaretleyin. - Telemetri: Export'taki capability taşıyan dosyalara yapılan guest write
event'lerini, sonrasında değişmemiş
security.capabilityile koreleyin.
Mitigation¶
- Patch: virtiofsd / QEMU'yu,
xattrmapyapılandırılmış olsa bile write'tasecurity.capability'yi drop eden bir build'e güncelleyin. - Maruziyetten kaçının: Patch henüz mümkün değilse,
xattrmap'i etkinleştirmeyin ve shared tree'lerinosuidmount edin, böylece file capability'leri guest tarafından çalıştırmada onurlandırılmaz. - Least privilege: virtiofsd'yi seccomp/namespace confinement altında unprivileged çalıştırın; capability taşıyan executable'lar içeren dizinleri untrusted guest'lere export etmekten kaçının.
- Baseline monitoring: Shared export'larda bir capability baseline'ı (
getcap -r) tutun ve drift'te uyarın.