Pratique de confidentialité ·

Après avoir mis des clés SSH dans le prompt d'un Agent, pourquoi un relais LLM peut encore revendre les journaux tels quels

Vers le 11 septembre 2026, le chercheur Chaofan Shou a déclaré avoir acheté environ 6 To de données d'appels au modèle Fable, non masquées, auprès d'un grand relais LLM chinois. Dans ce lot, selon lui, figuraient des clés privées SSH, des configurations VPN, des clés Alibaba Cloud et des jetons GitLab — assez, dans son récit, pour atteindre des systèmes internes d'entreprises et de laboratoires. Cet article ne rejoue pas ce dump et ne tranche pas la culpabilité d'un opérateur nommé. Il ouvre un mécanisme que vous pouvez vérifier sur place : dès qu'un saut doit lire le corps de requête pour le transmettre, une clé entrée dans le prompt d'un Agent s'y trouve déjà en clair. Ce n'est ni le mode d'emploi de Nettoyer un lien, ni le formulaire de création Burn-Link.

Comparer le clair qu'un relais doit voir Vérifiable sur place Sans inscription
00 / Sommaire

D'abord, quel saut le prompt a vraiment franchi

Cet article ne répond qu'à pourquoi un relais LLM peut encore revendre les journaux d'appels tels quels après que des clés SSH et des jetons cloud sont entrés dans le prompt d'un Agent. Ce n'est pas le formulaire de Nettoyer un lien, ni le journal de modifications d'un fournisseur de modèle.

01 / Chemin

Ce qui se passe quand un prompt traverse un relais

La question n'est pas « le fournisseur du modèle va-t-il entraîner sur ma conversation ». Demandez d'abord si ce saut a une boîte intermédiaire qui doit voir le corps.

Un relais LLM — vendu aussi comme proxy compatible OpenAI, routeur d'API ou « passerelle de modèles » — s'intercale entre votre éditeur et le modèle amont. Les équipes y recourent pour contourner un blocage régional, partager un compte mutualisé ou acheter des jetons à prix cassé. Quand votre requête arrive, le relais doit vérifier votre quota, y coller sa propre clé amont, puis renvoyer le même prompt vers Claude ou un autre modèle. Ces trois étapes n'existent que s'il termine d'abord le TLS de son saut et lit le champ JSON messages, ou le contexte d'Agent qu'on y a fourré. Les comptes en anglais du message du 11 septembre de Shou, dont l'article de ChainCatcher et le résumé de Wccftech, disent la même chose en plus simple : requêtes et réponses passent par le relais, donc le relais voit le texte en clair. Une note de sécurité chinoise, le même jour, appelait tout proxy applicatif sans chiffrement de bout en bout « un sniffeur de paquets par conception » ; voir SecRSS, « Données de relais IA sur le marché noir ».

Un Agent de code aggrave ce saut. Cursor, Claude Code et les agents maison iront, avec l'accès que vous avez donné, lire l'espace de travail, balayer un .env, attraper la sortie du terminal, puis recoller ces fragments dans le prompt suivant. Vous n'avez pas besoin de coller vous-même -----BEGIN OPENSSH PRIVATE KEY----- dans une boîte de chat. Si l'Agent a tiré une clé privée ou un script de déploiement parce que vous lui avez demandé de « se connecter à la machine de staging », ces octets sont déjà dans le corps qui s'apprête à partir vers le relais. Un article plus ancien du groupe de Shou, Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain, a testé 428 routeurs : neuf réécrivaient la réponse, dix-sept appelaient vraiment AWS après avoir vu une clé de test plantée, et un a vidé l'ETH d'un portefeuille d'essai. C'est une autre affirmation — « le relais vous attaquera-t-il ». Cet article vérifie la plus discrète : avec un journal global laissé ouvert, le relais n'a pas besoin d'être malveillant pour garder la clé que vous y avez mise.

Ce n'est pas le même chemin que « coller un ticket dans un chat web ». Sur une page de conversation, vous vous voyez au moins appuyer sur Coller. Sur un Agent passé par un relais, le contexte est souvent assemblé par des outils. Ce que vous devez vérifier sur cette machine n'est pas « ai-je tapé la clé », mais « ce saut a-t-il une boîte intermédiaire qui doit lire le corps, et ce corps contient-il maintenant un identifiant utilisable tel quel ».

Retenez d'abord ceci

