Comment prévenir les vulnérabilités de téléchargement de fichiers
Les modules de téléchargement de fichiers sont l’un des maillons les plus faibles des applications Web. Toute erreur commise, même celles que vous considérez comme mineures, pourrait faire en sorte que le contrôle du serveur tombe directement entre les mains d’un cyberattaquant. Pour cette raison, les développeurs de logiciels doivent connaître les erreurs les plus courantes et certaines méthodes d’attaque qui peuvent survenir.
Alors, qu’est-ce que la falsification côté client ? Comment pouvez-vous lutter contre cela pour assurer la sécurité de vos sites et de vos utilisateurs ?
Qu’est-ce que la falsification côté client ?
La falsification côté client est le concept de base des attaques d’applications Web dans leur ensemble. En termes simples, cela signifie que vous ne pouvez plus faire confiance à aucune des données que vous envoyez à l’utilisateur. De plus, la falsification côté client est l’un des fondements du développement d’applications sécurisées. Si vous examinez le module de téléchargement de fichiers avec lequel vous traitez et envisagez une falsification côté client, les données auxquelles vous ne pouvez pas faire confiance incluent :
- Le nom du fichier téléchargé.
- Le type de contenu du fichier téléchargé.
Ces deux éléments vous permettent de vous inscrire sur la liste blanche en tant que développeur de logiciels. Les données de nom du fichier téléchargé peuvent contenir n’importe quoi avec une falsification côté client. Avec les données Content-Type du fichier téléchargé, même si l’attaquant télécharge a. exe, ce fichier peut apparaître sous forme d’image/jpeg dans le système.
Extension de fichier et liste blanche
Lors du développement de modules de téléchargement de fichiers, la première chose à faire est le processus de liste blanche pour l’extension de fichier. Par exemple, un utilisateur souhaite télécharger un fichier nommé « muo.jpeg ». Vous devez vous assurer que cette extension de fichier que l’utilisateur souhaite télécharger est. jpeg. Pour cela, le système doit vérifier le fichier téléchargé et voir s’il s’agit de l’une des extensions de fichier autorisées. Pour comprendre comment procéder, examinez le code PHP simple suivant :
$file_parts = pathinfo($filename);
switch($file_parts['extension'])
{
case "jpg":
break;
case "bat": // Or exe, dll, so, etc.
break;
case "":
case NULL: // No file extension
break;
}
Vous pouvez le faire avec un bloc de code similaire à celui ci-dessus, ou vous pouvez utiliser les classes et les fonctions fournies par le framework que vous utilisez.
Qu’est-ce que les informations de type de contenu ?
Les informations de type de contenu sont des informations envoyées dans la requête HTTP pour chaque téléchargement de fichier. Le navigateur Internet détecte ces informations et les ajoute à la demande envoyée. L’attaquant peut essayer de modifier les informations avec une falsification côté client et contourner les validations côté serveur. À ce stade, les développeurs ont besoin d’un mécanisme de contrôle pour effectuer des validations sur les informations de type de contenu. Cela seul ne suffira pas; Pourtant, c’est un problème important auquel les développeurs doivent prêter attention.
Supposons que vous encodiez un mécanisme pour vérifier correctement l’extension de fichier et que vous n’acceptiez que les fichiers avec l’extension. extension jpeg. En plus de ce mécanisme de précaution, vous pouvez vérifier les informations Content-Type au cas où et n’accepter que les fichiers contenant des informations image/jpeg, un niveau supplémentaire de protection contre les cyberattaques.
Fichiers Flash SWF et étapes d’attaque
L’extension de fichier et les données Content-Type ne signifient rien pour les navigateurs Internet qui prennent en charge les plug-ins tels qu’Adobe Flash Player. Bien que la prise en charge de ce lecteur ne soit plus disponible, il est toujours possible d’installer ces fichiers associés sur de nombreux systèmes, même si Flash reste un risque de sécurité. Dans un système n’ayant pas pris les précautions nécessaires, il est possible d’appeler un fichier Flash avec la balise <object>, quelle que soit son extension. Cela causera un autre problème de sécurité sérieux.
Pour agir, les développeurs doivent connaître les voies que les cybercriminels peuvent emprunter. Voici comment cela peut arriver :
- L’attaquant malveillant télécharge un SWF (un format de fichier Adobe Flash) nommé « image.jpeg » sur le site Web cible. Pendant le processus de téléchargement, il est confirmé dans la vérification de la liste blanche que le fichier téléchargé par l’attaquant a un. extension jpeg. La vérification du type de contenu est contournée par la falsification côté client. Imaginez que ce fichier, téléchargé par l’auteur de la menace, se rende sur « www(dot)target-site(dot)com/images/images.jpeg ».
- Supposons que l’attaquant dispose d’un site Web appelé attaquant(dot)com. L’attaquant appelle le fichier image.jpeg téléchargé sur le site cible sur ce site Web, en utilisant la balise <object> avec l’affectation de type application/x-shockwave-flash.
- Un utilisateur innocent se connecte à l’attaquant (point) com. Ce site appelle le fichier SWF sur www(dot)target-site(dot)com/images/image.jpeg et exécute les commandes données au SWF.
- Grâce à cela, le cyberattaquant peut créer des actions de requête HTTP pour l’adresse du site cible (point) com sans que les utilisateurs normaux ne s’en aperçoivent. Avec ces requêtes, l’attaquant utilisera la session de l’utilisateur innocent et contournera la vérification CSRF.
Pour mieux comprendre ce scénario d’attaque, considérez que le code suivant se trouve dans le contenu HTML <object> envoyé à l’utilisateur par l’attaquant(point)com :
style="height:1px;width:1px;" data="www.target-site.com/images/image.jpeg" type="application/x-shockwave-flash" allowscriptaccess="always" flashvars="c=read&u=somethings"
L’une des meilleures solutions consiste à accéder aux fichiers téléchargés avec le téléchargement de fichiers via un sous-domaine différent. Dans le scénario susmentionné, vous pouvez accéder aux fichiers statiques non pas du même domaine, mais d’un sous-domaine différent comme suit : « http(colon)//file.target-site(dot)com/images/image.jpeg ».
Une autre solution consiste à ajouter Content-Disposition : les informations de pièce jointe à la réponse HTTP lorsque vous recevez une demande d’accès aux fichiers que vous souhaitez télécharger.
Prenez des précautions pour les vulnérabilités de téléchargement de fichiers
Tout téléchargement de fichier que les utilisateurs peuvent effectuer sur un site Web est dangereux, c’est donc l’un des problèmes auxquels les développeurs doivent accorder la plus grande attention. Si les attaquants découvrent une telle vulnérabilité, ils peuvent ouvrir un shell dans le site et exploiter facilement les informations sur le serveur. Il est extrêmement important de contrôler tous les fichiers téléchargés par les utilisateurs, d’appliquer des méthodes de liste blanche et de masquer l’emplacement du répertoire téléchargé si possible.
Et bien sûr, il existe de nombreuses autres mesures supplémentaires que vous devez prendre pour protéger votre site, même si vous prenez toutes les précautions conseillées pour télécharger des modules de fichiers. L’utilisation d’en-têtes de sécurité HTTP est l’une de ces mesures que vous pouvez prendre.
Laisser un commentaire