Le « file upload » ne désigne pas une faille en particulier, mais plutôt une famille de vulnérabilités web pouvant avoir un impact grave, car permettant l’exécution de code arbitraire par un attaquant sur la machine visée.

Concept des « file uploads »

Un site interactif permet en général à ses utilisateurs d’envoyer des fichiers ; par exemple des avatars sur un forum, des photos sur une galerie, des pièces jointes sur un chat de support… Le danger survient quand un attaquant arrive à envoyer un fichier contenant du code exécutable, et à faire exécuter celui-ci au serveur web. Cela est possible si le site en question possède une faille de type « file upload », et ne bloque pas la requête de l’attaquant.

Par exemple, sur un serveur php, un fichier malfaisant appelé « mon_image.php », contenant une image ainsi qu’un petit morceau de code php, a de fortes chances d’être reconnu comme une image lors de son envoi, mais exécuté comme du code lors de son appel par l’attaquant ou n’importe quel visiteur du site se rendant sur la page où l’image malveillante est présente.

Visuel de l’image envoyée par le pirate Contenu réel du fichier
Underwater coral reef seabed view with horizon and water surface 22. File upload_code caché
Ici, une ligne de code PHP est cachée parmi les données de l’image.

Comment éviter les vulnérabilités de type « file upload » ?

Il existe un grand nombre de remédiations, toutes complémentaires et délicates à appliquer si elles n’ont pas été intégrées dès le début dans l’application :

  • Ne pas permettre aux utilisateurs d’envoyer des fichiers lorsque cela n’est pas une fonction primordiale pour votre site ou application
  • Interdire l’exécution de code depuis le dossier dans lequel sont stockés les fichiers envoyés
  • Vérifier et autoriser l’extension des fichiers que vous tolérez avec une liste blanche (whitelist), tels que .jpg, .png, .pdf, .gif, .xls, etc…
  • Vérifier le Type MIME des fichiers envoyés. Un exemple de type légitime: image/gif
  • Forcer le type MIME des fichiers envoyés quand ils sont servis aux (téléchargés par les) utilisateurs visitant une page afin d’empêcher le navigateur d’une victime potentielle de tenter d’exécuter le fichier
  • Renommer les fichiers fournis avec un nom généré aléatoirement, pour éviter que l’attaquant ne crée des fichiers spéciaux (robots.txt, .htaccess, …) et puisse facilement y faire référence pour les faire exécuter.

Les réponses de CerberHost face aux « file upload »

Nous utilisons deux approches différentes pour lutter contre ce genre de vulnérabilités :

  1. Un démon est réveillé lors de chaque création de fichier sur le site internet, et si celui-ci contient du code exécutable par le serveur web, une alerte est levée. Pour éviter les faux positifs (fausse alerte en cas de fichier légitime), toute une batterie de règles est déployée afin de laisser passer les créations légitimes, comme lors de la mise à jour d’un site web par exemple.
  1. Il existe également un processus de veille périodique sous la forme d’un anti-virus maison, lancé régulièrement et capable de détecter les fichiers de type *php* malveillants, même s’ils sont fortement obfusqués, c’est-à-dire noyés dans une masse d’informations.

Découvrir CerberHost

video de présentation de CerberHost

CerberHost protège contre toutes les failles du TOP 10 Owasp et bien plus.

Pour découvrir CerberHost en images, venez visionner sa vidéo de présentation : ICI

Lucie Saunois
Lucie Saunois
Passionnée d'informatique, en particulier de sécurité, depuis qu'elle a rejoint l'OT Group en 2015, Lucie se spécialise dans la vulgarisation technique pour permettre à tous d'appréhender ces sujets parfois complexes.