Explotation par gestion dangereuse des sorties dans les LLM

Exploiting insecure output handling in LLMs

Contexte

Ce laboratoire affiche la sortie du LLM de manière non sécurisée, ce qui permet une XSS. L’utilisateur carlos utilise souvent le live chat pour demander des infos sur le produit Lightweight "l33t" Leather Jacket.

Objectif

Réaliser une injection indirecte (indirect prompt injection) afin d’exécuter une XSS qui supprime le compte de carlos.

1) Mise en place

  • Création d’un compte utilisateur.

  • Accès au live chat avec le LLM.

2) Vérifications XSS

Test sur le chat (vulnérable)

Payload de test (déclenche une alerte) :

Test sur les commentaires (pas vulnérable directement)

  • Les commentaires ne semblent pas exécuter du HTML/JS de la même manière.

On passe donc par une source consultée par le LLM (contenu récupéré et affiché dans le chat).

3) Point d’entrée : contenu des avis consultés via le LLM

On demande au LLM d’afficher des avis d’un produit (exemple) :

Réponse observée (exemple) :

L’idée : injecter du HTML dans un avis pour qu’il soit ensuite restitué dans le live chat (où l’affichage est vulnérable).

4) Action ciblée : suppression de compte via formulaire

Pour supprimer un compte depuis My account, on déclenche :

Formulaire correspondant :

5) Exploitation : XSS via iframe (auto-submit)

Payload (soumission automatique du formulaire de suppression)

  • Un premier essai “simple” ne passe pas comme souhaité, donc on l’intègre dans une phrase (variante qui est interprétée) :

Exemple de variante validée :

Résultat : le navigateur interprète l’iframe → charge my-account → exécute forms[1].submit()compte supprimé (testé sur son propre compte).

6) Payload final placé sur le produit ciblé (la veste)

On poste un avis sur Lightweight "l33t" Leather Jacket contenant l’iframe (exemple utilisé) :

Mis à jour