Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

GOT Overwrite

hacking

Définition

Le GOT Overwrite (Global Offset Table overwrite) est une technique d'exploitation binaire classique sur Linux/Unix qui consiste à modifier les entrées de la Global Offset Table pour rediriger les appels à des fonctions de bibliothèques partagées vers du code arbitraire. La GOT est une structure de données utilisée par le linker dynamique pour résoudre à l'exécution les adresses des fonctions importées depuis des bibliothèques. Lorsqu'un programme appelle une fonction de bibliothèque comme printf() ou system(), il passe d'abord par la PLT (Procedure Linkage Table) qui contient un stub redirigeant vers la GOT. La GOT contient initialement un pointeur vers le résolveur dynamique qui, lors du premier appel, résout l'adresse réelle de la fonction et met à jour la GOT pour les appels suivants (lazy binding). Si un attaquant peut écrire une valeur arbitraire dans une entrée de la GOT, il peut rediriger tous les futurs appels à cette fonction vers son code. Les vulnérabilités permettant un GOT overwrite incluent les format string vulnerabilities (écriture arbitraire via %n), les heap overflows ciblant la GOT, et les buffer overflows avec des primitifs d'écriture arbitraire. La technique classique : identifier l'adresse d'entrée GOT d'une fonction fréquemment appelée (exit(), free()), utiliser la vulnérabilité pour écrire l'adresse du shellcode ou d'une fonction comme system() dans cette entrée GOT. La prochaine invocation de cette fonction exécutera system() à la place. RELRO (Relocation Read-Only) est la protection principale contre les GOT overwrites. RELRO Partiel rend la section .got (mais pas .got.plt) en lecture seule. RELRO Complet (Full RELRO) résout toutes les résolutions de symboles au démarrage et rend l'intégralité de la GOT en lecture seule avant que le code principal s'exécute, empêchant complètement les GOT overwrites à l'exécution. Vérification avec checksec --file=binaire : la présence de 'Full RELRO' indique que la GOT est protégée. Les binaires modernes compilés avec -Wl,-z,relro,-z,now ont Full RELRO activé.

Fonctionnement

Avec une vulnérabilité d'écriture arbitraire (format string %n ou primitif de write-what-where), l'attaquant écrit l'adresse de system() dans l'entrée GOT de free(). Quand le programme appelle free(ptr) avec ptr pointant vers la chaîne '/bin/sh', system('/bin/sh') est exécutée à la place, ouvrant un shell. L'adresse de system() est déterminée depuis les informations ASLR (via un leak préalable) ou directement si ASLR est désactivé.

Exploitation offensive

Sur les binaires sans Full RELRO, le GOT overwrite est une technique d'exploitation puissante et fiable : l'écriture d'une seule adresse dans la GOT suffit à détourner l'exécution. Combiné avec un leak d'adresse libc (pour bypasser ASLR), c'est une des techniques les plus stables des exploitations Linux CTF et réelles.

Détection et mitigation

La compilation avec Full RELRO (-Wl,-z,relro,-z,now) est la mitigation principale et sans impact significatif sur les performances. Les systèmes de package Linux modernes (Fedora, Ubuntu récents) compilent les binaires système avec Full RELRO par défaut. checksec valide la présence de cette protection sur les binaires audités.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis