Retenez d’abord ceci : un routeur d’API LLM se place entre votre client et le modèle en amont. Un article de mesure de 2026 l’appelle « un proxy de couche applicative avec un accès en clair complet à chaque charge utile JSON en transit ». HTTPS ne protège que le saut jusqu’à ce proxy. Une fois une clé écrite dans une invite ou un argument d’outil, elle peut figurer dans les journaux du routeur sans que quiconque casse TLS.
Répondre à l’intention de recherche en une phrase
Des clés SSH apparaissent dans un dump d’appels parce qu’elles ont d’abord été écrites dans un contexte en clair que le routeur LLM devait lire. Le routeur relaie la requête, donc il parse le JSON ; s’il peut le parser, il peut le stocker et le vendre. L’article fixe la frontière en une clause : les routeurs tiers fonctionnent comme des proxies de couche applicative, ils voient chaque charge utile JSON en transit en clair, et rien n’impose une intégrité cryptographique vérifiable entre le client et le modèle en amont.
Cette note s’adresse aux développeurs et à l’exploitation qui appellent un modèle via un agent d’IDE, une passerelle auto-hébergée, ou un « relais » bon marché qui promet Claude ou un autre fournisseur. Elle ne remplace pas le mode d’emploi du masquage des données, et elle ne répète pas « masquer les champs d’un ticket avant de le coller dans une fenêtre de chat ». Ce qu’il faut emporter : jusqu’où le message de septembre peut servir de preuve, quels deux bouts HTTPS couvre vraiment, pourquoi le contexte d’un agent a plus de chances qu’un ticket de transporter une clé privée entière, et comment comparer l’hôte plus le texte que vous allez envoyer, sur cet appareil.
Ce que le message de septembre a réellement dit
Selon un compte rendu public du 11 septembre 2026, le chercheur Chaofan Shou a écrit le 10 septembre qu’il avait acheté un jeu de données d’appels Fable d’environ 6 To auprès d’un routeur LLM chinois de premier plan. Il a dit que les clés SSH, les blocs VPN, les clés Alibaba Cloud et les jetons GitLab de ce dump suffisaient à atteindre sept organismes liés à la Chine ou à la CEI, et dix-neuf entreprises chinoises. Le message a nommé plusieurs marques. Plusieurs articles de suivi sont parus le lendemain.
Seules trois phrases de cette histoire méritent une liste de vérification. Première : « un routeur LLM peut conserver des traces d’appels, et quelqu’un peut les empaqueter pour les vendre » est désormais une assertion publique nommée, à l’échelle du téraoctet. Deuxième : les types d’identifiants qu’il a listés — clés privées, blocs VPN, clés cloud, jetons GitLab — sont exactement les blocs qu’un agent colle dans le contexte pendant un débogage. Troisième : « assez pour prendre le contrôle » est une affirmation de capacité du chercheur, pas un bulletin d’intrusion audité par un tiers. FastPwd n’a pas inspecté ces 6 To, et n’écrit pas les marques nommées comme « déjà piratées ».
Un titre peut reprendre l’actualité. Un verdict, non. Le chemin technique reste le même dans les deux cas : une fois l’invite en clair partie de cet appareil, le routeur n’est plus un tuyau transparent.
Quelle couche de texte en clair le routeur LLM voit
Une API de modèle officielle, c’est en général : votre client parle au fournisseur, et le point de terminaison TLS est le fournisseur. Un routeur LLM ajoute un saut. Le client envoie la requête au routeur ; le routeur la réécrit en appel amont. Pour le client, le certificat et le pair (la barre d’adresse, ou le distant de la bibliothèque HTTP) s’arrêtent au routeur. Une fois que ce processus a déballé TLS, il voit le corps entier : invite système, question utilisateur, noms d’outils, arguments, et parfois un chemin de dépôt ou un extrait de .env.
Liu, Shou et leurs coauteurs, dans Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain (arXiv:2604.08407, soumis le 9 avril 2026), placent deux classes d’attaques dans le modèle de menace : réécrire les charges utiles d’appels d’outils (AC-1), et extraire des secrets de ces charges en clair (AC-2). Ils ont acheté 28 routeurs payants sur des places de marché et des boutiques indépendantes, et collecté 400 routeurs gratuits dans des communautés publiques. Les chiffres publiés : un routeur payant et huit gratuits injectaient activement du code malveillant ; dix-sept ont touché des identifiants canari AWS que les chercheurs avaient plantés ; un a vidé de l’ETH d’une clé de test appartenant aux chercheurs. Dans une étude d’empoisonnement ultérieure, des leurres faiblement configurés ont exposé 99 identifiants sur 440 sessions Codex, dont 401 tournaient déjà en mode YOLO sans confirmation.
Vous n’avez pas à reproduire l’expérience. L’article a déjà publié un fait : un routeur peut « voir », et certains nœuds « réécrivent » et « dépensent » aussi. Un forfait payant n’est pas une garantie d’innocuité. Le dump de 6 To de septembre est le même chemin, nommé publiquement, à l’étape « voir et garder ».
| Ce que vous observez | Ce que cela peut soutenir | Ce que cela ne peut pas soutenir |
|---|---|---|
| Le client affiche HTTPS / une connexion sécurisée | Le saut jusqu’au point de terminaison TLS actuel est chiffré | Le routeur LLM ne peut pas voir l’invite |
| Le routeur peut relayer un appel d’outil | Il doit parser le JSON en clair | Il ne fait que transférer des octets et n’écrit jamais sur disque |
| Un chercheur dit avoir acheté un dump d’appels de 6 To | Il existe une assertion publique que des journaux ont été empaquetés et vendus | Les entreprises nommées ont été confirmées piratées par un tiers |
| L’article a mesuré la réécriture des charges utiles | Certains nœuds injectent, ils ne font pas que stocker | Tous les routeurs LLM empoisonnent le trafic |
| Un ticket a déjà passé un masquage par règles | Téléphones et numéros d’identité courants peuvent être masqués | Une clé privée SSH entière dans le contexte de l’agent a été bloquée |
HTTPS arrête un observateur sur le chemin. Il n’empêche pas le routeur de lire le corps
Les notes TLS de MDN placent la protection ici : sur un réseau non fiable, le chiffrement, l’intégrité et l’authentification du serveur ont lieu entre le client et le serveur ; quand cette pile protège HTTP, le résultat s’appelle HTTPS. Après la poignée de main, en-têtes et corps sont du texte chiffré sur ce saut. Dans le cas du routeur, « le serveur » est le routeur. Il doit déchiffrer pour savoir quel amont appeler et quels sont les arguments d’outil. Une fois qu’il a déchiffré puis écrit un journal, il n’y a plus de second « bout en bout » que vous imaginiez.
Donc « nous utilisons HTTPS, donc la clé ne peut pas fuir » ne tient pas sur ce chemin. La phrase exacte est : ce saut public a TLS, donc une capture sur le chemin a peu de chances de lire le JSON ; le processus du routeur, son disque, ses opérateurs, et quiconque achète le dump, ne sont pas dans la colonne « observateur sur le chemin ».
Une API officielle du fournisseur n’ôte pas non plus le personnel du fournisseur de « peut voir le clair ». La différence, c’est où vous tracez la frontière de confiance : vous remettez le corps à l’interface officielle du fournisseur de modèle, ou vous le remettez d’abord à un tiers qui vend une marge, un quota, ou « un Claude qui marche ». Ce dernier n’a souvent aucun contrat avec vous sur le traitement des clés, et il lit le même JSON avant le fournisseur.
Pourquoi le contexte d’un agent a plus de chances qu’un ticket de transporter une clé entière
Quand vous collez un ticket dans une fenêtre de chat web, une personne jette au moins un coup d’œil aux caractères sur le point de partir. Les agents et les plugins d’IDE assemblent souvent le contexte tout seuls : le fichier courant, une erreur de terminal, un remote Git, un .env, la commande ssh qui vient d’échouer. Activez YOLO ou « approuver les outils automatiquement », et une clé privée peut entrer dans le corps de la requête sans clic sur Envoyer. Les 401 / 440 sessions de l’article tournaient déjà dans ce mode. C’est un décompte, pas une métaphore.
Le masquage par règles est bon pour les téléphones, les numéros d’identité et les e-mails — des champs à forme stable. Il ne couvre pas « coller tout le id_rsa dans l’invite système », ni « mettre AKIA… et le secret correspondant dans un argument d’outil ». La note précédente porte sur la vérification des champs avant de coller un ticket. Celle-ci demande d’abord : ce JSON contient-il un secret entier qui peut ouvrir une session. Faites les deux. N’en traitez pas un comme substitut de l’autre.
Un mot de passe à usage unique qui doit atteindre un collègue ne devrait pas non plus faire le détour par un agent. Un meilleur chemin est le lien auto-destructeur : chiffrez en local, ne donnez au serveur que le texte chiffré, et placez la clé de déchiffrement après le dièse dans s.html?id={id}#{key}. Créer et lire sont prêts à l’emploi. Un rafraîchissement qui affiche « brûlé » signifie seulement que le texte chiffré a disparu du serveur. Cela ne signifie pas que le destinataire a sauté la capture d’écran — cette limite appartient à un autre article. Cela retire tout de même un saut en clair par rapport à « remettre le mot de passe à un routeur qui peut garder 6 To de journaux ».
Ne testez pas avec une vraie clé privée SSH, une clé cloud de production, un jeton GitLab non renouvelé, ou un ticket non masqué. Préparez un canari jetable, par exemple CANARY-LLM-20260916. Vous contrôlez la frontière de sortie, vous n’envoyez pas une clé qui ouvre encore une porte.
Contrôler maintenant : hôte, JSON, et le texte que vous allez envoyer
Un slogan n’est pas une preuve. Les trois étapes ci-dessous se terminent sur cet appareil et n’exigent aucun compte. L’objectif n’est pas de recréer une vente de 6 To. C’est de voir à qui ce client a envoyé le corps, et ce qui est parti.
- Ouvrez Network dans les outils de développement, ou lisez le pair HTTPS de l’agent dans un proxy local ou un terminal. Notez l’hôte : un domaine d’API officiel, un routeur LLM, une passerelle auto-hébergée, ou un relais à l’étranger. Le sujet du certificat doit correspondre à cet hôte.
- Créez un canari qui n’apparaîtra jamais dans le travail réel. Placez-le dans cette invite ou cet argument d’outil, envoyez, puis cherchez la chaîne entière dans le corps de la requête. Une occurrence signifie que ces caractères ont quitté cet appareil comme donnée métier. HTTPS dans la barre d’adresse ou dans la bibliothèque HTTP ne change pas cette conclusion.
- Comparez à part le texte « sur le point d’être envoyé ». Un en-tête de clé privée SSH
BEGIN OPENSSH PRIVATE KEY, une clé cloud, unglpat-GitLab, ou un bloc de configuration VPN encore présents signifient : n’envoyez pas. Téléphones, numéros d’identité et e-mails courants peuvent d’abord passer par un masquage par règles. Un mot de passe ou une clé privée entière doit devenir un espace réservé, ou aller à une personne via un lien auto-destructeur — pas via un routeur de modèle.
Une liste d’hôtes est plus proche de « qui peut voir » qu’un cadenas
La même entreprise peut livrer un SDK officiel et un base_url collé depuis un chat. « Nous utilisons le modèle X » ne suffit pas. Lisez le nom d’hôte que cette requête a réellement touché. Les routeurs terminent souvent TLS sur leur propre domaine, puis appellent le fournisseur avec leur propre clé amont. Si votre secret est dans le JSON du premier saut, le fournisseur n’est même pas le seul lecteur.
Le texte que vous allez envoyer est l’objet du contrôle
Un badge de page qui dit « masqué », « mode confidentialité » ou « non utilisé pour l’entraînement » ne change que la façon dont l’autre côté conserve et apprend. Cela ne change pas le fait que les champs sont déjà partis. Si un routeur vend le dump d’appels, un interrupteur d’entraînement n’aide pas. L’objet de comparaison est toujours ce corps de requête, pas le libellé de l’interrupteur.
Un agent empaqueté peut d’abord envoyer vers un proxy localhost, et ce proxy quitte ensuite la machine. Si vous ne trouvez pas d’hôte externe, suivez le port local jusqu’au saut suivant. Localhost n’est pas la fin. C’est encore une remise du même texte en clair.
Trois façons de surinterpréter ce cycle d’actualité
Première : écrire les marques nommées comme « confirmées piratées ». Le message est une affirmation de capacité. Sans expertise tierce que FastPwd n’a pas menée, n’écrivez pas un verdict. Ce que vous pouvez faire : renouveler la même classe d’identifiants déjà apparue dans votre environnement, et cesser d’envoyer des clés encore actives à un routeur.
Deuxième : écrire « passez à l’API officielle » comme « le clair ne quitte jamais cet appareil ». Un point de terminaison officiel lit encore l’invite sur un serveur. Ce qu’il retire, c’est le saut « le routeur à marge stocke et vend », pas « le serveur du modèle ne peut pas voir le corps ». Un modèle local, ou un masquage qui se termine sur cet appareil, est ce qui garde le corps dans un processus que vous contrôlez.
Troisième : écrire FastPwd comme quelque chose qui peut auditer un routeur pour vous. Il ne relaie pas le trafic des modèles, et n’a ni compte ni coffre. Ce qu’il peut faire dans cet onglet : masquer le texte que vous allez envoyer, et remettre un secret à usage unique à une personne via un lien auto-destructeur. Le chiffrement de fichier utilise AES-256-GCM sur un fichier jusqu’à 5 Go, écrit .lock / .enc, et n’envoie pas le clair par défaut — c’est un autre chemin « chiffrer avant de sortir ». Cela ne répare pas une clé privée que vous avez déjà mise dans une invite.
Questions fréquentes
Si le routeur LLM utilise HTTPS, l’invite est-elle chiffrée de bout en bout ?
HTTPS chiffre le saut du client jusqu’au point de terminaison TLS actuel. Le routeur est ce point. L’article le décrit comme un proxy de couche applicative qui voit chaque charge utile JSON en transit en clair. Un observateur sur le chemin a peu de chances de lire les octets. Les journaux du routeur, ses opérateurs et quiconque achète un dump empaqueté peuvent encore lire l’invite, l’appel d’outil et la clé.
Le dump de 6 To prouve-t-il que les entreprises nommées ont été piratées ?
Non. Le message du 10 septembre est l’affirmation du chercheur : il dit avoir acheté environ 6 To de données d’appels contenant des identifiants suffisants pour atteindre plusieurs entreprises et organismes. Cette note le traite comme une assertion publique à vérifier, pas comme une intrusion confirmée. Ce que vous pouvez contrôler sur cet appareil, c’est si cette requête a placé une clé encore active dans l’invite.
Est-ce le même contrôle que masquer un ticket avant de le coller dans ChatGPT ?
Non. Le masquage d’un ticket demande s’il reste des téléphones, des numéros d’identité et des e-mails dans le collage. La question du routeur demande quel hôte le JSON de l’agent a touché, et si une clé privée SSH ou un jeton cloud est parti comme argument d’outil. Les masques de champs attrapent les tickets. Ils n’attrapent pas une clé privée entière fourrée dans le contexte.
FastPwd peut-il empêcher un routeur LLM de vendre ses journaux ?
Non. FastPwd n’a pas de compte et ne relaie pas le trafic des modèles. Ce qu’il peut faire : masquer les champs sensibles courants avant que le texte quitte cet appareil, et envoyer un mot de passe qui doit atteindre un collègue via un lien auto-destructeur, clé après # dans l’URL. Prêt à l’emploi. Les clés SSH encore actives et les jetons cloud n’ont rien à faire dans une invite.
Faire passer le même canari dans un outil prêt à l’emploi
Si ce que vous allez envoyer est un ticket, un journal ou une pile d’erreurs, ouvrez le masquage des données FastPwd. Aucune inscription. Collez un paragraphe jetable et comparez le masque : téléphones, numéros d’identité, e-mails et formes courantes de clés API ne devraient pas partir en clair. Le texte source n’est pas envoyé par défaut. Un mot de passe entier que les règles ne couvrent pas n’est pas « assez proche ». Transformez-le en espace réservé.
Si un mot de passe de test à usage unique doit atteindre un collègue — pas un modèle — ouvrez le lien auto-destructeur et générez s.html?id={id}#{key}. Comparez Network : la ligne de requête ne doit porter que id. La clé après le dièse ne doit pas y figurer. Cela résout « remettre un secret à une personne une fois ». Cela ne rend pas un routeur LLM sûr.
La prochaine fois que vous verrez « routeur LLM 6 To » ou « clés SSH dans un dump d’appels », posez trois questions. Première : le point de terminaison TLS de ce JSON est-il l’API officielle ou un routeur tiers. Deuxième : le texte que vous allez envoyer contient-il encore un secret entier qui peut ouvrir une session. Troisième : un mot de passe qui doit atteindre une personne est-il passé après le dièse, plutôt que dans un agent. Une observation que vous pouvez répéter est celle qui mérite d’entrer dans votre propre liste de revue.
Pour aller plus loin
Avant de coller tickets et journaux dans une IA, comment vérifier quels champs quittent cet appareil : Avant de coller un ticket ou un journal dans une IA, vérifier quels champs quittent cet appareil. Comment chercher un canari dans Network pour le chiffrement local du navigateur : Vérifier que le chiffrement local n’envoie pas le texte en clair. Pourquoi la partie après # reste hors de HTTP par défaut : Pourquoi un fragment d’URL peut porter une clé, et quand cette protection lâche.