Vous subissez une attaque ? Faire appel à notre réponse aux incidents

info@angelforce.eu
Sécurité web

Concevoir et tester des téléversements de fichiers sécurisés

Une checklist de contrôles pour les fonctions de téléversement, tirée de la cheat sheet OWASP, avec un tableau de tests à exécuter sur chaque endpoint.

Aussi en :EnglishTürkçeDeutschEspañolItalianoPolskiNederlandsEesti

Illustration : Concevoir et tester des téléversements de fichiers sécurisés

Un téléversement de fichiers sécurisé repose sur plusieurs contrôles appliqués de concert, et l'OWASP File Upload Cheat Sheet les recense. Cet article parcourt cette liste, signale les points faciles à négliger et la transforme en tests que vous pouvez exécuter sur chaque endpoint de téléversement.

Ce contre quoi vous vous défendez

La cheat sheet regroupe les menaces sous l'appellation « fichiers malveillants ». La première est une attaque contre le logiciel qui traite le fichier. Un attaquant fournit un fichier qui exploite une vulnérabilité du parseur ou du module de traitement, et la cheat sheet cite l'exploit ImageTrick et XXE en exemple.

La deuxième est le phishing. La cheat sheet prend l'exemple d'un formulaire de candidature : le téléversement devient alors un moyen de placer un fichier hostile sous les yeux des personnes qui l'ouvrent.

