Faille BSD vieille de 37 ans exploitée sur OpenBSD

Original : Big Fish: Exploiting a 37-Year-Old Kernel Bug in OpenBSD

Pourquoi c'est important

Un bug noyau de 1987 toujours exploitable illustre la durée de vie réelle des dettes techniques en sécurité.

Des chercheurs de Calif ont exploité un bug dans OpenBSD remontant aux sources BSD originales : un compteur signé 16 bits provoquant un integer overflow, aboutissant à une élévation de privilèges locale vers root.

La firme de sécurité Calif a publié les détails d'une vulnérabilité dans OpenBSD dont l'origine remonte à environ 37 ans, présente dans les sources BSD d'origine. Le problème : un compteur d'attachements de mémoire partagée (shm_nattch) défini comme un short signé 16 bits. En forkant 259 processus après avoir attaché 127 segments SysV, le compteur dépasse 32 767 et bascule en valeur négative. Cet integer overflow ouvre la voie à un use-after-free via une race condition, combiné à un out-of-bounds write séparé dans le noyau.

Résultat : une élévation locale vers root sur OpenBSD avec KARL, SMAP et SMEP activés — sans recours à une fuite d'information préalable. L'exploit s'appuie sur du heap grooming guidé par sysctl(KERN_MALLOCSTATS), puis manipule les structures ip_moptions pour déclencher deux décréments atomiques modifiant le mapping PTE, passant d'un accès user à supervisor et permettant l'exécution de code noyau. Les corrections ont été publiées dans les errata 026 et 018 d'OpenBSD. Calif souligne également que les allocateurs mémoire du noyau restent déterministes malgré KARL, rendant certaines structures prévisibles au démarrage.

Source

calif.io — Lire l'original →