A propos CV Technique
Interactive Sandbox Web3 Engineering Security Lab Engineering Infrastructure Portfolio Audit Publications Changelog Veille Techno CTF Writeups Uses / Setup Blog Stats Now
Projets
Retour au portfolio
Live Demo Zone

Interactive Security Playground

Bienvenue dans le bac à sable de sécurité. Ici, vous pouvez expérimenter des vulnérabilités célèbres de manière sécurisée et visuelle directement dans votre navigateur.

Vulnerability: Reflected XSS

Injectez un script JavaScript dans le champ de recherche pour l'exécuter dans le contexte de la page vulnérable (simulée).

Attacker Input (You)

Essayez ce payload : <script>alert('Hacked by Alessandro')</script>

Vulnerable Page (Victim)

Results for query:

🛡️ Comment le corriger ?

Il faut échapper les caractères spéciaux avant d'insérer l'input utilisateur dans le DOM, par exemple avec textContent au lieu de innerHTML ou via une librairie de sanitization.

Vulnerability: Cross-Site Request Forgery (CSRF)

Cliquez sur un lien malveillant en tant qu'utilisateur "connecté" et observez l'action non-désirée exécutée à votre insu.

Banque App (Logged in!)
Solde actuel 10 000 €
[Sys] Connecté en tant que User.
Malicious Site (Attacker)

Regardez ce chaton tout mignon !

🛡️ Comment le corriger ?

Un jeton Anti-CSRF (CSRF Token) doit être généré aléatoirement pour chaque session et inclus obligatoirement dans les requêtes de changement d'état (POST, PUT, DELETE).

Vulnerability: JWT Manipulation (alg: none)

Modifiez le payload du token JWT (qui définit le rôle 'user') et passez l'algorithme à 'none' pour contourner la signature.

Header
Payload
Signature
Validated with secret [HIDDEN]
En attente de token...

🛡️ Comment le corriger ?

Le serveur doit toujours imposer un algorithme spécifique (ex: HS256 ou RS256) et ne jamais accepter dynamiquement "alg: none".

Vulnerability: Smart Contract Reentrancy

Videz les fonds du contrat victime en effectuant des appels récursifs avant que ce dernier ne mette à jour votre solde.

Vuln Contract (Bank)

Total ETH: 10.0
Attacker balance record: 1.0
// withdraw() uint bal = balances[msg.sender]; (bool ok,) = msg.sender.call{value: bal}(""); balances[msg.sender] = 0; // TROP TARD!

Attacker Contract

Total ETH Stolen: 0.0

🛡️ Comment le corriger ?

Il faut respecter le pattern Checks-Effects-Interactions : Mettre à jour l'état (le solde à 0) AVANT d'envoyer l'ETH (l'interaction externe).