Vulnérabilités dans les
développements
Introduction
L’intérêt des pirates vis-à-vis des failles «applicatives» est de plus en plus fort:
Forte croissance des applications Web au cours de ces dernières années (en particulier avec les
besoins mobiles)
Méthodes HTTP
● HEAD : demande d'informations sur la ressource
● POST : envoi de données de formulaire
● OPTIONS : lire les options de communication
● CONNECT : utilisé avec un proxy pour créer un tunnel
● GET : demande d'une ressource
● TRACE : diagnostic de connexion
● PUT : déposer une ressource sur le serveur
● DELETE : effacer une ressource du serveur
OWASP
● L'Open Web Application Security Project (OWASP) est une communauté dont la tâche est de
permettre aux organisations de développer, acheter et maintenir des applications et des APIs
dignes de confiance.
Des outils et des normes à propos de la sécurité des
applications
Des livres à propos de la façon de tester la sécurité des
applications, le développement de code sécurisé ainsi que les
revues de code sécurisées
Des présentations et des vidéos.
Des aides mémoires à propos de nombreux sujets courants.
Des critères de contrôles de sécurité et des librairies
Des chapitres locaux à travers le monde.
Des recherches de pointe.
Des conférences autour du monde.
Des listes de diffusion.
Top 10 OWASP - 2017/2021
LA TOP 10 DE LA LISTE OWASP CONSTITUE LES 10 VULNÉRABILITÉS D’APPLICATIONS LES PLUS
VUES
OWASP Top 10 fut simplement de sensibiliser les développeurs et les managers, il est devenu, dans les
faits, le standard de la sécurité des applications (audits).
Il s'appuie sur 4 critères :
● le vecteur d'attaque
● La prévalence de la vulnérabilité
● La facilité de détection de la vulnérabilité
● L'impacte technique
Il existe aussi l’OWASP API Security Top 10 2019
OWASP 2021
Version 2013
● A1 : Injection : de tout type SQL, OS, LDAP…
● A2 : Violation de la gestion d'authentification et de session
● A3 : XSS : Cross Site Scripting
● A4 : Références directes non sécurisées à un objet
● A5 : Défaut de configuration
● A6 : Exposition de données sensibles
● A7 : Manque de contrôle du niveau d'accès
● A8 : Cross-Site Request Forgery (CSRF)
● A9 : Utilisation de composants vulnérables
● A10 : Mauvaise redirection
A1:2017 Injection
Facteurs de Menace/Vecteurs Vulnérabilité Impacts
d'Attaque
Accès Lvl : Exploitation 3 Fréquence 2 : Détection Technique 3 :
3 Métier
Considérez que n’importe qui peut envoyer des données non fiables au système, y compris les
utilisateurs externes, internes, et administrateurs. Presque toute source de données peut être un
vecteur d’injection, y compris les variables d'environnement, les paramètres et les web services
internes et externes. Les failles d'injection surviennent lorsqu’une application envoie des
données non fiable à un interpréteur.
A1:2017 Injection SQL
SELECT userid FROM TableUsers
WHERE username=‘<login>’ AND password=‘<pass>’
A1:2017 Injection SQL
Quid si l’identifiant est « admin » et
le mot de passe « P@ssw0rd » ?
SELECT userid FROM TableUsers
WHERE username=‘admin’ AND password=‘P@ssw0rd’
A1:2017 Injection SQL
Quid si l’identifiant est « admin’
AND 1=1 # » et le mot de passe «
P@ssw0rd » ?
or 1=1
SELECT userid FROM TableUsers
WHERE username=‘admin’ #’ AND password=‘P@ssw0rd’ Commentaire (--)
SELECT userid FROM TableUsers
WHERE username=‘admin’
Ce qui est donc exécuté
A1:2017 Injection SQL
Il existe deux grandes familles d’injections SQL :
Les « normales », permettant de récupérer des informations au niveau de la base de
données et de les afficher dans le navigateur (généralement en combinant les requêtes
légitimes avec nos requêtes malveillante via le mot-clé UNION) ;
Les aveugles (Bind). Dans ce cas, il n’est pas possible d’inclure le résultat des requêtes
dans la page pour récupérer des informations. Il est seulement possible de savoir si la
requête transmise à réussi ou échoue. Il faut alors procéder par tâtonnement pour collecter
les données en testant les conditions de retour (plus long et moins furtif).
Type d’injection SQL
In Band / Injection SQL classique l'attaquant reçoit le
résultat sous forme de réponse directe en utilisant le même
canal de communication
● Union
● Error
Blind / Aveugle: terme aveugle signifie que l'attaquant ne
reçoit pas de réponse évidente de la base de données.
● time-based
● boolean-based
UNION
L'utilisation de UNION peut servir à un pirate pour accéder à d'autres champs de la table.
La méthode consiste à utiliser le mot-clé UNION, pour ajouter au résultat les résultats d’une autre
requête que l’on contrôle.
Pour purger les résultats, on se débrouille pour que A ne renvoie rien
il suffit de fournir une donnée incohérente en regard du contexte métier
UNION
● Pour pouvoir utiliser UNION, on va donc devoir déterminer le
nombre de colonnes renvoyé par la première requête
UNION + GROUP BY
Comment aller plus loin ?
L’objectif est d’aller chercher des informations dans la base et de pouvoir les lire
Extraire le nom des tables et des champs en allant puiser les informations dans la base
« information_schema » qui contient une table « COLUMNS »
Utilisation d’un ORM
A1:2017 Injection Shell / OS Command injection
Au lieu d’injecter des commandes SQL, elle consiste à injecter directement des commandes system sur
le serveur. Cette attaque est possible en détournant l’utilisation de la commande system().
A1:2017 Injection Shell
Purpose of command Linux Windows
whoami whoami
Name of current user
uname -a ver
Operating system
ifconfig ipconfig /all
Network configuration
netstat -an netstat -an
Network connections
ps -ef tasklist
Running processes
A1:2017 Injection
Il existe un large éventail de possibilités
SQL, LDAP, XPath, noSQL, commandes OS, parseurs XML, cookie de session..
Comment s’en protéger ?
Il est avant tout nécessaire de ne jamais faire confiance aux données contrôlées par le client.
Caractères et mots clés spécifiques doivent être “échappés”. La fonction PHP mysql_real_escape_string
permet d’échapper les caractères spéciaux d’une chaîne lors de l’utilisation de la combinaison PHP /
MySQL
De manière générale, il est préférable de réaliser ses interrogations SQL au moyen de requêtes
paramétrées, de procédures stockées ou en utilisant (correctement) un ORM (Object Relational Mapping
Tools).
A2:2017 Authentification de mauvaise qualité
SAML
OAUTH OPA
OpenID RBCA
A2:2017 Authentification de mauvaise qualité
API12019: Testing for IDOR/Broken object
level authorization:
IDOR: Insecure Direct Object Reference
Ces types de vulnérabilités proviennent de problèmes de contrôle
d'accès.
Les IDOR peuvent se manifester par une élévation horizontale et
verticale des privilèges
PimpMyBurp: PwnFox + Autorize: The perfect combo to find IDOR
Inclusion de fichiers
La faille Include touche comme son nom l'indique les fonctions du type include(). Ce type de fonction
(comme require(), include(), include_once()) a pour objectif d'inclure un fichier et d'exécuter son contenu
sur le serveur.
Deux types d’attaques par inclusion de fichier existent :
Local File Inclusion (LFI) : Permet uniquement d’inclure un fichier présent sur le système de fichier du
serveur. L’impact est plus limité et l’exploitation moins directe;
Remote File Inclusion (RFI) : Permet d’inclure un fichier hébergé sur un serveur externe. Beaucoup plus
dangereuse.
A3:2017 Exposition de données sensibles
Plusieurs types d’informations:
De simples messages d’erreur sont utiles: ● Techniques
● Métier
A4:2017 XML Entités externes (XXE)
Les fichiers XML ne sont plus utilisés de nos jours, car JSON a pris le dessus, et
même YAML. Pourtant, XXE figure top 10 de 2017.
Un processeur XML en arrière-plan qui permettra par défaut d'inclure des entités
externes.
Tout dépend de la façon dont il est traité par le serveur.
XXE via SVG
XXE via SOAP
A4:2017 XML Entités externes (XXE)
Le XML peut être traité par des parsers de deux natures différentes , ce
qui ne les expose pas aux mêmes attaques :
Parser DOM – Ils parcourent l’ensemble de la structure XML qui leur est passée, puis
construisent un modèle objet qu’ils conservent en mémoire. Par la suite, c’est ce
modèle qu’ils vont utiliser pour effectuer les opérations demandées. Ils sont notamment
exposés à des attaques de déni de service (DoS), qui visent à saturer la mémoire du processus
en fournissant des données spécifiques (trop volumineuses ou avec une arborescence trop
profonde) ;
Parser SAX – Ils parcourent le XML qui leur est passé pour effectuer les opérations
demandées. Ils ne conservent pas de modèle en mémoire et ont un fonctionnement
basé sur des évènements qui sont levés lorsqu’ils rencontrent des balises. Ils sont plus
susceptibles d’être vulnérables à des injections, principalement des injections XML.
A4:2017 XML Entités externes (XXE)
A7:2017 Cross-Site Scripting (XSS)
Elles affectent les applications Web qui affichent dynamiquement du contenu pour les utilisateurs sans
avoir préalablement filtré les données reçues. Il est alors possible d’injecter du code arbitraire sous
forme de « scripts » - écrits dans des langages tels que JavaScript ou VBScript par exemple - afin de
modifier l’apparence ou le fonctionnement de la page Web concernée
Stockées – Le code injecté est intégré à une page du site et touchera tous les navigateurs qui y
accéderont
Réfléchies – Le code est dynamiquement passé au site pour exécution. Cela nécessite
l’intervention de l’utilisateur (il doit cliquer sur un lien par exemple) ;
Locales (ou DOM based) – Similaire à une réfléchie, mais le code reste sur le navigateur car son
injection est faite au niveau des scripts locaux en cours d’exécution
(merci JQuery et le web 2.0).
A7:2017 Cross-Site Scripting (XSS)
XSS permet à des attaquants d'exécuter du script (souvent javascript) dans le navigateur de la victime
afin de détourner des sessions utilisateur, défigurer des sites web, ou rediriger l'utilisateur vers des sites
malveillants.
● Vol du cookie d’un utilisateur;
● Vol des données contenues dans le presse papier ;
● Vol des données soumises dans les formulaires ;
● Defacement du site
A7:2017 Cross-Site Scripting (XSS)
Phishing
Reflected XSS
1. L'utilisateur s'identifie sur un site
2. Le pirate envoie une url modifiée à la victime :
[Link]
3. La victime clique sur l'url et la requête est envoyée au serveur du pirate
4. Le serveur répond avec le javascript
5. Le javascript est exécuté dans le navigateur de la victim
6. Les informations de session sont récupérées par le pirate
7. Le pirate prend la session de la victime
Stored XSS
<script>alert([Link])</script>
A7:2017 Cross-Site Scripting (XSS)
HTTP response header
Content-Security-Policy (CSP)
CSP permet aux administrateurs système de réduire ou éliminer les moyens de réaliser des attaques XSS en permettant de
spécifier les domaines autorisés à fournir des scripts pour la page visitée.
Complexe a mettre en oeuvre utile pour des applications 'critique/sensible' :
● [Link]
Contrôler les ressources que l'agent utilisateur est autorisé à charger pour une
page donnée.
A7:2017 Cross-Site Scripting (XSS)
HTTP response header
X-XSS-Protection
Empêche les pages de se charger dans les navigateurs lorsqu'ils détectent des attaques de type
"cross-site scripting" (XSS).
Internet Explorer & Chrome
A7:2017 Cross-Site Scripting (XSS)
A8:2017 Désérialisation non sécurisée
PHP pour enregistrer un cookie
[Link]{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"u
ser";i:3;s:32:"b6a8b3bea87fe0e05022
f8f3c88bc960";}
[Link]{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin"
;i:3;s:32:"b6a8b3bea87fe0e05022f8f3
c88bc960";}
A1:2017 Injection SSTI - Python Jinja2
SSTI → Côté serveur peut conduire CSTI → Angular JS Client Side
à une RCE peut conduire à une injection type
XSS
A9:2017 Utilisation de Composants avec des
Vulnérabilités Connues
A10:2021 – Server-Side Request Forgery (SSRF)
Les failles SSRF se produisent chaque fois qu'une application Web récupère
une ressource distante sans valider l'URL fournie par l'utilisateur.
A10:2017 Supervision et Journalisation Insuffisantes
Centralisation de nombreux avantages :
• Consultation simplifiée des journaux
• Recoupement d’informations
• Sauvegarde plus simple
Un besoin de sécurité
Une valeur probatoire Gestion de la
sécurité: détecter / investiguer des
incidents
Upload de fichiers
Un formulaire du site leur permet de les uploader afin qu’il soit disponibles sur le serveur. Si les contrôles
ne sont pas suffisants, un attaquant pourrait s’en servir pour ajouter des fichiers comportant des
fonctionnalités comme l’exécution de commande sur le serveur.
Upload de fichiers
Comment s’en protéger ?
Il est nécessaire de définir de manière stricte quels types de fichiers sont explicitement autorisés (pdf,
word, excel…) et interdire les autres (php, asp, jsp…)
Contrôles à réaliser
● Vérifier le Type MIME /MZ du fichier (le module PHP fileinfo permet de récupérer le type MIME
d’un fichier) après upload,
● Vérifier l’extension utilisée (.doc, .docx, .xls, .gif),
● Stocker les fichiers en base ou dans un répertoire inaccessible aux utilisateurs, en dehors de
l’arborescence du site ou dont les droits d’accès en lecture et en exécution ont été retirés.
Upload de fichiers
Attention il existe également des mécanismes de contournement des restrictions :
● Changer le Mime Type
● Double extension
● .httacess
● Changer le répertoire d’upload
● Commentaires dans les images
Il est donc nécessaire de concevoir les mécanismes d’upload en prenant en compte tous les risques
Exemple de RFI
[Link]
Exemple de LFI
Exploitation simple: on peut utiliser la technique de Directory traversal pour
remonter dans les répertoires en utilisant ../ et atteindre des fichiers sensibles
Conférence LFI/RFI
Tester avec un proxy
BurpSuite vs ZAP Proxy
wfuzz & gobuster
Le Fuzz testing ou Fuzzing est une technique de
test de logiciel Black Box, qui consiste
essentiellement à trouver des bugs
d'implémentation en utilisant l'injection de
données malformées/semi-malformées de
manière automatisée.
Race condition
Les failles de la logique métier
Cette vulnérabilité peut se produire lorsque les utilisateurs transmettent à la cible des valeurs qui ne sont pas attendues.
● Calculs côté client des prix dans une boutique en ligne de vêtements
● Des quantités négatives d'articles sur une boutique en ligne entraînent des prix négatifs
● Le manuel dit que vous ne pouvez pas désactiver les droits X d’un utilisateur mais après l'avoir essayé, vous
pouvez
Aller plus loin
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
CWE - Common Weakness Enumeration
● CWE-611: Improper
Restriction of XXE
● CWE-79 : Neutralisation
incorrecte des entrées
utilisateurs
TP
OWASP Juice Shop