Skip to content

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 VERW issue eder (MD_CLEAR microcode kullanarak) ve leak edilebilir buffer'ları flush eder. SMT üzerinden cross-thread leakage kalabilir.
  • TSX disabled — Kernel, TSX'i kapatmak için IA32_TSX_CTRL MSR'ını (RTM_DISABLE) set eder; transaction olmayınca TAA da olmaz ve status Mitigation: TSX disabled bildirir.

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_CLEAR yeteneğine sahip microcode olmadan, kernel buffer'ların cleared olduğunu bildirebilir ama bunu garanti edemez; status Vulnerable: Clear CPU buffers attempted, no microcode gö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