ObjectifCyber

Chapitre 7 — Codage Sécurisé, SQLi, XSS & Buffer Overflow

Les attaques d'injection et les vulnérabilités de code sont parmi les plus courantes. Ce module couvre le OWASP Top 10, les attaques par injection et les principes du codage sécurisé.

Mémorisez ! SQLi = entrée utilisateur non validée insérée dans une requête SQL. Contre-mesure principale : requêtes paramétrées (prepared statements). La validation et l'échappement des entrées sont complémentaires mais pas suffisants seuls.

L'injection SQL se produit quand un attaquant insère du code SQL malveillant dans un champ de saisie pour manipuler la base de données.

Exemple SQLi :
Formulaire de connexion : SELECT * FROM users WHERE username='$user' AND password='$pass'
Attaquant entre comme username : ' OR '1'='1
Résultat : SELECT * FROM users WHERE username='' OR '1'='1' AND password=''
'1'='1' est toujours vrai → accès accordé sans mot de passe.

Types d'injection SQL

Contre-mesures SQLi : requêtes paramétrées (Prepared Statements), procédures stockées, ORM, validation des entrées, WAF, principle of least privilege sur le compte DB.

XSS permet à un attaquant d'injecter du code JavaScript malveillant dans une page web vue par d'autres utilisateurs.

Type XSSDescriptionPersistance
Stored (Persistent)Le script est stocké dans la base de données et exécuté pour chaque visiteurPersistant — affecte tous les utilisateurs
Reflected (Non-Persistent)Le script est reflété dans la réponse depuis l'URL/requête. La victime doit cliquer sur un lien malveillant.Non persistant
DOM-basedLe script modifie le DOM côté client sans passer par le serveurCôté client uniquement

Contre-mesures XSS : encodage des sorties (output encoding), Content Security Policy (CSP), validation des entrées, HttpOnly cookies (empêche JS d'accéder aux cookies), WAF.

Astuce Examen

CSP (Content Security Policy) est une des meilleures défenses contre XSS. En définissant une politique CSP stricte (ex: "n'exécuter que des scripts du même domaine"), même si un XSS est injecté, le navigateur refusera de l'exécuter.

Un buffer overflow se produit quand un programme écrit plus de données que la mémoire allouée peut en contenir — les données débordent dans des zones mémoire adjacentes.

1. Quelle est la contre-mesure la plus efficace contre l'injection SQL ?

Les Prepared Statements (requêtes paramétrées) séparent le code SQL des données. L'entrée utilisateur ne peut jamais être interprétée comme du code SQL — elle est toujours traitée comme une donnée. C'est la seule protection vraiment efficace contre SQLi.

2. Un XSS "Stored" (persistant) est plus dangereux qu'un XSS "Reflected" car :

XSS Stored = le script est sauvegardé dans la base de données (ex: commentaire de blog avec du JS). Chaque utilisateur qui visite la page l'exécute automatiquement. Un attaquant peut compromettre des milliers d'utilisateurs sans cibler chacun individuellement.

3. Un buffer overflow permet à un attaquant de :

Buffer overflow : écrire plus que la taille du buffer alloué déborde dans la mémoire adjacente. Sur la stack, cela peut écraser l'adresse de retour (return address) et rediriger l'exécution vers le shellcode de l'attaquant — exécution de code à distance.

4. ASLR (Address Space Layout Randomization) est une protection contre :

ASLR randomise l'emplacement de la pile, du tas et des bibliothèques partagées à chaque démarrage. Un exploit de buffer overflow qui suppose des adresses mémoire fixes échouera car les adresses sont différentes à chaque exécution. Doit être combiné avec DEP/NX pour une protection complète.

5. CSRF (Cross-Site Request Forgery) exploite :

CSRF : une page malveillante déclenche une requête vers un site où l'utilisateur est connecté (ex: virement bancaire). Le navigateur inclut automatiquement les cookies de session — le site cible pense que la requête vient de l'utilisateur. Contre-mesure : tokens CSRF uniques par formulaire.

6. La CSP (Content Security Policy) est particulièrement efficace contre :

CSP = header HTTP définissant une whitelist des sources autorisées pour les scripts, styles, images. Même si un XSS est injecté dans la page, le navigateur refusera d'exécuter un script qui ne correspond pas à la politique CSP. Réduction significative de la surface d'attaque XSS.

7. La "whitelist validation" est préférable à la "blacklist validation" pour les entrées utilisateur car :

Blacklist = bloquer ce qui est connu mauvais. Problème : il est impossible de lister toutes les variantes d'attaque. Un attaquant peut encoder autrement, utiliser des caractères Unicode, etc. Whitelist = n'accepter que ce qui est connu bon (ex: champs de nom = seulement lettres et espaces) — beaucoup plus robuste.

8. Le DEP/NX (Data Execution Prevention / No-eXecute) protège contre les buffer overflows en :

DEP/NX marque les pages mémoire de données (stack, heap) comme non-exécutables. Même si un attaquant y écrit son shellcode via un buffer overflow, le CPU refusera de l'exécuter. ASLR + DEP = deux couches de protection complémentaires.

9. Un test DAST (Dynamic Application Security Testing) est effectué :

DAST = test dynamique sur app en fonctionnement (black box). Simule des attaques réelles (SQLi, XSS, etc.) sur l'application déployée. SAST = analyse statique du code source (white box). Les deux se complémentent dans un SDLC sécurisé.

10. Pourquoi les langages comme Java et Python sont-ils moins vulnérables aux buffer overflows que C/C++ ?

Java, Python, Go, Rust gèrent la mémoire automatiquement (garbage collection) et vérifient les bornes des tableaux. Une tentative d'écriture hors bornes lève une exception, pas un débordement silencieux. C/C++ font confiance au programmeur pour gérer la mémoire — une erreur = vulnérabilité potentielle.