Skip to content

io_uring io_defer_entry double free (CVE-2023-21400)

CVE-2023-21400'ün kavramsal kataloğu: io_uring io_defer_entry object'inin improper-locking bir double free'si, Android'de local privilege escalation için exploit edildi.

Mechanism

Kök neden

NVD'ye göre: "io_uring.c'nin birden fazla function'ında, improper locking nedeniyle olası bir kernel memory corruption vardır" (CWE-667). Red Hat tracker'ı bunu io_defer_entry object'inin bir double free'sine sabitler; locking kusuru IOPOLL kullanan ring'leri içerir.

Sınır aşılır çünkü bir double free, tek bir freed allocation'a iki referans verir — cross-cache / page-level corruption için klasik tohum.

Walkthrough

Üst seviye (NVD, Red Hat tracker):

  1. IOPOLL kullanan ve deferred (drain) operation'lara sahip bir io_uring ring oluştur.
  2. Locking kusurunu tetikle ki io_defer_entry allocation'ı iki kez free edilsin.
  3. Double free'yi bir page-level / cross-cache corruption tohumu olarak kullan. Araştırmacılar bunu, fully-updated bir Pixel 7'de mitigation'ları bypass etmek ve LPE elde etmek için Dirty Pagetable tekniği ile exploit ettiklerini raporladılar (bkz. cross-cache-attack, dirty-pagetable-page-table-data-only-attack).

Detection

  • IOPOLL artı deferred (drain) operation'larla io_uring ring'leri oluşturan unprivileged/local process'ler — çoğu app için atipik.
  • io_uring path'lerinde kernel double-free / KASAN "double-free or invalid-free" raporları; slab corruption oops'ları.
  • Android/mobil filolarda, güvenilmeyen app'lerin io_uring kullanımı kendi başına güçlü bir anomalidir.

Mitigation

  • Temmuz 2023 Android Security Bulletin (2023-07-01) düzeltmesini uygula; stable fix commit fb348857e7b67eefe365052f1423427b66dedbf3 (linux-5.15.y).
  • Güvenilmeyen workload'lar için io_uring'i kısıtla veya disable et.
  • CVSS 3.1 6.7 (Medium), AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H.

References