🔍 Contexte

Publié le 7 juillet 2026 par Nebula Security (nebusec.ai), cet article de recherche détaille GhostLock (CVE-2026-43499), une vulnérabilité de type stack Use-After-Free (UAF) dans le noyau Linux, découverte par l’équipe VEGA. La faille a été récompensée par Google à hauteur de 92 337 USD dans le cadre du programme kernelCTF.

🐛 Vulnérabilité

  • Type : Stack Use-After-Free (stack-UAF)
  • Composant affecté : kernel/locking/rtmutex.c, fonction remove_waiter()
  • Versions affectées : Linux v2.6.39-rc1 à v7.1-rc1 (introduite en 2011 avec le rework rtmutex)
  • Condition requise : CONFIG_FUTEX_PI=y uniquement — aucun privilège, aucun namespace utilisateur requis
  • Cause racine : remove_waiter() efface current->pi_blocked_on au lieu de waiter->task->pi_blocked_on sur le chemin proxy (rt_mutex_start_proxy_lock()), laissant un pointeur dangling vers une stack frame libérée

⚙️ Mécanisme d’exploitation

L’exploit nécessite trois futex et trois threads pour construire un cycle de dépendance PI déclenchant un -EDEADLK :

  1. GhostLock : obtention d’un pointeur dangling pi_blocked_on vers la stack du waiter
  2. Stack reclaim : utilisation de prctl(PR_SET_MM, PR_SET_MM_MAP) pour réécrire la frame libérée avec un faux rt_mutex_waiter forgé
  3. Primitive d’écriture contrainte : via rb-tree erase, écriture d’un pointeur vers une adresse quasi-arbitraire
  4. Cible : inet6_protos[IPPROTO_UDP] redirigé vers la CPU Entry Area (CEA)
  5. Control Flow Hijack : envoi d’un paquet UDP IPv6 loopback déclenche le handler forgé
  6. DirtyMode : un court ROP écrit une valeur permissive sur coredump_sysctls[1].mode, rendant /proc/sys/kernel/core_pattern accessible en écriture par tout utilisateur
  7. LPE final : écriture de |/proc/%P/fd/666 %P dans core_pattern pour exécuter un binaire en root

🛡️ Techniques de bypass

  • KASLR : leak via timing prefetch (~9 bits d’entropie, fiabilité quasi-100%)
  • CEA randomization (depuis Linux 6.2) : contournée via l’alias direct-map physmap
  • RANDOMIZE_KSTACK_OFFSET : réduit la fiabilité du reclaim à ~1/32 (non activé sur les cibles kernelCTF)

🔧 Patch

La correction remplace current->pi_blocked_on = NULL par waiter_task->pi_blocked_on = NULL en verrouillant le bon pi_lock. Backportée le 2026-05-04.

📅 Timeline

  • 2026-04-18 : Rapport à security@kernel.org
  • 2026-04-20 : Fix appliqué
  • 2026-05-04 : Backport v1
  • 2026-06-30 : Acknowledgement Google kernelCTF
  • 2026-07-07 : Publication

📄 Type d’article

Publication de recherche offensive détaillée avec PoC open-source (projet CyberMeowfia), visant à documenter techniquement la vulnérabilité et son exploitation complète sur x86_64 Linux.

🧠 TTPs et IOCs détectés

TTP

  • T1068 — Exploitation for Privilege Escalation (Privilege Escalation)
  • T1203 — Exploitation for Client Execution (Execution)
  • T1611 — Escape to Host (Privilege Escalation)
  • T1574 — Hijack Execution Flow (Defense Evasion)
  • T1055 — Process Injection (Defense Evasion)

IOC

  • CVEs : CVE-2026-43499NVD · CIRCL
  • Chemins : /proc/sys/kernel/core_pattern

🟡 Indice de vérification factuelle : 46/100 (moyenne)

  • ⬜ nebusec.ai — source non référencée (0pts)
  • ✅ 26206 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 2 IOC(s) (6pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 5 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ 0/1 CVE(s) confirmée(s) (0pts)

🔗 Source originale : https://nebusec.ai/research/ionstack-part-2/