XSS
Def et Fonctionnement:
Les attaques XSS, ou Cross-Site Scripting, sont des types de vulnérabilités de sécurité informatique qui permettent à un attaquant d'injecter du code malveillant (Injections), souvent du JavaScript, dans les pages web vues par d'autres utilisateurs. Ces attaques exploitent les failles dans les applications web qui ne filtrent pas ou ne vérifient pas correctement les entrées utilisateurs avant de les afficher sur une page web. Voici les trois principaux types d'attaques XSS et leurs enjeux, suivis des moyens de remédiation.
Lien complet :
https://owasp.org/www-community/attacks/xss/
Exploitation :
Prérequis :
- La DATA entre dans une application à travers une source non-authorisée (web request)
- la DATA est envoyée sans validation
Les champs exploitables pour une XSS sont ceux pour lesquelles il y a ensuite un traitement dans le backend.
Il existe plusieurs types de XSS :
Stored vs Reflected vs Blind
Stored XSS
Dans ce cas le script inséré est stocké en permanence sur le server, le script s'exécute pour chaque connexion. Par exemple, un message sur un forum.
C'est dangereux car il n'y a pas besoin qu'un utilisateur clique sur un lien.
Chall Rootme : XSS - Stockée 1
Reflected XSS (Non-persistent XSS)
Le XSS réfléchi se produit lorsque l'application web reçoit des données de l'utilisateur, généralement via une requête HTTP (comme une requête GET avec des paramètres dans l'URL), et renvoie immédiatement ces données dans la réponse sans les valider ni les encoder. L'attaquant peut alors envoyer un lien malveillant à la victime, qui, une fois cliqué, exécute le script malveillant dans le navigateur de la victime.
Exemple : Si un site web affiche des résultats de recherche directement à partir d'une requête utilisateur sans nettoyage adéquat, un attaquant pourrait créer un lien contenant du JavaScript malveillant :
http://exemple.com/recherche?q=<script>alert('XSS')</script>
Si une victime clique sur ce lien, le script s'exécutera dans son navigateur.
XSS DOM-based
Dans une attaque XSS basée sur le DOM, le script malveillant est injecté et exécuté en raison d'une manipulation du DOM de la page par le script client sans une validation appropriée. Cela peut être dû à l'écriture directe de données contrôlables par l'utilisateur dans le DOM.
Exemple :
document.getElementById('someElement').innerHTML = location.hash;
Si l'URL contient un hash malveillant, il sera écrit dans le DOM et exécuté.
Le but est généralement de créer un lien malveillant, qui va executer quelque chose sur la page lorsque la victime clique (par exemple envoyer ses cookies de session)
Def DOM:
Le DOM, ou Document Object Model (Modèle d'Objet de Document), est une interface de programmation pour les documents HTML et XML. Il représente la page de sorte que les programmes peuvent changer la structure du document, son style et son contenu. Le DOM fournit une représentation du document sous forme d'arbre, permettant aux développeurs de manipuler le contenu, la structure et le style de la page Web.
Blind XSS
Le script est stocké dans le backend, et sera executé dès qu'un admin backend va ouvrir. Par exemple, des formulaires de feedback XSS vont dans le backend et dès que l'admin va l'ouvrir cela va executer quelque chose. C'est un type de XSS qui est stored. Cela ressemble beaucoup à CSRF
Note :
Il existe d'autres types d'attaques XSS.
Cheatsheet :
- Lien ordonné :
https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html - Base de données :
https://gist.github.com/kurobeats/9a613c9ab68914312cbb415134795b45
Prévention :
https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
Sinon des appareils en amont du serveur WEB comme des WAF ou des firewall applicatifs peuvent encore vérifier la présence de chaîne de character dangereux.
Aussi on peut :
- Valider les entrées : Vérifier que les données entrantes correspondent aux attentes (par exemple, des nombres pour les champs numériques).
- Encoder les sorties : Avant d'afficher les données à l'utilisateur, les caractères spéciaux (comme <, >, ", ') devraient être convertis en entités HTML sécurisées.
- Utiliser des politiques de sécurité de contenu (CSP) : Implémenter des politiques qui restreignent les sources à partir desquelles le contenu peut être chargé.
- Utiliser des frameworks modernes : Des frameworks comme React et Angular offrent souvent une certaine protection contre les XSS en gérant correctement les données dynamiques.