How I Found a $113,337 AF_ALG Linux Local Privilege Escalation Before Copy Fail
Mis à jour :
Escalade de privilèges via AF_ALG dans le noyau Linux
Une vulnérabilité critique (CVE-2025-39964) a été découverte dans l’API AF_ALG du noyau Linux, présente depuis 2011. Cette faille permet à un utilisateur non privilégié d’obtenir les droits root ou de s’échapper d’un conteneur Docker.
Points clés
- Nature de la faille : Une condition de concurrence (race condition) lors d’écritures simultanées sur une même socket
AF_ALG. - Mécanisme : Lorsque deux threads tentent d’écrire simultanément via
sendmsg(), le verrouillage du socket est temporairement relâché pour attendre de l’espace mémoire. Cela permet à un thread de modifier l’état interne (af_alg_ctx) de manière incohérente, menant à une lecture hors limites (out-of-bounds) lors du calcul des pointeurs de la liste de dispersion (scatterlist). - Exploitation : L’accès hors limites permet de lire des données à un emplacement arbitraire dans le tas du noyau. En utilisant
memcpy_from_msg()comme un oracle (via des erreursEFAULT), les attaquants peuvent cartographier la mémoire et transformer cette lecture hors limites en une primitive d’écriture arbitraire dans le noyau, utilisée ici pour écrasercore_patternet exécuter du code arbitraire en tant que root.
Vulnérabilité
- CVE-2025-39964 : Dépassement de tampon et corruption de mémoire par condition de concurrence dans
crypto/af_alg.c.
Recommandations
- Mise à jour : Appliquer le correctif officiel disponible dans le commit 1b34cbbf4f01.
- Correctif : La correction impose l’exclusivité des écritures sur une socket
AF_ALGen introduisant un drapeau d’état (ctx->write) qui rejette les écritures concurrentes avec-EBUSY. - Audit : Surveiller les sous-systèmes du noyau accessibles par des utilisateurs non privilégiés (API socket, etc.) qui gèrent des états complexes sur plusieurs appels système.
