Skip to content

QEMU virtiofsd xattrmap capability leak (CVE-2021-20263)

virtiofsd'nin xattrmap seçeneği kullanımdayken, security.capability extended 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.

  1. Host, shared export için xattr namespace'lerini remap edecek şekilde yapılandırılmış xattrmap seçeneğiyle virtiofsd çalıştırır.
  2. Guest içinde, unprivileged bir kullanıcı security.capability taşıyan bir dosyayı açar ve ona yazar (içeriğini değiştirir).
  3. xattrmap path'i capability drop'una müdahale ettiği için, security.capability xattr'ı 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 xattrmap ile 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.capability ile koreleyin.

Mitigation

  • Patch: virtiofsd / QEMU'yu, xattrmap yapılandırılmış olsa bile write'ta security.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'leri nosuid mount 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.

References