La prochaine version du noyau Linux, la 7.2, inclura le drapeau OPENAT2_REGULAR pour l'appel système openat2. Cette fonctionnalité permet aux programmes de s'assurer qu'ils n'ouvrent que des fichiers réguliers, évitant ainsi d'être redirigés vers des périphériques spéciaux comme /dev/null ou des FIFOs, qui peuvent provoquer des comportements de blocage inattendus et des vulnérabilités de sécurité.
Comment fonctionne OPENAT2_REGULAR dans le noyau 🛡️
Le drapeau OPENAT2_REGULAR agit comme un filtre dans l'appel openat2. Lorsqu'il est activé, le noyau vérifie que le fichier de destination est de type régulier (S_IFREG) avant d'autoriser l'ouverture. Si le fichier est un périphérique de bloc, un FIFO ou un socket, l'opération échoue avec l'erreur EISDIR ou EPERM. Cette vérification a lieu après la résolution des liens symboliques, fermant la porte aux attaques qui utilisent des liens pour pointer vers des périphériques spéciaux. L'implémentation a été demandée par le groupe UAPI pour protéger les applications qui traitent des fichiers utilisateur.
Adieu aux frayeurs avec /dev/null et les FIFOs espiègles 😅
Jusqu'à présent, un programme confiant pouvait ouvrir un fichier et se retrouver avec un FIFO qui le laissait attendre des données pour toujours, ou pire, un /dev/null qui avalait toute sa sortie sans broncher. Avec OPENAT2_REGULAR, ces frayeurs sont terminées : si le fichier n'est pas régulier, le noyau dit non et le développeur économise des heures de débogage. C'est comme mettre un filtre à l'entrée du disque pour que seuls les vrais fichiers passent, pas des déguisements de carnaval.