La troisième concerne la disponibilité. Les ZIP bombs, les XML bombs (l'attaque « billion laughs ») et les simples fichiers de très grande taille peuvent saturer l'espace de stockage du serveur et nuire à sa disponibilité.

Valider avant d'accepter

La cheat sheet impose un ordre : appliquer la validation des entrées avant de valider l'extension, puis travailler à partir d'une allowlist.

  • Lister les extensions autorisées. N'autorisez que les extensions sûres dont la fonction métier a besoin. Un formulaire de photo de profil n'a aucune raison d'accepter autre chose que quelques types d'images.
  • Valider le type de fichier. Ne vous fiez pas au Content-Type déclaré, car il peut être falsifié. Validez le type et la signature du fichier avant d'accepter le téléversement.
  • Définir une longueur maximale de nom de fichier et, si possible, restreindre les caractères autorisés.
  • Définir une taille maximale de fichier.

Si un fichier échoue à l'un de ces contrôles, rejetez-le.

Soigner le nom et l'emplacement

La cheat sheet préconise de remplacer le nom de fichier fourni par l'utilisateur par un nom généré par l'application. Faites-le pour chaque téléversement, quel que soit le type de fichier.

L'endroit où le fichier est stocké compte autant que sa nature. Stockez les fichiers téléversés sur un serveur distinct si vous le pouvez. Si ce n'est pas possible, stockez-les en dehors du webroot.

Lorsque des fichiers doivent être accessibles publiquement, utilisez un handler au sein de l'application qui associe un identifiant à un fichier (someid vers file.ext) plutôt que d'exposer le chemin de stockage.

Deux autres points de la liste sont faciles à oublier :

  • Seuls les utilisateurs autorisés doivent pouvoir téléverser des fichiers.
  • Protégez le téléversement contre les attaques CSRF.

Analyser et traiter ce que vous conservez

La validation vérifie qu'un fichier a l'apparence attendue. La cheat sheet ajoute une étape : passer le fichier dans un moteur antivirus ou une sandbox, si l'un d'eux est disponible, afin de valider qu'il ne contient aucune donnée malveillante.

Pour les types de documents concernés, comme PDF et DOCX, envisagez le CDR (Content Disarm & Reconstruct) comme étape de traitement supplémentaire.

La cheat sheet précise aussi que toutes les bibliothèques utilisées doivent être configurées de façon sécurisée et tenues à jour. Les vulnérabilités des parseurs figurant parmi les menaces citées, c'est le point à confier à une personne nommément désignée, avec une date de revue.

Tester chaque endpoint

La cheat sheet énumère des contrôles, pas des cas de test. Chaque ligne ci-dessous est notre propre dérivation à partir de sa checklist, et la troisième colonne indique de quel point elle provient. Exécutez les tests sur chaque endpoint de téléversement, y compris les outils d'administration et ceux ajoutés pour un seul client.

TestRésultat attenduBase
Téléverser un fichier script renommé avec une extension autoriséeRejeté après la validation du type de fichierDérivé : valider le type de fichier
Envoyer un fichier non autorisé avec un Content-Type autoriséToujours rejetéDérivé : ne pas se fier à l'en-tête Content-Type
Soumettre un nom de fichier très longRejeté, ou remplacé par un nom généréDérivé : longueur maximale du nom de fichier, noms générés
Téléverser un fichier dépassant la limite de tailleRefuséDérivé : taille maximale de fichier
Demander le fichier stocké en devinant son cheminInaccessible, sauf via le handlerDérivé : emplacement de stockage, handler d'association
Téléverser sans session, ou sans jeton CSRFRefuséDérivé : utilisateurs autorisés, protection CSRF
Téléverser une ZIP ou XML bomb dans un environnement de testLe service reste disponibleDérivé : menace sur la disponibilité

Pour une référence plus large, l'OWASP Web Security Testing Guide se présente comme la ressource de référence en matière de tests de cybersécurité pour les développeurs d'applications web et les professionnels de la sécurité. L'OWASP Application Security Verification Standard propose des exigences numérotées à vérifier. Si vous en citez une dans un ticket ou un rapport, indiquez la version, par exemple v5.0.0-1.2.5, car les identifiants peuvent changer d'une version du standard à l'autre.

Par où commencer

  1. Recensez tous les endpoints qui acceptent un fichier, y compris les outils d'administration, les fonctions d'import et les anciens plugins.
  2. Pour chacun, définissez les extensions autorisées, la taille maximale de fichier et la longueur maximale du nom de fichier, et appliquez la validation des entrées avant le contrôle de l'extension.
  3. Remplacez les noms de fichiers fournis par les utilisateurs par des noms générés. Déplacez le stockage vers un serveur distinct ou en dehors du webroot, et servez les fichiers publics via un handler qui associe des identifiants à des noms de fichiers.
  4. Ajoutez la validation du type et de la signature des fichiers, une étape antivirus ou sandbox, et du CDR pour les types de documents que vous acceptez. Vérifiez que les bibliothèques de parsing sont à jour et configurées de façon sécurisée.
  5. Transformez le tableau de tests en vérifications scriptées et exécutez-les avant chaque release. Si vous souhaitez une revue externe du résultat, notre service de tests d'intrusion peut tester les endpoints, et notre accompagnement au développement logiciel sécurisé peut vous aider si la fonctionnalité en est encore à la phase de conception. Les recommandations OWASP sur le téléversement de fichiers servent de checklist de revue dans les deux cas.

Comment nous pouvons vous aider

Tests d’intrusion

Nous attaquons vos réseaux, vos applications et vos équipes comme le ferait un véritable adversaire, puis nous vous montrons comment combler chaque faille.

Nous contacter
Équipe AngelForce

Rédigé par l’équipe AngelForce : des consultants en sécurité certifiés CEH, LPT Master et CISA qui testent, surveillent et protègent les systèmes d’organisations dans toute l’Europe et en Turquie.

Rédigé avec l’aide de l’IA à partir des sources publiques indiquées sur cette page, puis relu par l’équipe AngelForce avant publication.

Sources

  1. cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
  2. owasp.org/projects/asvs
  3. owasp.org/projects/web-security-testing-guide

Articles : Sécurité web

Dites-nous ce que vous devez protéger

Décrivez votre environnement et vos objectifs. Nous vous répondrons par e-mail.

Nous contacter
info@angelforce.eu

AngelForce OÜ · Tallinn, Estonie