Vulnérabilités de chaînes de format
Exploitez les chaînes de format de printf pour lire des zones mémoire arbitraires et écrire à des adresses arbitraires.
Vulnérabilités de chaînes de format est une leçon Cyber Security Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cyber Security Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cyber Security Academy comprend 4 leçons au total.
Qu’est-ce qu’une vulnérabilité de chaîne de formatage ?
Une vulnérabilité de chaîne de formatage se produit lorsque l’entrée utilisateur est transmise directement comme argument de chaîne de formatage à printf() ou à des fonctions similaires. L’attaquant peut lire la mémoire, divulguer des adresses de la pile et écrire des valeurs arbitraires.
Le motif vulnérable
Vulnérable ou sûr :
// VULNERABLE - user controls the format string:
printf(user_input);
fprintf(stderr, user_input);
// SAFE - user input is a data argument:
printf("%s", user_input);Lire la mémoire avec %x et %p
Les spécificateurs de format sans arguments correspondants lisent des valeurs sur la pile :
# Input: %p.%p.%p.%p.%p
# Output: 0x7ffd12345678.0x400580.0x0.0x1.0x7f3a...
# Each %p prints the next value off the stack - leaking addresses!Contourner ASLR grâce aux fuites de chaînes de formatage
La pile contient souvent des pointeurs vers libc, la pile et le binaire. En divulguant ces pointeurs avec les spécificateurs %p ou %lx, un attaquant peut calculer les adresses de base et contourner ASLR, même sans autre vulnérabilité.
Lire une zone mémoire arbitraire avec %s
%s traite la valeur située sur la pile comme un pointeur et affiche la chaîne présente à cette adresse. En plaçant l’adresse cible à la bonne position sur la pile et en utilisant l’accès aux paramètres (%7$s), un attaquant lit des emplacements mémoire arbitraires.
# Direct parameter access:
printf("%7$s") # prints string at 7th stack parameter
# If 7th param is an address you control, reads that memoryÉcrire dans la mémoire avec %n
%n écrit à l’adresse indiquée par l’argument correspondant le nombre de caractères déjà affichés. Cela permet d’écrire des valeurs contrôlées à des adresses arbitraires, et potentiellement d’écraser des pointeurs de fonction ou des adresses de retour.
Technique d’écriture pratique
Pour écrire une valeur précise avec %n :
- Contrôlez un pointeur sur la pile qui pointe vers l’adresse cible
- Utilisez
%Xc%N$npour écrire X caractères, puis écrivez le compteur dans le N-ième paramètre (l’adresse cible)
Des outils comme pwntools automatisent la construction d’exploits de chaînes de formatage.
Trouver les erreurs de chaîne de formatage
Tester la présence de vulnérabilités de chaîne de formatage :
# Test inputs:
%x.%x.%x
%p.%p.%p
%s%s%s
AAAA.%p.%p.%p.%p (looking for 0x41414141 in output)
# Automated testing with fuzzer:
python3 -c "print('%p.' * 20)" | ./vulnDéfense : corriger le code
La correction est très simple : transmettez toujours l’entrée utilisateur comme argument de données, jamais comme chaîne de formatage.
// WRONG:
printf(buffer);
// RIGHT:
printf("%s", buffer);
// Compiler warning:
// gcc -Wformat-security will flag thisLes chaînes de formatage dans d’autres langages
Les vulnérabilités de chaîne de formatage existent dans de nombreux langages :
- C :
printf(input) - Python : ce n’est pas la même chose, mais le formatage avec
%et une entrée sous forme de dictionnaire peut exposer des variables - Java :
String.format(input)— moins dangereux, sans accès à la mémoire
Exemples concrets
Des erreurs de chaîne de formatage ont touché :
- ProFTPD — a permis l’exécution de code à distance via des commandes FTP
- WU-FTPD — exploit à distance avec des privilèges root via des chaînes de formatage
- Divers démons Linux avant les années 2000
Les compilateurs modernes et FORTIFY_SOURCE aident, mais n’éliminent pas entièrement cette catégorie de vulnérabilités.
Vérification rapide : chaînes de formatage
Quel spécificateur de formatage peut être utilisé pour écrire à une adresse mémoire arbitraire lors d’une attaque par chaîne de formatage ?
Récapitulatif de la leçon
Les vulnérabilités de chaîne de formatage se produisent lorsque l’entrée utilisateur est utilisée directement comme chaîne de formatage de printf. %p/%x divulgue la mémoire de la pile ; %s lit des adresses arbitraires ; %n écrit à des adresses arbitraires. La correction tient en un caractère : printf("%s", input). Activez -Wformat-security dans les options du compilateur pour détecter ces problèmes.
Questions Fréquemment Posées
La leçon « Vulnérabilités de chaînes de format » est-elle gratuite ?
Oui — le texte complet de « Vulnérabilités de chaînes de format » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cyber Security Academy, passe à CoddyKit PRO. Le cours Cyber Security Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Vulnérabilités de chaînes de format » ?
Exploitez les chaînes de format de printf pour lire des zones mémoire arbitraires et écrire à des adresses arbitraires. Tu pratiques Cyber Security Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Cyber Security Academy ?
Aucune expérience préalable n'est requise. Cyber Security Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Vulnérabilités de chaînes de format » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Cyber Security Academy ?
Oui. Chaque leçon Cyber Security Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Dépassements de tampon de pile
- Programmation orientée retour (ROP)
- Vulnérabilités de chaînes de format
- Exploitation du tas : Use-After-Free et Heap Spraying