Illustration en collage de découpes de papier montrant un segment de circuit imprimé complexe avec des points rouges signalant des failles potentielles.

AFL : un fuzzer améliore la recherche de failles dans les logiciels

Le fuzzer American Fuzzy Lop (AFL), développé par Google, affine une stratégie éprouvée pour traquer les failles de sécurité dans les logiciels. Le fuzzing est une méthode puissante, responsable de la majorité des bugs d’exécution de code à distance et d’escalade de privilèges trouvés dans les systèmes critiques. Pourtant, cette approche traditionnelle est souvent limitée : les mutations aléatoires peinent à atteindre certaines portions de code, laissant des vulnérabilités hors de portée.

AFL se distingue en couplant le brute-force à un algorithme génétique simple mais solide, guidé par une instrumentation. Au lieu de se contenter de la couverture de bords, il utilise une forme modifiée de cette couverture pour capter des changements subtils dans le flux de contrôle du programme. L’algorithme fonctionne ainsi : il charge les cas de test initiaux, prend le prochain fichier, tente de le réduire à sa taille minimale sans altérer le comportement mesuré, puis le mute de manière répétée. Si une mutation génère un nouvel état de transition, elle est ajoutée à la file d’attente.

Ce processus génère, comme effet secondaire, un corpus de tests intéressant et autonome. Ce corpus est utile pour amorcer d’autres tests plus gourmands en ressources, comme le stress-test de navigateurs ou de suites bureautiques. Selon l’annonce de github.com, le fuzzer offre une performance bien supérieure aux outils de fuzzing aveugles ou basés uniquement sur la couverture.

Photographie documentaire montrant des mains manipulant un petit composant électronique sur un établi en bois, dans une lumière naturelle concentrée.

Quand le code source est disponible, l’instrumentation peut être injectée via un outil compagnon qui remplace GCC ou Clang dans les processus de construction standards. Pour les bibliothèques, la compilation statique est souvent la voie la plus simple. Si l’on veut détecter des erreurs de mémoire simples, activer AFL_HARDEN=1 permet au wrapper de compiler automatiquement des options de durcissement du code. Si le code source est absent, le fuzzer propose une version expérimentale pour instrumenter des binaires en boîte noire, en utilisant une version de QEMU en mode d’émulation d’espace utilisateur.

Ce qui est touché et la gravité réelle

Bien que l’annonce ne détaille pas les failles spécifiques découvertes par AFL, le champ des logiciels reste vaste. Les CVE mentionnées, comme CVE-2026-121035, CVE-2026-121156 et CVE-2026-121203, témoignent de la persistance des risques en matière de sécurité applicative. La capacité d’outils comme AFL à trouver des failles est ce qui nous oblige à rester vigilants. Le fait qu’AFL puisse fonctionner sur des binaires sans source, même si cette méthode est plus lente — environ deux à cinq fois moins rapide que l’instrumentation en compilation — signifie qu’il n’y a pas de refuge contre les tests automatisés.

Que faire maintenant

Pour les équipes de développement, si le code source est disponible, intégrer un tel outil dans le cycle de tests est une démarche logique. Il faut s’assurer de configurer l’instrumentation avec les wrappers appropriés, comme afl-clang pour Clang. Pour les systèmes dépendant de bibliothèques, bâtir en statique est souvent la solution la plus simple. Si l’on est confronté à des binaires fermés, il faut garder en tête la limitation de vitesse de l’émulation QEMU.

Sources