FatGid: FreeBSD 14.x kernel local privilege escalation
Une débordement de tampon sur la pile du noyau existe dans l'appel système setcred(2) introduit dans FreeBSD 14.x, permettant à un utilisateur local non privilégié de provoquer un plantage du noyau ou une élévation complète de privilèges, et des exploits fonctionnels amd64 ont été développés tant sans SMAP/SMEP qu'avec SMAP/SMEP (la variante sûre nécessite zfs.ko chargé). La cause est une erreur de type sizeof dans kern_setcred_copyin_supp_groups() où groups est déclaré gid_t **, si bien que sizeof(*groups) vaut 8 octets au lieu de 4, entraînant la copie de 120 octets dans un tampon local de 60 octets lorsque sc_supp_groups_nb vaut 15. Le débordement se produit avant toute vérification de privilèges, ce qui permet à n'importe quel utilisateur local de le déclencher via setcred(SETCREDF_SUPP_GROUPS, &wcred, sizeof(wcred)), et les systèmes 14.3/14.4 non corrigés sont exploitables tandis que les 15.0 vulnérables provoquaient seulement un plantage. Les enchaînements d'exploitation diffèrent selon les mitigations : sans SMAP/SMEP l'exploit corrompt des registres pour forcer un double indirect call via amd64_syscall+0x155 vers du shellcode en espace utilisateur, tandis qu'avec SMAP/SMEP la chaîne utilise un gadget dans zfs.ko pour mettre td->td_ucred sur un faux credential placé dans une slab pargs via setproctitle et un procédé de fork. La vulnérabilité a été corrigée et annoncée par le FreeBSD Security Team (FreeBSD-SA-26:18, CVE-2026-45250) en mai 2026 avec correctifs pour 14.3-RELEASE-p14, 14.4-RELEASE-p5 et 15.0-RELEASE-p9, il faut appliquer les mises à jour fournies ou reconstruire le noyau et redémarrer car il n'existe pas de mitigation userland fiable.