2. Jérôme Thémée
Jérôme Thémée
BIO :
● Consultant/formation en sécurité
de l’information
● Co-fondateur du cursus Expert(e)
sécurité Digitale (Bac+5)
● Membre du Club EBIOS
● Certifié CISM, ISO 27005, ITIL,
MCT, MCSA
3. Sommaire
● Présentation de l’OWASP TOP 10 et de son fonctionnement
● Les injections XXE, XPATH, LDAP, SQL + démonstration
● Violation de Gestion d'authentification et de Session + démonstration
● Les XSS, Stored, reflected et DOM
● Références directes non sécurisées à un objet + démonstration
● Mauvaise configuration sécurité + Démonstration
● Exposition de données sensibles + démonstration
● Manque de contrôle d’accès au niveau fonctionnel + démonstration
● Cross Site Request Forgery (CSRF) + démonstration
● Utilisation de composants avec des vulnérabilités connues + démonstration
● Redirections et Renvois Non Validés + démonstration
● Bonus (démonstration avec Burp suite)
Jérôme Thémée
4. Qu’est que l’OWASP et son TOP 10 ?
● Qu’est ce que l’Open Web Application Security Project ?
● Qu’est ce que le TOP 10 OWASP ?
Jérôme Thémée
16. Une injection SQL est un type d'exploitation d'une faille de sécurité d'une application interagissant avec une base de
données, en injectant une requête SQL non prévue par le système et pouvant compromettre sa sécurité.
Prenons un exemple simple d’un script d’authentification:
Injection SQL
Jérôme Thémée
19. Se protéger :
N° Méthode Description
1 Framework Utiliser un framework pour le développement, de préférence avec un ORM (mapping objet-
relationnel)
2 Préparer vos requêtes Désinfecter (sanitized) les requêtes envoyées en base de données avec des méthodes telles que :
● JAVA - PreparedStatement()
● .NET - SqlCommand() ou OleDbCommand()
● PHP - utiliser PDO avec la méthode prepare() et bindParam() pour les paramètres
contenant des entiers (integer)
Voici un exemple en PHP d’un requête préparée contre les injections SQL :
if(is_numeric( $id )) {
$data = $db->prepare( 'SELECT nom, tel FROM users WHERE user = (:id) LIMIT 1;' );
$data->bindParam( ':id', $id, PDO::PARAM_INT );
$data->execute();
}
3 Réécriture d’URL L’utilisation de la réécriture d'URL permet de compliquer fortement la tâche au cybercriminel et
s’avère être une des protections contre les injections SQL.
4 WAF Installation d’un Web Application Firewall
20. 2 - Violation de Gestion d'authentification et de Session
Jérôme Thémée
21. + Violation de Gestion d'authentification et de Session
Jérôme Thémée
22. ● Faiblesses des mot de passes
Parmi les défauts de conception d’une application WEB, l’autorisation des mots de passe dit
“faible” est courante. Beaucoup de sites WEB contenant des informations sensibles, laisse le
choix à l’utilisateur d’utiliser des mots de passe simples, voire très banaux comme des noms
de personnages de fictions, des dates de naissances, etc. une personne célèbre telle que
Mark Zuckerberg a vu ses comptes Twitter et Pinterest piratés en 2016 car son mot de passe
était “Dadada”.
Violation de gestion d’authentification
Jérôme Thémée
23. Violation de gestion d’authentification
Jérôme Thémée
Démonstration
avec Cupp.py et
Xhydra
24. ● Se protéger ?
Violation de gestion d’authentification
N° Méthode Description
1 Mot de passe
complexe
Lors de la création de compte d’utilisateur, il est nécessaire de forcer celui-ci à
utiliser un mot de passe complexe (majuscule, minuscule, chiffre, caractère
complexe). Cette vérification doit s’effectuer côté client et serveur. Voici un
plugin jQuery très bien réalisé pour la partie client :
http://jquerycards.com/forms/inputs/strength-js/
2 Jeton La création d’un jeton sur la page d’authentification permet de rendre la tâche
plus compliquée pour les cybercriminels même s’il est possible d’absorber
celui-ci, cette méthode est déjà un premier rempart.
3 Captcha Suivant les exigences en matière de sécurité, si le token n'est pas suffisant, le
Captcha reste un moyen efficace pour les attaques par dictionnaire ou brute
force. Tous les captchas ne se valent pas, google propose un service de
Captcha (reCAPTCHA) simple et efficace. Pour plus d’informations sur
reCAPTCHA : https://www.google.com/recaptcha/intro/index.html
Jérôme Thémée
25. ● Le vol de session (session hijacking)
Violation de gestion d’authentification
Jérôme Thémée
26. Violation de gestion d’authentification
Jérôme Thémée
Démonstration
avec Ettercap et
DVWA
27. ● Se protéger ?
Violation de gestion d’authentification
N° Méthode Description
1 Ajout HTTPS Un moyen efficace est l’utilisation exclusive du protocole
HTTPS sur un serveur WEB. Le protocole se démocratise et
la plupart des hébergeurs le propose.
La Linux foundation propose des certificats reconnus et
gratuits, disponibles à cette adresse :https://letsencrypt.org/
2 Flag secure
cookie
Activer la fonctionnalité sur le serveur WEB flag secure
cookie déjà introduite lors du chapitre précédent
(cf.Panorama de la sécurité WEB - les sécurités des
navigateurs et serveurs WEB). Cette fonctionnalité permet de
transmettre les identifiants de session au serveur seulement
sous un protocole sécurisé (HTTPS). Ce qui permet de
réduire les attaques de l’homme du milieu.
Jérôme Thémée
28. ● Autres vulnérabilités :
▹ Faiblesses dans la conception des sessions
▹ Mot de passe encoder en Base de données
▹ Aucun salage des mots de passe
▹ Etc ...
Violation de gestion d’authentification
Jérôme Thémée
34. XSS
XSS DOM :
La vulnérabilité XSS DOM consiste à utiliser une entrée telle qu’un user-agent, URL, referrer
HTTP,... afin d’y injecter un code JavaScript malicieux (XSS) qui sera interprété à l’intérieur des
fonctions liées au DOM. Voici un exemple de code vulnérable :
<script>
document.write("<b>URL Courante<b> : " + document.baseURI);
</script>
Le script ci-dessous permet d’afficher l’URL courante. Voici un exemple d’utilisation d’un XSS
DOM :
http://www.exemple.com/test.html#<script>alert(1)</script>
Jérôme Thémée
40. Références directes non sécurisées à un objet
Jérôme Thémée
Se protéger :
N° Méthode Description
1 Contrôle des
références
Afin de se protéger contre ce genre d’attaque, il est nécessaire de
mettre des contrôles stricts sur les références utilisateurs,
l’utilisateur. Une pattern permettant de vérifier si l’utilisateur est bien
le propriétaire de l’objet peut s’avérer très utile.
2 champs
cachés
Protéger les références avec la technique 1 présentée sur la
colonne ci-dessus pour les champs cachés. Même ceux non
affichés dans le DOM. Les techniques Data biding ou Mass
assignment vulnerability ont la fonction d’envoyer des requêtes
avec des paramètres aléatoires essayant de trouver des champs
cachés et compromettre l’application.
3 Framework Les framework actuels bien utilisés comportent une gestion des
rôles sur les applications efficaces. Encore une fois ne pas hésiter à
se servir de ce type d’outil pour développer.
43. De façon à comprendre le risque voici une liste de scénarios possibles :
▸ Le cybercriminel provoque une erreur sur l’application ce qui lui permet d’obtenir des
informations importantes pour corrompre l’application.
▸ Le serveur hébergeant l'application a des utilisateurs et mot de passe par défaut sur les
services SQL, SSH, FTP, Apache, IIS, etc.
▸ Une application faite avec un framework est “poussée” en production mais la partie pré-
production avec des identifiants par défaut est aussi en production.
▸ Le serveur WEB liste les répertoires de type index of et permet à un attaquant de
télécharger des fichiers et obtenir des informations.
Mauvaise configuration sécurité
Jérôme Thémée
45. ▸ Il manque des mises à jour de sécurité sur les serveurs WEB et de stockage de données.
▸ Le serveur WEB autorise les requêtes HTTP de type TRACE ce qui permet à l’attaquant d’exploiter une
vulnérabilités XST (Cross Site Tracing).
▸ Le serveur de base de données utilise le même utilisateur pour toutes les bases de données ce qui permet
à un attaquant lors d’une injection de pivoter entre les bases.
▸ Mauvaise configuration du fichier Robots.txt permettant de récupérer des informations sur l'architecture de
l’application.
Se protéger :
Utiliser le hardening, pour aller plus loin sur le hardening, voici quelques liens (en Anglais) :
▸ Recommandations ASVS : https://www.owasp.org/index.php/ASVS, chapitre 12.
▸ Cheat sheet OWASP sur la configuration sécurisée
https://www.owasp.org/index.php/Insecure_Configuration_Management
▸ Hardening pour serveur Apache : https://geekflare.com/apache-web-server-hardening-security/
Mauvaise configuration sécurité
Jérôme Thémée
48. Scénario :
▸ Utilisation de protocole de transport de données sécurisées faibles (SSL V2).
▸ Exposition des clés de chiffrements dans le code “Front”
▸ Pas de désactivation de l’attribut autocomplete dans les formulaires collectant des données sensibles.
Exposition de données sensibles
Jérôme Thémée
50. ▸ Stockage de données sensibles sur le serveur WEB sans rapport avec l’application.
▸ Utilisation de données sensibles à l’utilisateur dans les localStorage, SessionStorage, indexDB HTML5.
▸ Utilisation de cache dans les en-têtes HTTP pour la transition de données sensibles.
Se protéger :
Pour aller plus loin dans les contrôles de sécurité des données sensibles (en anglais) :
▸ Recommandations ASVS : https://www.owasp.org/index.php/ASVS, chapitre 7,9,10.
▸ Owasp Cryptographic Storage Cheat Sheet : https://www.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet
▸ MITRE CWE Weak encryption : http://cwe.mitre.org/data/definitions/326.html
Exposition de données sensibles
Jérôme Thémée
51. 7- Manque de contrôle d’accès au niveau fonctionnel
Jérôme Thémée
52. + Manque de contrôle d’accès au niveau fonctionnel
Jérôme Thémée
53. Manque de contrôle d’accès au niveau fonctionnel
Jérôme Thémée
Server Side Request Forgery (SSRF) :
54. Manque de contrôle d’accès au niveau fonctionnel
Jérôme Thémée
Démonstration
avec Facebook
55. Manque de contrôle d’accès au niveau fonctionnel
Jérôme Thémée
Se protéger :
N° Méthode Description
1 Retour
d’erreurs
Contrôler au maximum les retours d’erreurs (try and catch).
2 Désactiver les
protocoles
non
nécessaires
A l’aide d’une Whitelist, autoriser les protocoles nécessaires
(HTTP, HTTPS) et interdire implicitement les protocoles non
nécessaires. Ceci peut se faire sur le serveur WEB ou bien le
code lui-même.
60. CSRF
● Se protéger :
N° Méthode Description
1 Jeton CSRF Un des meilleurs moyens pour sécuriser les CSRF est l’insertion dans les
formulaires d’un jeton unique attribué au tout début de la navigation
utilisateur. De ce fait, si une page extérieure essaye de soumettre un
formulaire alors elle devra d’abord passer par la page d’accueil ou bien
une autre page de l’application ainsi en respectant le chaînage d’une
navigation sur un site WEB.
Voici un exemple en Java (jeton dans le formulaire) :
<form action=”/transfert.do” method=”post”>
<input type=”hidden” name=”tokenCSRF”
value=”E4ODRjN2Q2OWY4NmQwODNTlhMmZlYWE”>
</form>
Pour plus d’informations sur la mise en place de A à Z de jeton CSRF, voici un lien sur PHP CSRF
GUARD de L’OWASP (en anglais) : https://www.owasp.org/index.php/PHP_CSRF_Guard
Jérôme Thémée
61. CSRF
● Se protéger :
2 Captcha Un Captcha peut s'avérer efficace pour contrer les CSRF. En particulier les
Captchas google dont l'efficacité est à la hauteur de la facilité d’installation.
3 Framework Les Frameworks modernes automatisent et initialisent les jetons CSRF
dans les formulaires des applications.
Jérôme Thémée
62. 9 - Utilisation de composants avec des vulnérabilités
connues
Jérôme Thémée
63. + Utilisation de composants avec des vulnérabilités
connues
Jérôme Thémée
67. Utilisation de composants avec des vulnérabilités
connues
● Qualys SSL Labs:
L’éditeur Qualys a développé et mis à disposition une solution en ligne dont le but est de vérifier la
sécurité des chiffrements SSL/TLS (HTTPS) d’un serveur WEB ou d’un navigateur. Le chiffrement
étant partagé entre ces deux éléments, Qualys permet de ce fait, de faire la vérification de bout en
bout de la chaîne de chiffrement entre l’utilisateur et le service WEB. La solution est disponible à
cette adresse : https://www.ssllabs.com/. La solution est très simple, sur la page d’accueil un menu
propose de scanner votre serveur ou un client, choisir Test your server.
68. Utilisation de composants avec des vulnérabilités
connues
Jérôme Thémée
Démonstration
avec Nmap et
Metasploit
69. Utilisation de composants avec des vulnérabilités
connues
● Se protéger :
N° Méthode Description
1 Mise à jour Il est primordial de bien gérer les mises à jour sur les
bibliothèques, les plugins, les serveurs, les systèmes
d’exploitation autour de votre application. La plupart des CMS
proposent des plugins ou options pour la mise à jour du coeur
de l’application automatique. Des notifications sont envoyées
par email quand un plugin n’est plus à jour, veiller à bien
surveiller celles-ci.
2 Veille en
sécurité
S'inscrire à des flux RSS comme celui d’exploit-db.com
(https://www.exploit-db.com/rss.xml) ou bien à une mailing
list comme celle de http://www.securityfocus.com/ permet
d’avoir un rapport journalier sur les vulnérabilités dévoilées et
ainsi vérifier si l’on est concerné par celle-ci.
72. Les redirections et les renvois non validés sont une vulnérabilité profitant d’une faiblesse dans le
code dont l’objectif est de rediriger, router l’utilisateur sur une page malveillante ou administrative
du site WEB. Il est courant de voir des redirections d’URL interne sur la plupart des applications
utilisant un modèle MVC (model View Controller).
Redirections et Renvois Non Validés
Démonstration :
● Sur l’application bWAPP, se diriger vers la page : Unvalidated Redirects & Forwards(2).
● La page s’affiche avec un lien click here to go back to the portal. A l’aide d’un clic droit sur le
lien sélectionner l’option proposé Copy Link Location.
● Copier ensuite le lien sur la barre d’adresse, l’URL suivante s’affiche :
http://localhost/eni/bWAPP/unvalidated_redir_fwd_2.php?ReturnUrl=portal.php
● Vérifier si le paramètre ReturnUrl= est fiable, pour ce faire remplacer=portal.php par google.fr
● La page redirige vers google.
73. Utilisation de composants avec des vulnérabilités
connues
● Se protéger :
N° Méthode Description
1 pas de
redirection
éviter au maximum les redirections en dur sur une application.
Si cela n’est pas possible, utiliser une whitelist avec des
identifiants pour chaque item.
Exemple :
$redirect = array(
1=>’http://www.editions-eni.fr/’,
2=>’https://google.fr’,
3=>’https://duckduckgo.com/’);
if($redirect ==1){
header(location: $redirect[0])}
1 Utiliser un
framework
La plupart des frameworks actuels utilisent bien les
redirections.