Un relais peut revendre des journaux d'appels non pas parce qu'il a cassé le modèle amont, mais parce qu'il doit voir le texte en clair avant de transmettre quoi que ce soit. HTTPS protège le fil jusqu'au relais et le fil du relais vers le modèle. Il ne protège pas la copie déjà ouverte dans le processus du relais.

02 / Journaux

Pourquoi ces journaux se vendent tels quels

« Tels quels » veut dire que le corps de requête est encore là — pas un compteur qui dit seulement « cet utilisateur a appelé une fois ».

Le moyen le moins cher, pour un relais, de déboguer, facturer ou récolter du texte de fine-tuning, est d'écrire la requête déjà ouverte dans une base. Le prompt, les instructions système, les extraits de fichiers lus par l'Agent et les retours d'outils restent des champs texte. Vendre 6 To de données d'appels, c'est vendre cet historique déjà ouvert. Shou a dit que le dump contenait des clés SSH capables d'atteindre un intranet et des jetons glpat- ; les comptes publics montraient des hôtes GitLab d'entreprise masqués. UsePwd n'a pas acheté ce dump, et cette page ne traitera pas « assez pour prendre le contrôle de l'entreprise X » comme un constat vérifié. Ce que vous pouvez vérifier, c'est le mécanisme : si le journal stocke le corps de requête, une clé qui y est entrée ne se transforme pas toute seule en astérisques.

Ni le cadenas de la barre d'adresse, ni une phrase du fournisseur du type « nous n'entraînons pas sur vos conversations » n'arrêtent cette couche. Quand votre navigateur ou votre éditeur envoie la requête au relais, le TLS s'arrête sur ce saut. Le relais ouvre ensuite une nouvelle session TLS avec son propre compte amont. Chaque fil est chiffré. Le processus sur la machine du milieu voit encore du JSON en clair. Même si le modèle amont n'entraîne jamais sur la conversation, il ne voit pas la copie que le relais a gardée pour lui. Que cette copie existe, et qu'elle soit vendue, relève de la politique de stockage du relais — pas d'une case « conversation temporaire » cochée dans l'éditeur.

Un journal de facturation et un corps d'appel ne sont pas non plus le même fichier. Des comptes de jetons, des noms de modèles et des codes de statut ne vendent pas une clé SSH. Dès que l'exploitation garde le tableau messages entier pour « rejouer cette étape d'Agent qui a échoué », le même fichier sert au débogage et au marché noir. Si le message de Shou a circulé dans les cercles d'ingénierie chinois, c'est que les acheteurs n'ont pas reçu un résumé. Ils ont reçu des identifiants qui fonctionnaient encore. La question à poser n'est pas « le relais journalise-t-il », mais « le journal contient-il le corps du prompt ».

HTTPS jusqu'au relais
Le fil est chiffré

Quelqu'un sur le chemin ne lit pas le corps. Cela protège le transit, pas la copie déjà ouverte dans le processus du relais.

Le processus du relais
Doit voir le texte en clair

Pour réécrire l'en-tête d'auth, vous facturer et transmettre vers l'amont, il doit lire le prompt et les extraits joints.

Le dump qui se vend
Souvent le corps déjà ouvert

6 To valent cher parce que c'est encore de l'historique de requêtes, pas un décompte d'appels.

Appeler l'API officielle du modèle en direct retire cette boîte intermédiaire « qui doit voir le corps ». Cela ne veut pas dire que le prompt ne vit plus que sur votre machine. Les serveurs du fournisseur reçoivent encore le texte en clair. L'acheteur change seulement : « un relais gris » devient « l'entreprise que vous avez choisie ». Cet article reste sur les relais parce que la révélation de septembre a fait passer « quelqu'un a vendu le corps en lot » d'une hypothèse à une affaire en cours. Une fois le lien direct en place, la réponse à « une clé doit-elle entrer dans le prompt » reste non.

03 / Masque

Quels secrets le masquage de format couvre vraiment

Des astérisques abaissent la chance qu'un jeton courant soit recopié entier. Ils ne couvrent pas un bloc de clé privée sans préfixe court.

