0Pricing
Cyber Security Academy · Leçon

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 :

  1. Contrôlez un pointeur sur la pile qui pointe vers l’adresse cible
  2. Utilisez %Xc%N$n pour é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)" | ./vuln

Dé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 this

Les 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

  1. Dépassements de tampon de pile
  2. Programmation orientée retour (ROP)
  3. Vulnérabilités de chaînes de format
  4. Exploitation du tas : Use-After-Free et Heap Spraying
← Retour à Cyber Security Academy