TSX Asynchronous Abort mitigation¶
TAA (CVE-2019-11135), abort edilmiş Intel TSX transaction'ları üzerinden gelen MDS sınıfı bir transient-execution leak'idir; CPU buffer'larını VERW ile temizleyerek veya TSX'i disable ederek mitigate edilir.
Mechanism¶
Intel TSX (Transactional Synchronization Extensions) bir memory operasyon bölgesinin atomik bir transaction olarak çalışmasına izin verir. Bir transaction asenkron olarak abort edilmek zorunda kaldığında (örneğin çakışan bir memory access veya bir fault koşulu nedeniyle), transactional bölgenin içindeki instruction'lar zaten transient olarak çalışmış ve internal CPU buffer'larından — store buffer, fill buffer'lar ve load-port writeback path'leri — forward edilen data'yı okumuş olabilir. Bu forward edilen değerler stale olabilir ve başka bir context'e ait olabilir. Transaction atıldığı için architectural state geri sarılır, ama transient load'lar bir saldırganın covert channel ile decode ettiği microarchitectural bir ayak izi (örn. cache'te) bırakır.
Neden çalışır / fix neden çalışır
TAA, MDS ile aynı internal buffer'lardan (store buffer, fill buffer,
load-port data) sample alır. Leak, bir asynchronous abort retire olmadan
önceki transient pencerede gerçekleşir. Mitigation, bu buffer'ları her
privilege transition'da known-safe data ile üzerine yazar: MD_CLEAR CPUID
özelliğini bildiren microcode üzerinde VERW instruction'ı bu buffer'ları
flush etmek için yeniden amaçlandırılır. Bir VERW'den sonra buffer'lar
attacker-irrelevant data tutar, dolayısıyla sonraki bir transient sample işe
yarar hiçbir şey sızdırmaz. Alternatif, TSX'i disable ederek
(IA32_TSX_CTRL üzerinden) leak primitive'ini tamamen kaldırmaktır; böylece
hiçbir transaction abort edip stale data forward edemez.
Walkthrough¶
Linux, per-CPU vulnerability'yi ve seçilen mitigation'ı sysfs üzerinden sunar:
$ cat /sys/devices/system/cpu/vulnerabilities/tsx_async_abort
Mitigation: Clear CPU buffers; SMT vulnerable
Kernel'in bildirdiği olası status string'leri:
Not affected
Vulnerable
Vulnerable: Clear CPU buffers attempted, no microcode
Mitigation: Clear CPU buffers
Mitigation: TSX disabled
İlgili kernel boot parametreleri:
tsx={on|off|auto}
off - disable TSX (default on affected CPUs)
on - force TSX enabled
auto - disable TSX if TAA present, otherwise enable
tsx_async_abort={off|full|full,nosmt}
off - disable TAA mitigation
full - clear CPU buffers on ring transitions / VM entries
full,nosmt- full mitigation plus disable SMT on affected CPUs with TSX on
Kernel'in izleyebileceği iki mitigation path'i
- Clear CPU buffers — TSX enabled kalır; kernel, user mode'a dönmeden
önce ve VM entry'de
VERWissue eder (MD_CLEARmicrocode kullanarak) ve leak edilebilir buffer'ları flush eder. SMT üzerinden cross-thread leakage kalabilir. - TSX disabled — Kernel, TSX'i kapatmak için
IA32_TSX_CTRLMSR'ını (RTM_DISABLE) set eder; transaction olmayınca TAA da olmaz ve statusMitigation: TSX disabledbildirir.
SMT / hyperthreading uyarısı
Yalnızca buffer-clearing ile (TSX hâlâ enabled), kardeş bir hyperthread
clear'lar arasındaki pencerede hâlâ buffer'lardan sample alabilir, dolayısıyla
cross-thread saldırılar mümkün kalır. O açığı kapatmak için
tsx_async_abort=full,nosmt kullan ya da TSX'i disable et.
MDS ile ilişki
Eğer IA32_ARCH_CAPABILITIES.MDS_NO == 0 ise (CPU zaten software MDS
mitigation'larına ihtiyaç duyuyor), mevcut MDS buffer-clear TAA'yı da kapsar.
TAA kendi CVE'sini (CVE-2019-11135) taşır, çünkü aynı buffer'lara orijinal MDS
varyantlarından farklı bir mekanizma (TSX abort) üzerinden ulaşır.
Detection¶
- Belirli bir host'taki aktif mitigation'ı doğrulamak için
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort'u oku. - Hypervisor'larda, untrusted guest'ler için
IA32_TSX_CTRL[RTM_DISABLE]'ın set olduğundan emin ol; böylece bir guest TSX'e enumerate edilmemiş olsa bile onu kullanamaz.
Mitigation¶
Bu zaten mitigation sayfasıdır; residual risk:
- Performance vs. coverage — TSX'i VERW clearing ile enabled tutmak TSX işlevselliğini korur ama SMT disable edilmedikçe SMT cross-thread yüzeyini bırakır.
- Microcode bağımlılığı —
MD_CLEARyeteneğine sahip microcode olmadan, kernel buffer'ların cleared olduğunu bildirebilir ama bunu garanti edemez; statusVulnerable: Clear CPU buffers attempted, no microcodegösterir. - İlgili buffer-clear mitigation'ları — bkz. mds-buffer-clear, microcode-mitigations ve ilgili transient-execution flush primitive'i l1d-cache-flush.
References¶
- Intel, "Intel TSX Asynchronous Abort / CVE-2019-11135 / INTEL-SA-00270" — https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/advisory-guidance/intel-tsx-asynchronous-abort.html
- Linux kernel docs, "TAA - TSX Asynchronous Abort" (admin-guide/hw-vuln) — https://www.infradead.org/~mchehab/kernel_docs/admin-guide/hw-vuln/tsx_async_abort.html
- Red Hat, "CVE-2019-11135 - TSX Asynchronous Abort" — https://access.redhat.com/articles/tsx-asynchronousabort