Le Nettoyer un lien UsePwd reconnaît six types de champs dans l'onglet actuel : téléphone, n° d'identité, carte bancaire, e-mail, jetons courants et IP. La classe des jetons correspond à des préfixes que vous pouvez vérifier, dont sk-, sk-ant-, sk-proj-, AKIA, ghp_, github_pat_, glpat-, xoxb- et Bearer . Ouvrez et utilisez — sans inscription. Le texte source n'est pas envoyé et n'est pas écrit dans analytics. Collez un échantillon qui contient glpat- : la page garde le préfixe, masque le milieu et laisse les quatre derniers caractères, ou, en masquage intégral, ne laisse que le préfixe plus des astérisques. Cette étape suffit à prouver, sur cette machine, qu'un jeton cloud ou d'hébergeur git courant peut être attrapé par une règle de format.

Une clé privée SSH n'est en général pas ce genre de préfixe. Une clé OpenSSH est un bloc PEM qui commence par -----BEGIN OPENSSH PRIVATE KEY-----, continue en Base64 et se termine sur une ligne END correspondante. Les configurations VPN, les kubeconfig, les URL de bases et les AccessKey Alibaba Cloud qui ne ressemblent pas à AKIA… passent aussi. Étoiler un numéro de téléphone sur un ticket n'aide pas si l'Agent a déjà lu id_ed25519 dans le contexte. Pourquoi le masquage de format peut encore pointer le même client avant de coller un ticket dans une IA conversationnelle est un autre article : Pourquoi le masquage de format d'un ticket pointe encore le même client. Celui-là parle de la couche d'identité qui reste. Celui-ci parle d'un identifiant de connexion qui reste — et un secret dans le journal d'un relais se laisse souvent utiliser tel quel.

Même un jeton masqué en glpat-***wQ4x peut, avec l'hôte du dépôt, encore restreindre la recherche à un projet. Le masquage intégral retire les quatre derniers. Il ne peut toujours pas retirer « cette conversation parle de cette machine, de ce cluster ». Le geste qui retire vraiment une couche est de garder les clés privées et les jetons cloud hors du prompt : rédigez la procédure comme « le secret voyage sur un lien à usage unique séparé », et laissez l'Agent voir des étapes, pas le matériau. Quand une phrase secrète doit atteindre un collègue, utilisez Burn-Link : cet onglet chiffre avec AES-256-GCM, le texte en clair est plafonné à 32 Ko, la clé circule après # dans s.html?id={id}#{key}, et le serveur ne stocke que le texte chiffré. Création et lecture fonctionnent tout de suite — sans inscription.

Préfixes de jetons courants
Le masquage de format les couvre souvent

sk-, glpat-, ghp_ et AKIA correspondent à une règle. Les quatre derniers caractères peuvent encore restreindre la recherche.

Clés PEM / fichiers VPN
En général non couverts

Il n'y a pas de préfixe court. Si tout le bloc Base64 est entré dans le prompt, le journal du relais a tout le bloc.

Un lien à usage unique
La clé n'entre jamais dans le prompt

Le prompt n'a que des étapes. Le secret passe par Burn-Link : texte chiffré sur le serveur, clé seulement après #.

04 / Couches

En quoi cela diffère d'un ticket étoilé et d'une clé dans le chat

Les trois cas impliquent du texte en clair qui quitte votre écran. La copie qui reste n'est pas la même chose.

Quand un ticket est collé dans une IA conversationnelle, le premier risque est « peut-on encore rattacher cela à une personne ». Le téléphone est étoilé ; le nom, la rue et le n° de ticket restent. Quand un relais vend des journaux d'appels d'Agent, le premier risque est « quelqu'un peut-il encore se connecter au système d'un autre ». Un jeton GitLab, une clé SSH et une clé cloud sont l'identifiant. Tout fondre dans « on a collé quelque chose dans une IA » masque l'ordre de travail : sur un ticket, demandez si la couche d'identité est encore là ; sur une clé, demandez si le corps contient un identifiant utilisable, et si ce saut a une boîte intermédiaire qui doit lire ce corps.

Après une fuite de variables d'environnement cloud, la clé tournée ne doit pas retourner dans une fenêtre de chat ; voir Après une fuite de variables d'environnement, pourquoi la nouvelle clé ne doit pas retourner dans le chat. Cet article-là est la seconde fuite : Slack, WeChat, un ticket ou une capture laisse une copie en clair, consultable. Celui-ci est la première fuite, et elle peut se produire sur le chemin d'appel au modèle : vous n'avez jamais « envoyé la clé à un collègue ». Vous avez seulement laissé un Agent emporter l'espace de travail et finir un déploiement. L'historique de chat et le journal d'un relais ne sont pas la même archive. Le geste est le même — ne remettez pas une nouvelle clé sur un canal qui garde le corps.

