Stack Canary Bypass
hackingDéfinition
Le stack canary (ou stack protector) est un mécanisme de protection anti-exploitation compilé dans les binaires avec GCC (-fstack-protector, -fstack-protector-all, -fstack-protector-strong) ou Clang. Il insère une valeur aléatoire ('canari') sur la pile entre les variables locales et l'adresse de retour, puis vérifie son intégrité avant le retour de la fonction. Une modification du canari (causée par un buffer overflow) déclenche une terminaison immédiate du programme. Les techniques de bypass du stack canary exploitent différentes faiblesses : la fuite du canari via une vulnérabilité secondaire (format string vulnerability, out-of-bounds read) pour l'inclure dans le payload d'exploitation, la brute-force du canari (possible sur des systèmes 32-bit avec fork() car les processus fils héritent du même canari et un crash ne tue pas le père), et les attaques ciblant des structures non protégées par le canari (heap, sections de données, vtables). Les canaris ont plusieurs variantes : le 'terminator canary' (valeur 0x000aff0d contenant des terminateurs de chaînes pour bloquer les overflows via strcpy), le 'random canary' (valeur aléatoire générée au démarrage, la plus courante), et le 'XOR canary' (random XOR avec l'adresse de retour pour lier le canari au frame courant et bloquer les attaques de replay). Une fuite de canari est souvent possible via une format string vulnerability (le canari se trouve sur la pile et est lisible avec %p/%x), via un out-of-bounds read (lecture au-delà d'un buffer sur la même frame de pile), ou via une autre vulnérabilité permettant de lire des données de la pile. Une fois le canari connu, le payload d'exploitation l'inclut à la position correcte pour passer la vérification. Dans un contexte multi-processus avec fork(), le processus fils hérite du même espace mémoire que le père, incluant le canari. Si l'application fork() pour chaque connexion sans re-randomiser le canari et si un crash du fils ne termine pas le père, l'attaquant peut brute-forcer le canari un octet à la fois (256 tentatives par octet, soit 1024 tentatives pour un canari 32-bit).
Fonctionnement
Le canari est placé entre les variables locales et le saved RBP/return address. À l'entrée de la fonction (prologue), le canari est lu depuis le TLS (Thread Local Storage) et stocké sur la pile. À la sortie (épilogue), la valeur sur la pile est comparée avec le TLS. Si différent, __stack_chk_fail() est appelée et termine le programme. Le canari commence toujours par un octet nul (0x00) pour bloquer les overflows via des fonctions string (strcpy s'arrête au 0x00).
Exploitation offensive
Le workflow typique de bypass : 1) exploiter une format string leak pour lire le canari depuis la pile, 2) construire un payload buffer overflow qui inclut le canari correct à la bonne position, suivi du RBP forgé, suivi de l'adresse de retour vers le shellcode ou une chaîne ROP. Les challenges CTF de type pwn testent régulièrement ces techniques de canary bypass.
Détection et mitigation
Le canary ne protège que contre les overwrites séquentiels de la pile (buffer overflows classiques). Il ne protège pas contre les écritures arbitraires (UAF, heap overflow vers la pile), les corruptions d'autres structures, ou les attaques ciblant des pointeurs de fonctions qui ne passent pas par la vérification du canari. La combinaison canary + ASLR + NX/DEP + CFI offre une protection plus robuste que le canary seul.
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