Introduction
- Contexte général : L'upload de fichiers (photos de profil, documents, pièces jointes, etc.) est très courant sur les sites web.
- Risque majeur : Une mauvaise configuration permet à un attaquant de téléverser des fichiers malveillants, pouvant entraîner la prise de contrôle du serveur (exécution de code à distance - RCE).
Compréhension des vulnérabilités liées à l'upload de fichiers
- Une vulnérabilité d'upload survient lorsque le serveur ne valide pas correctement les fichiers uploadés (nom, type, contenu, taille).
- Un fichier apparemment inoffensif (ex : image) peut contenir un script malicieux (ex : PHP).
- Dans le pire des cas, upload sans aucune restriction mène quasi automatiquement à une prise de contrôle complète du serveur.
Scénarios d'attaque
1. Upload sans aucune restriction
- Attaquant télécharge un fichier
exploit.php
contenant un webshell. - Fichier est stocké sans contrôle et exécuté via URL.
- Résultat : shell distant complet, accès aux données sensibles, possibilité d'attaques ultérieures.
2. Contrôle uniquement sur le type MIME ou extension côté client
- Validation basée sur header
Content-Type
ou extension (.jpeg, .png). - Attaquant intercepte la requête HTTP (avec proxy comme Burp) et modifie le
Content-Type
enimage/jpeg
tout en envoyant un fichier PHP. - Le serveur accepte le fichier malveillant, qui est ensuite exécuté comme script.
- Mêmes risques qu'au scénario 1.
- Variante : falsification de l'extension, double extension (
exploit.php.jpeg
), majuscules, ou encodage URL permettent de contourner les filtres simples.
3. Désactivation de l'exécution de code dans le répertoire d'upload
- Configurer le serveur pour qu'il ne traite que les fichiers statiques dans le dossier upload.
- Le fichier PHP uploadé est servi en texte brut et non exécuté.
4. Contournement par Path Traversal (Traverse de répertoire)
- Utilisation d'un nom de fichier avec
../
pour sortir du dossier sécurisé. - Encode le slash pour contourner les filtres de serveur.
- Le fichier malveillant est stocké dans dossier non protégé où l'exécution PHP est autorisée.
- Combinaison d'upload non sécurisé + faille Path Traversal engendre une compromission grave.
Autres techniques d'attaque possibles
- Extensions alternatives ou méconnues :
.php5
,.phtml
,.php3
etc. - Double extension pour contourner whitelist et blacklist.
- Obfuscation du nom de fichier (ex : majuscule, caractères spéciaux).
- Fichiers « polyglottes » : fichiers images valides (ex JPEG) contenant du code PHP dans les métadonnées, passant la validation d'image mais exécutables en PHP.
- Upload de fichiers HTML ou SVG contenant du code JavaScript malveillant (exploitation XSS).
- Upload massif ou de fichiers très volumineux pour provoquer un déni de service.
Bonnes pratiques pour sécuriser l'upload de fichiers
- Liste blanche stricte des extensions autorisées uniquement (JPEG, PNG).
- Validation stricte du contenu réel du fichier côté serveur (inspection des headers, signatures internes du fichier).
- Re-encodage des images uploadées pour éliminer les métadonnées malveillantes.
- Désactivation de l'exécution de code dans le répertoire d'upload via configuration serveur (.htaccess, etc.) ou utilisation de serveurs statiques/CDN.
- Sanitisation et validation du nom des fichiers pour éviter injections de path traversal et caractères invalides.
- Renommage aléatoire des fichiers uploadés pour éviter leur repérage.
- Limitation de la taille et du nombre de fichiers uploadés par utilisateur pour éviter DDoS ou saturation.
- Scan antivirus et sandbox des fichiers uploadés pour détecter des malwares ou webshells.
- Audit régulier et pentests pour détecter les failles potentielles et améliorer la sécurité.
Conclusion
- Chaque fichier uploadé est une potentielle menace.
- Une photo anodine peut cacher un webshell qui compromet totalement le serveur.
- La sécurité repose sur la combinaison de plusieurs couches de protection.
- Plus les mesures sont robustes, plus l'attaquant sera dissuadé.
- Vigilance continue et bonnes pratiques sont indispensables afin de protéger vos applications et utilisateurs.
"Derrière chaque photo uploadée peut se cacher une menace."