Un fragment # d'URL n'entre jamais dans une requête HTTP ; voir Pourquoi le fragment # d'une URL n'apparaît pas dans les journaux serveur. Burn-Link place la clé de déchiffrement dans ce fragment pour que la machine qui stocke le texte chiffré ne voie pas la clé. Un relais est l'inverse : son métier est de lire le corps. Ne lisez pas « le serveur Burn ne voit pas la clé » comme « aucune boîte intermédiaire ne voit le prompt ». Les deux chemins n'ont pas la même visibilité. Vous pouvez les vérifier tous les deux dans le panneau Réseau.

Ne l'inversez pas

UsePwd ne peut pas éteindre le journal d'un relais chez quelqu'un d'autre, et ne peut pas empêcher un Agent de lire un espace de travail que vous avez déjà autorisé. Ce que vous pouvez vérifier, c'est si un jeton courant est masqué sur cette machine, et si un secret peut circuler sur un lien à usage unique qui ne stocke que le texte chiffré. Ne lisez pas cet article comme « installez ce site et un relais ne pourra plus vendre vos journaux ».

05 / Contrôle

Comment comparer ce que le masque couvre

L'objectif n'est pas de prouver que « chaque relais vend 6 To ». C'est de prouver, dans le navigateur que vous utilisez, quelles chaînes sont masquées et lesquelles restent en clair.

  1. 01
    Préparez deux échantillons qui ne toucheront jamais un vrai système

    Ne collez pas une clé privée, un jeton cloud ou un jeton GitLab en service. Premier échantillon : des jetons fictifs tels que glpat-TESTONLY0000000000wQ4x et sk-test_UsePwdRelayCheck20260916. Second échantillon : une coquille PEM factice avec seulement -----BEGIN OPENSSH PRIVATE KEY-----, USEPWD-FAKE-KEY-NOT-REAL et la ligne END correspondante. Les étapes ci-dessous ne comparent que des règles de format. Elles ne remettent aucun identifiant réel à un modèle ni à un relais.

  2. 02
    Collez le premier échantillon sur la page de masquage locale

    Ouvrez Nettoyer un lien. La page fonctionne dès l'ouverture. Collez le premier échantillon dans Masquage. Un résultat courant est que glpat- et sk-test_ sont traités comme des jetons et que le milieu devient des astérisques. Appuyez sur F12 et ouvrez Réseau : pendant le traitement de cette source, le corps de requête ne doit pas contenir la chaîne que vous venez de coller. Cette étape vérifie « la règle de format couvre un préfixe courant », pas « le relais a été éteint ».

  3. 03
    Collez le second échantillon et voyez si le bloc PEM reste

    Videz le champ, puis collez le faux bloc de clé. Un résultat courant est que tout l'intervalle BEGIN / END est encore là, parce que le masquage de format ne traite pas l'armure PEM comme un champ. Notez-le : si un Agent lit un vrai id_ed25519 dans le prompt, le journal du relais reçoit ce genre de bloc non masqué — pas un numéro de téléphone étoilé. Le masquage d'un ticket n'atteint pas cette couche.

  4. 04
    Séparez « les étapes » du « matériau » et passez par un lien à usage unique

    Ouvrez Burn-Link, mettez la phrase secrète fictive RelayCheck-20260916 dans un lien de test, laissez les lectures à 1 par défaut et l'expiration à 24 heures. Après création, vous devez voir à la fois s.html?id= et un segment #. Dans Réseau, la charge envoyée au serveur doit être du texte chiffré, et l'URL de requête ne doit pas contenir le texte après #. Dans le prompt, n'écrivez que « le matériau est sur un lien à usage unique », pas la phrase secrète elle-même. Jetez le lien une fois le test fini.

  5. 05
    Pour un fichier de configuration entier, passez à Chiffrer un fichier

    Un profil VPN ou tout ce qui dépasse 32 Ko n'a rien à faire dans Burn-Link. Pour un fichier unique de 5 GB au plus, utilisez Chiffrer un fichier pour lancer un chiffrement AES-256-GCM en flux sur cette machine, écrire .lock / .enc, et laisser le fichier hors du serveur par défaut. Envoyez la phrase secrète sur son propre lien à usage unique. Ce que vous vérifiez, c'est « le texte chiffré et la phrase secrète ne partagent pas un canal qui garde le corps », pas « une fois chiffré, l'Agent peut lire la clé privée ».

