Skip to content

Registry hive corruption LPE (CVE-2023-23423)

Project Zero'nun Windows Registry Adventure'ından dört transacted-key-rename registry güvenlik açığından biri; kardeşleri gibi, bir KTM transaction'ının prepare/commit makinesi üzerinden hive cell'lerini corrupt eder ve SYSTEM'e yükselen hive memory corruption'ı verir.

Mechanism

Note

Neden çalışır: registry transaction'ları (KTM), yapısal düzenlemeleri — key oluşturma, silme ve rename — in-memory hive'a atomik olarak uygularken hive'ın self-referential graph'ındaki her cell index'ini tutarlı tutmalıdır. Bir transaction'ın bir prepare fazı (değişikliği stage et, cell allocate/free et) ve bir commit fazı (onu kalıcı kıl) vardır. Registry'nin hive cell modeli (_HBIN bin'leri içinde cell'ler, 32-bit index'lerle referans verilir, allocation signed bir size word'ünde encode edilir) hiçbir memory-safety ağı sunmaz: eğer prepare, commit'in daha sonra dokunduğu bir cell'i free eder ya da yeniden işaretlerse — ya da tersi — hive, kernel'in geçerli bir _CM_KEY_NODE / _CM_KEY_VALUE olarak ele almaya devam ettiği stale ya da yanlış-tipli bir cell index'iyle kalır. CVE-2023-23423, transacted rename kodundaki bu prepare/commit tutarlılık başarısızlıklarından biridir.

CVE-2023-23423, Project Zero issue #2394'ün parçası olarak, diğer transacted-rename bug'larıyla gruplanmış halde raporlandı. Microsoft bunu bir Windows Kernel elevation-of-privilege sorunu (CVSS 7.8, AV:L) olarak takip etti. Tüm kümenin tanımlayıcı özelliği, corruption'ın attacker'ın yazabildiği herhangi bir hive'a karşı yalnızca registry API/syscall'ları üzerinden ulaşılabilir olmasıdır — tetiklemek için driver IOCTL ya da pool spray gerekmez.

Walkthrough

CVE-2023-23423, CVE-2023-23420'nin kardeşidir; ikisi de transacted key rename'den kaynaklanır. 23420 "multiple issues with subkeys of transactionally renamed registry keys" olarak tarif edilirken, ilgili raporlar "multiple issues in the prepare/commit phase of a transactional registry key rename"i kapsar. Kavramsal olarak:

1. Build a key with subkeys and (optionally) values in a writable hive.
2. Begin a KTM transaction; issue a transacted rename.
3. The prepare phase stages cell allocations/frees for the rename.
4. A flaw in prepare vs. commit ordering leaves a cell index pointing
   at a freed / wrong-typed cell once the transaction resolves.
5. Reuse that cell index for an attacker-shaped cell -> type confusion.

Cell-index ayrışması (registry genelinde paylaşılır, bir cell yanlış-tipli olduğunda OOB erişim için kaldıraç):

index = [ Storage (1 bit) | Directory (10) | Table (9) | Offset (12) ]

Warning

Microsoft bu bug'ları tek tek patch'lemedi. CVE-2023-23420, CVE-2023-23423, CVE-2023-23421 ve CVE-2023-23422'nin hepsi, transacted key rename desteğini tümüyle kaldırarak ortadan kaldırıldı — altta yatan operasyon patch'li build'lerde artık mevcut değil. Bunu tarihsel / patch'lenmemiş-hedef tekniği olarak ele al.

Dört bug aynı corruption surface'ini (hive cell'leri) paylaştığı için, aynı downstream exploitation'ı da paylaşırlar: yanlış-tipli/free edilmiş bir cell, kontrollü bir _CM_KEY_VALUE.Data index'ine, sonra bir KASLR bypass ve arbitrary kernel read/write'a kaldıraçlanır. Trigger'ın kanonik write-up'ı için bkz. registry-hive-cell-corruption-lpe, genel primitive için registry-hive-memory-corruption-arbitrary-r-w.

Detection

  • Ayrıcalıksız bir process'ten gelen key-rename çağrılarıyla birleşen KTM registry transaction'ları davranışsal trigger'dır; patch'li sistemlerde rename path'i yoktur, dolayısıyla varlığı patch'lenmemiş bir build'i ima eder.
  • Offline hive parser'larına görünür hive yapısal anomalileri (dangling subkey-list girdileri, yanlış-tipli cell'ler) post-exploitation corruption'ı flag'leyebilir.

Mitigation

  • Mart 2023 Patch Tuesday güncellemesini uygula; transacted key rename kaldırıldı, CVE-2023-23423 ve üç kardeşini birlikte kapattı.

References