GOT Overwrite
hackingDé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
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h