🔍 Contexte
Publié le 16 octobre 2026 par la société de recherche offensive Calif, cet article détaille l’exploitation d’une vulnérabilité dans le noyau OpenBSD, dont l’origine remonte à environ 37 ans dans les sources BSD originales. Les correctifs ont été publiés via les errata 026 et 018 d’OpenBSD.
🐛 Vulnérabilité
La faille principale réside dans un compteur d’attachement de mémoire partagée (shm_nattch) défini comme un entier signé 16 bits (short), avec une valeur maximale de 32 767. En forçant un dépassement de ce compteur via des forks répétés, il bascule vers une valeur négative (integer overflow), ouvrant la voie à :
- Un use-after-free via une condition de course
- Un out-of-bounds write dans le noyau
- Une élévation de privilèges locale vers root
⚙️ Chaîne d’exploitation
- Mappage de 127 segments de mémoire partagée SysV, démappage via
munmap(), et fork de 259 processus pour faire basculer le compteur à -32 643 - Heap grooming via métriques
sysctl(KERN_MALLOCSTATS) - Exploitation de la race condition avec
IPC_RMIDet attachement d’un segment de mémoire mal dimensionné - Alignement d’allocations de sockets IP et configuration de
IP_MULTICAST_TTLà 2 pour allouer une structureip_moptionspersistante de 16 octets - Déclenchement de l’out-of-bounds write conditionnel pour écraser les champs
imo_num_membershipsetimo_max_memberships - Fermeture du socket pour déclencher des décréments atomiques modifiant le mapping PTE auto-référentiel, passant de user à supervisor, permettant l’exécution de code kernel
- Écrasement d’un pointeur kernel prévisible (handlers ioctl de
lo0etenc0) pour obtenir un shell root
🛡️ Contournement des mitigations
L’exploit fonctionne malgré KARL, SMAP et SMEP activés, sans recours à une vulnérabilité de divulgation d’information, en exploitant le caractère déterministe des allocateurs mémoire kernel d’OpenBSD.
🔧 Mitigations proposées
- Safe-unlinking sur les listes doublement chaînées (TAILQ)
- Randomisation de l’adresse PTE auto-référentielle (slot PML4 aléatoire)
- Randomisation de l’allocateur kernel (adresse de base et ordre d’allocation)
- Array bounds sanitizer (UBSan) en build de release
- Alloc Tokens (fonctionnalité compilateur à venir) pour isoler les allocations contenant des pointeurs
📄 Nature de l’article
Il s’agit d’une publication de recherche offensive par Calif, accompagnée d’un PoC et de suggestions de patches, visant à documenter la vulnérabilité et à proposer des améliorations défensives systémiques pour OpenBSD et les projets BSD connexes.
🧠 TTPs et IOCs détectés
TTP
- T1068 — Exploitation for Privilege Escalation (Privilege Escalation)
- T1203 — Exploitation for Client Execution (Execution)
- T1499.004 — Endpoint Denial of Service: Application or System Exploitation (Impact)
🟡 Indice de vérification factuelle : 60/100 (moyenne)
- ✅ calif.io — source reconnue (Rösti community) (20pts)
- ✅ 8543 chars — texte complet (fulltext extrait) (15pts)
- ⬜ aucun IOC extrait (0pts)
- ⬜ pas d’IOC à vérifier (0pts)
- ✅ 3 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ pas de CVE à vérifier (0pts)
🔗 Source originale : https://calif.io/research/big-fish