Atelier - Journée Cybersécurité 0x03
Ce document contient la liste des vulnérabilités explorées lors de la Journée Cybersécurité 0x03 présentée au Cégep de Shawinigan par ShawiSec le 15 octobre 2019.
L'atelier consiste à l'exploration de certains laboratoires offerts sur la plateforme Web Security Academy de PortSwigger.
Clickjacking
https://portswigger.net/web-security/clickjacking
On brouille la perception de l'utilisateur, alors qu'il pense effectuer une action, on l'intercepte pour la rediriger vers une autre ressource. On superpose un élément d'interface vulnérable transparent(iframe) au-dessus de l'élément d'appât et lorsque l'utilisateur tentera d'utiliser l'action, il démarrera en fait l'item masqué involontairement.
Protection:
-
Certains navigateurs n'autorisent pas les iframe avec une trop faible opacité.
-
Utiliser le mécanisme de Content Security Policy OU X-Frame-Options qui indique au navigateur de bloquer les iframes dans un domaine différent.
-
Attribut sameSite pour les cookie
Laboratoires
-
Lab: Basique
https://portswigger.net/web-security/clickjacking/lab-basic-csrf-protected -
Lab: Paramètre d'URL
https://portswigger.net/web-security/clickjacking/lab-prefilled-form-input -
Lab: 2 boutons
https://portswigger.net/web-security/clickjacking/lab-multistep
CSRF: Cross-site request forgery
https://portswigger.net/web-security/csrf
Exécuter une action/URL à la place d'un utilisateur qui visite un autre site, sans lui demander d'interaction directe.
3 critères doivent exister pour exploiter un CSRF: - il existe une action pertinente(changement de courriel, création d'une ressource, etc.) accessible à l'utilisateur. - le navigateur authentifie directement l'utilisateur: cookie ou HTTP Basic Auth, par exemple. - les paramètres requis sont connus ou faciles à deviner.
Protection:
-
Attribut sameSite pour les cookie: https://portswigger.net/web-security/csrf/samesite-cookies
-
CSRF Token qui certifie que la requête provient d'une page légitime servie par le serveur, pour l'utilisateur courant: https://portswigger.net/web-security/csrf/tokens
Laboratoires
-
Lab: Basique
https://portswigger.net/web-security/csrf/lab-no-defenses -
Lab: Autre méthode HTTP
https://portswigger.net/web-security/csrf/lab-token-validation-depends-on-request-method -
Lab: Validation sans CSRF Token
https://portswigger.net/web-security/csrf/lab-token-validation-depends-on-token-being-present -
Lab: Substitution du CSRF Token
https://portswigger.net/web-security/csrf/lab-token-not-tied-to-user-session
XSS : Cross-site scripting
https://portswigger.net/web-security/cross-site-scripting
Exécution arbitraire de code JavaScript en tant qu'un utilisateur connecté. Le XSS est plus flexible dans les actions visées et permets une plus grande manipulation du système en tant que l'utilisateur. Tandis que le CSRF est unidirectionnel(une action est lancée, mais on ne peut manipuler le résultat et chainer les requêtes), le XSS permet de programmer des manipulations plus complexes, interpréter le résultat et récupérer des données.
Plus de détails sur la différence en XSS vs CSRF:
https://portswigger.net/web-security/csrf/xss-vs-csrf
3 types de failles XSS:
-
Reflected: Obtenue à partir de la requête HTTP courante
-
Stored: Stockée puis affichée ultérieurement dans l'application
-
DOM-based: Injectée à partir d'une manipulation du DOM
Les vulnérabilités XSS peuvent être accessibles dans différents contextes de l'application web:
https://portswigger.net/web-security/cross-site-scripting/contexts
Liste de différentes méthodes d'injection du JavaScript:
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
Protection:
-
Validation des valeurs reçue
-
Filtrer/encoder l'affichage des données
Laboratoires
-
Lab: Stored
https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded -
Lab: Reflected
https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded -
Lab: DOM, document.write
https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-document-write-sink -
Lab: DOM, innerHTML
https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-innerhtml-sink -
Lab: Exploration de différents contextes d'exécution du script
https://portswigger.net/web-security/cross-site-scripting/contexts
Défi
Une exploitation efficace sera souvent la combinaison de plusieurs vulnérabilités pour augmenter l'impact.
- Lab: Injection XSS à partir d'un clickjacking
https://portswigger.net/web-security/clickjacking/lab-exploiting-to-trigger-dom-based-xss
Un VRAI défi!
À partir de cette introduction à certaines vulnérabilités, il est temps de relever le défi du CTF Hacker 101. Étant donné qu'il peut être très difficile d'apprendre lorsqu'on est bloqué sur un défi, on peut utiliser une explication des solutions pour comprendre la faille avant d'essayer de l'exploiter.