Le fuzzing (dérivé du mot anglais fuzzy qui signifie flou) est une méthode permettant de traquer facilement des vulnérabilités dans des systèmes ou programmes. La technique est très simple : tout d'abord, il faut générer des données aléatoires à peu près conformes au protocole. Par exemple, ces données peuvent être de longues entrées comme 3425 x z, ou des indications de format tel que %a%a%a%, ou encore des valeurs d'entiers : 0,1,2, etc.., ou tout simplement des caractères Unicode (de U+0000 à U+0FFF).
Cependant, ces données ne sont pas totalement aléatoires, car elles ressemblent aux spécifications du protocole. En effet, elles doivent obéir à la logique de programmation du système ciblé, notamment sur les limites dans les opérations de parsing.
Si le fuzzer n'envoie que des données totalement aléatoires au système ciblé, celui-ci les rejettera dès qu'elles ne correspondront plus à ce qui est attendu.
Il faudra donc envoyer des données dites semi-valides pour que le parser ne les refuse pas tout de suite, mais qui pourront cependant causer quelques problèmes.
Il n'est pas rare que le système de parsing soit le maillon faible d'un système ciblé (ex: navigateur qui plante suite à une page web contenant des données aléatoires et complexes).
Dans certains cas, il se peut que le système ait soudainement un besoin de ressource en mémoire, ou que la charge du processeur tende violemment vers les 100 %
Ces réactions atypiques montrent que l'envoi de données semi-valides permet d'influencer le fonctionnement.
Dans chaque cas, les résultats sont sauvegardés pour une analyse ultérieure, dans d'autres cas, la même démarche peut être effectuée à nouveau, mais de façons différentes si le système n'a pas réagi.
Généralement, grâce à l'utilisation de cette technique, des erreurs dans la gestion de la mémoire ou dans d'autres parties du système ciblé sont découvertes.
Ces vulnérabilités peuvent alors être utilisées pour obtenir le total contrôle du système ainsi testé, si biensur cela est utilisé lors de testes de sécurité.