Si votre éditeur pointe déjà son hôte d'API vers un relais tiers, commencez par un projet jetable et voyez s'il lit .env ou ~/.ssh dans le contexte avant de garder ce saut. N'expérimentez pas avec des clés de production. Une API officielle en direct retire une boîte intermédiaire grise. Elle ne rend pas pour autant une clé privée sûre à l'intérieur d'un prompt.

06 / Limites

Ce que garder les clés hors des prompts ne peut pas arrêter

Lire « je n'ai jamais collé moi-même » comme « le journal du relais ne peut pas avoir de clé » fait tomber quelques frontières que vous pouvez encore vérifier.

Si un Agent a le droit de lire l'espace de travail, il peut recoller une clé dans la requête sans que vous ouvriez une boîte de chat. Le mode YOLO, les commandes shell auto-approuvées et « traiter tout le dépôt comme contexte » élargissent cette surface. Le constat de l'article — certains relais injectaient des instructions supplémentaires dans la réponse — est un second chemin, actif : le même saut peut garder la clé que vous avez envoyée et réécrire le code que vous récupérez. Ce site ne peut pas vérifier si un relais donné altère les paquets. Il peut seulement rappeler que le saut que vous ne voyez pas peut journaliser, et qu'il peut réécrire.

Un dump de 6 To déjà vendu ne s'évapore pas parce que vous avez changé vos habitudes de prompt aujourd'hui. Shou a dit que certains de ces identifiants pouvaient encore fonctionner. L'ordre de travail est de révoquer d'abord — console cloud, GitLab, hôtes, VPN — puis d'émettre du nouveau matériau. La nouvelle clé ne doit plus rentrer dans le contexte d'un Agent, et ne doit plus rentrer dans une fenêtre de chat. La conservation longue ou la synchro multi-appareils appartient à un gestionnaire de mots de passe dédié. UsePwd n'a ni compte ni coffre, et ne peut pas retrouver un lien perdu par utilisateur. L'identité est dans À propos.

Le masquage de format est une aide, pas la promesse que rien ne passe. Relisez vous-même un texte sortant important. Générez une phrase secrète entre 6 et 128 caractères dans le Générateur de mot de passe, puis utilisez Tester un mot de passe pour la force locale et la liste publique de mots de passe faibles livrée avec la page — pas une recherche Have I Been Pwned à l'échelle du web. Ces pages, comme cet article, fonctionnent tout de suite. Ne lisez pas un cadenas HTTPS, ni une étiquette « temporaire » sur un chat, comme « il n'y a pas de texte en clair dans le processus du relais ». Le chiffrement du fil et un corps déjà ouvert dans un processus ne sont pas la même couche.

07 / FAQ

Questions qui reviennent après qu'une clé est entrée dans un prompt

Les quatre points ci-dessous restent dans les limites de cet article. Ils ne répètent pas les boutons des pages d'outils.

Si je n'ai jamais collé la clé, le relais peut-il encore la voir 01 Oui. Si l'Agent a lu l'espace de travail ou un .env, la clé est déjà dans le corps qui s'apprête à partir vers le relais.
Un ticket étoilé, c'est la même couche 02 Non. Le masquage d'un ticket surveille la couche d'identité. Les clés SSH et les jetons cloud dans le journal d'un relais sont des identifiants utilisables tels quels.
L'API officielle suffit-elle à rendre cela sûr 03 Elle retire une boîte intermédiaire grise. Les serveurs du fournisseur reçoivent encore le texte en clair. Une clé ne doit toujours pas entrer dans le prompt.
Le masquage et Burn-Link exigent-ils un compte 04 Non. Ouvrez et utilisez. La barre supérieure n'a qu'un sélecteur de langue — pas de connexion ni de coffre.
08 / Ensuite

Une fois lu, comparez ce que le masque couvre

L'article répond pourquoi un relais LLM peut encore revendre les journaux d'appels tels quels après qu'une clé est entrée dans le prompt d'un Agent. Pour passer un jeton fictif contre le masquage de format, ou pour déplacer le matériau sur un lien à usage unique, ouvrez la page correspondante — sans inscription.