Skip to content

Les utilisateurs téléversent des photos de profil ; le serveur les stocke dans la racine web et les ressert. Quel est le risque ?

Réponse courte

Si un attaquant peut téléverser un fichier exécutable côté serveur (ou du HTML/SVG) dans un répertoire servi, il peut obtenir une exécution de code à distance ou un XSS stocké. Validez le vrai type de contenu, stockez les fichiers hors de la racine web ou sur un stockage non exécutant, randomisez les noms de fichiers et servez-les de manière à empêcher leur exécution ou leur interprétation comme balisage. Les chargements de page plus lents et la consommation disque sont des problèmes opérationnels, pas le risque de sécurité exploité ici.

« Ce ne sont que des photos de profil » est l'hypothèse qui transforme un formulaire de téléversement en shell distant. Dès que des utilisateurs peuvent écrire un fichier dans un répertoire que le serveur web va servir et exécuter, la fonction de téléversement devient un canal de livraison de code.

Pourquoi c'est dangereux

Si le serveur exécute du PHP, JSP, ASPX, etc., un attaquant téléverse avatar.php au lieu d'un PNG, puis le demande — le serveur l'exécute, accordant une exécution de code à distance (RCE) et un point d'ancrage sur l'hôte. Même sans moteur de script, un fichier HTML ou SVG téléversé et servi depuis votre origine exécute du JavaScript dans le navigateur de vos utilisateurs, donnant un XSS stocké et le vol de session. Les attaquants contournent les contrôles naïfs avec des doubles extensions (shell.php.png), des octets nuls, de faux en-têtes Content-Type ou des fichiers polyglottes dont les magic bytes ressemblent à une image mais dont la fin est du code actif.

La bonne correction

Superposez les défenses :

  • Validez le contenu réel, pas seulement l'extension ou le Content-Type fourni par le client — vérifiez les magic bytes et, idéalement, ré-encodez l'image pour neutraliser toute charge intégrée.
  • Stockez les téléversements hors de la racine web ou sur un stockage objet / une origine distincte qui ne peut pas exécuter de code et sert avec un Content-Type neutre plus Content-Disposition: attachment.
  • Randomisez les noms de fichiers pour que les attaquants ne puissent ni prédire ni écraser les chemins, et supprimez le nom d'origine.
  • Restreignez la taille et le type, et lancez un antivirus/scan le cas échéant.

Pourquoi les autres réponses sont fausses

« Aucun risque — ce ne sont que des images » est précisément l'angle mort qui livre la vulnérabilité ; le type annoncé du fichier est contrôlé par l'attaquant. « Chargements plus lents » et « consommation disque excessive » sont de vrais soucis opérationnels, mais ils concernent la capacité, pas la compromission — un examinateur qui demande « quel est le risque ? » attend que vous nommiez le RCE / XSS stocké et les contrôles de stockage et de validation qui empêchent qu'un fichier téléversé soit jamais exécuté ou interprété comme balisage.

Questions de suivi probables

  • Pourquoi vérifier l'extension ou l'en-tête Content-Type ne suffit-il pas à lui seul ?
  • Comment un fichier SVG ou HTML téléversé peut-il mener à un XSS stocké même sans exécution de code ?
  • Comment servir les téléversements utilisateurs depuis une origine distincte, et pourquoi est-ce utile ?

Sources

Recevez 100 questions d'entretien en cybersécurité + réponses

Laissez votre e-mail et nous vous enverrons le pack PDF gratuit et le jeu de flashcards.

Pas de spam. Désabonnez-vous à tout moment.