⭐ Article premium
24 mai 2025 3 min de lecture 260 vues

Sécurisation des fonctionnalités d'upload de fichiers : enjeux et bonnes pratiques

Analyse approfondie des risques liés à l'upload de fichiers et recommandations pour sécuriser vos applications web

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 en image/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

  1. Liste blanche stricte des extensions autorisées uniquement (JPEG, PNG).
  2. Validation stricte du contenu réel du fichier côté serveur (inspection des headers, signatures internes du fichier).
  3. Re-encodage des images uploadées pour éliminer les métadonnées malveillantes.
  4. 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.
  5. Sanitisation et validation du nom des fichiers pour éviter injections de path traversal et caractères invalides.
  6. Renommage aléatoire des fichiers uploadés pour éviter leur repérage.
  7. Limitation de la taille et du nombre de fichiers uploadés par utilisateur pour éviter DDoS ou saturation.
  8. Scan antivirus et sandbox des fichiers uploadés pour détecter des malwares ou webshells.
  9. 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."