Почему после SSH-ключа в промпте агента прокси LLM всё ещё продаёт логи как есть
Около 11 сентября 2026 года исследователь безопасности Шоу Чаофань заявил, что купил примерно 6 ТБ необезличенных вызовов модели Fable у крупного китайского прокси LLM. В выборке, по его словам, оказались закрытые ключи SSH, конфигурации VPN, ключи Alibaba Cloud и токены GitLab — достаточно, как он утверждает, чтобы зайти во внутренние системы нескольких компаний и лабораторий. Эта статья не перепроверяет тот архив и не решает, виновен ли конкретный оператор. Она разбирает один механизм, который можно сверить сразу: если на пути есть узел, который обязан прочитать тело запроса, чтобы переслать его дальше, ключ из промпта агента уже лежит там открытым текстом. Это не инструкция к форме очистки и не страница создания одноразовой ссылки.
Сначала отличите, через какой узел прошёл промпт
Статья отвечает только на вопрос, почему после закрытого ключа SSH и облачного токена в промпте агента прокси LLM всё ещё может продать логи вызовов как есть. Это не форма очистки конфиденциальности и не политика конкретного поставщика модели.
Что происходит, когда промпт попадает на прокси
Это не вопрос «будет ли поставщик модели учить чат на ваших диалогах». Сначала спросите: есть ли на этом прыжке посредник, который обязан видеть тело запроса.
Прокси LLM — его же продают как OpenAI-совместимый прокси, API-роутер или «шлюз моделей» — стоит между вашим редактором и апстрим-моделью. Команды ставят его, чтобы обойти региональный блок, скинуться на общий аккаунт или купить токены со скидкой. Когда запрос приходит, прокси проверяет вашу квоту, подставляет свой апстрим-ключ и отправляет тот же промпт в Claude или другую модель. Эти три шага работают только если он сначала завершает TLS на своём hop и читает поле messages в JSON либо контекст агента, который туда уже сложили. Русскоязычные пересказы публикации Шоу от 11 сентября, в том числе материал ChainCatcher и заметка iXBT, формулируют тот же факт проще: и запрос, и ответ проходят через прокси, поэтому он видит полный открытый текст. Китайский разбор того же дня назвал любой прикладной прокси без сквозного шифрования «сниффером по устройству»; см. SecRSS, «Данные AI-прокси на чёрном рынке».
Кодовый агент делает этот hop опаснее. Cursor, Claude Code и самописные агенты по вашему разрешению читают рабочую папку, сканируют .env, забирают вывод терминала и вшивают эти куски в следующий промпт. Вам не обязательно самому вставлять -----BEGIN OPENSSH PRIVATE KEY----- в чат. Если агент вытащил закрытый ключ или скрипт деплоя, потому что вы попросили «зайти на стенд», эти байты уже в теле, которое сейчас уйдёт на прокси. Более ранняя статья группы Шоу, Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain, проверила 428 маршрутизаторов: девять переписывали ответ, семнадцать после подложенного тестового ключа AWS реально вызывали AWS, один слил ETH из тестового кошелька. Это отдельное утверждение — «будет ли прокси атаковать». Здесь сверяем более тихое: при включённом глобальном журнале прокси не обязан быть злонамеренным, чтобы оставить ключ, который вы туда положили.
Это не тот же путь, что «вставить тикет в веб-чат». На странице чата вы хотя бы видите, что нажали «вставить». У агента через прокси контекст часто собирают инструменты. На этой машине стоит сверять не «я сам набирал ключ?», а «есть ли на hop посредник, который обязан читать тело, и лежит ли в этом теле уже готовый вход».
Прокси может продать логи вызовов не потому, что взломал апстрим-модель, а потому что обязан увидеть открытый текст, прежде чем что-то переслать. HTTPS закрывает провод до прокси и провод от прокси к модели. Он не закрывает копию, которая уже лежит в процессе прокси.
Почему логи вызовов продают как есть
«Как есть» значит: тело запроса на месте. Это не счётчик «этот пользователь вызвал модель один раз».
Самый дешёвый способ для прокси отлаживать, биллить или собирать корпус для дообучения — записать развёрнутый запрос в базу. Промпт, системные инструкции, куски файлов, которые прочитал агент, и ответы инструментов остаются текстовыми полями. Продать 6 ТБ вызовов — значит продать уже развёрнутую историю. Шоу говорил, что в архиве были SSH-ключи с доступом во внутреннюю сеть и токены glpat-; в открытых пересказах показывали замазанные корпоративные хосты GitLab. UsePwd этот архив не покупал, и страница не выдаёт «хватит, чтобы захватить компанию X» за проверенный вывод. Сверить можно механизм: если журнал хранит тело запроса, ключ, который туда попал, сам собой в звёздочки не превращается.
Ни замок в адресной строке, ни фраза поставщика «мы не учим модель на ваших чатах» этот слой не закрывают. Когда браузер или редактор отправляет запрос на прокси, TLS на этом hop заканчивается. Прокси затем открывает новую TLS-сессию уже своим апстрим-аккаунтом. Каждый провод зашифрован. Процесс на машине посередине всё равно видит JSON открытым текстом. Даже если апстрим-модель никогда не учится на разговоре, она не видит копию, которую прокси оставил себе. Есть ли эта копия и продают ли её — политика хранения прокси, а не переключатель «временный чат» в редакторе.
Биллинговый журнал и тело вызова — тоже разные файлы. Счётчики токенов, имя модели и код ответа SSH-ключ не продадут. Как только эксплуатация оставляет полный массив messages, чтобы «повторить тот упавший шаг агента», тот же файл годится и для отладки, и для чёрного рынка. Публикация Шоу разошлась в инженерных кругах именно потому, что покупателям продали не дайджест. Им продали ещё рабочие учётные данные. Вопрос не «ведёт ли прокси логи», а «есть ли в логе тело промпта».
Тот, кто сидит на пути, тело не читает. Это защита транзита, а не копии, уже развёрнутой внутри процесса прокси.
Чтобы переписать заголовок авторизации, выставить счёт и переслать апстриму, нужно прочитать промпт и приложенные куски.
6 ТБ стоят денег, потому что это всё ещё история запросов, а не число вызовов.
Прямой вызов официального API убирает этого посредника, который «обязан видеть тело». Это не значит, что промпт теперь живёт только на вашем компьютере. Серверы поставщика по-прежнему получают открытый текст. Меняется только покупатель: вместо «серого прокси» — «компания, которую вы сами выбрали». Статья держит фокус на прокси, потому что сентябрьское раскрытие превратило «кто-то продал тело пакетом» из мысленного эксперимента в живую историю. После прямого API ответ на «стоит ли класть ключ в промпт» всё равно нет.
Какие секреты форматная маска действительно закрывает
Звёздочки снижают шанс, что обычный токен скопируют целиком. Они не закрывают блок закрытого ключа без короткого префикса.
Очистка конфиденциальности UsePwd в текущей вкладке узнаёт шесть типов полей: телефон, номер документа, карта, почта, обычные токены и IP. Класс токенов ловит префиксы, которые можно сверить: sk-, sk-ant-, sk-proj-, AKIA, ghp_, github_pat_, glpat-, xoxb- и Bearer . Страница открывается сразу, без регистрации. Исходный текст не загружается и не пишется в analytics. Вставьте образец с glpat- — страница оставит префикс, закроет середину и покажет последние четыре либо в полном режиме оставит только префикс и звёздочки. Этого шага достаточно, чтобы на этой машине доказать: обычные облачные и git-токены форматное правило умеет поймать.
Закрытый ключ SSH обычно не такой префикс. Ключ OpenSSH — это PEM-блок, который начинается с -----BEGIN OPENSSH PRIVATE KEY-----, продолжается Base64 и заканчивается парной строкой END. Конфиги VPN, kubeconfig, строка подключения к базе и ключ сервисного аккаунта Yandex Cloud в JSON с полем private_key тоже проскакивают, если у них нет короткой формы вроде AKIA…. Звёздочки на телефоне в тикете не помогают, если агент уже прочитал id_ed25519 в контекст. Почему форматная маска всё равно может указать на того же клиента до вставки тикета в диалоговый ИИ — отдельная статья: Почему форматное маскирование всё ещё указывает на того же клиента. Та — про слой личности, который остался. Эта — про вход, который остался: учётные данные в логе прокси часто можно использовать сразу.
Даже токен вида glpat-***wQ4x вместе с адресом репозитория всё ещё сужает поиск до одного проекта. Полная маска убирает последние четыре. Она не убирает фразу «этот разговор про ту машину, тот кластер». Слой риска снимает другое: ключ и облачный секрет вообще не входят в промпт. В инструкции пишете «секрет идёт отдельной одноразовой ссылкой», агент видит шаги, не материал. Когда парольную фразу нужно отдать коллеге, откройте одноразовую ссылку: текущая вкладка шифрует AES-256-GCM, открытый текст не больше 32 КБ, ключ стоит после # в s.html?id={id}#{key}, сервер хранит только шифротекст. Создать и прочитать можно сразу — регистрироваться не нужно.
sk-, glpat-, ghp_ и AKIA ловятся правилом. Последние четыре всё ещё сужают поиск.
Короткого префикса нет. Если в промпт ушёл весь блок Base64, в логе прокси лежит весь блок.
В промпте только шаги. Секрет идёт через Burn-Link: шифротекст на сервере, ключ только после #.
Чем это не тикет со звёздочками и не ключ в чате
Во всех трёх случаях открытый текст уходит с экрана. Оставшаяся копия — не одно и то же.
Когда тикет вставляют в диалоговый ИИ, первый риск — «можно ли ещё склеить это с одним человеком». Телефон закрыт звёздочками; имя, улица и номер заявки остаются. Когда прокси продаёт логи вызовов агента, первый риск — «можно ли ещё зайти в чужую систему». Токен GitLab, ключ SSH и облачный ключ и есть вход. Свалить оба случая в «мы что-то вставили в ИИ» прячет порядок работы: в тикете спросите, жив ли слой личности; в ключе спросите, есть ли в теле готовые учётные данные и есть ли на hop посредник, который обязан это тело прочитать.
После утечки переменных окружения в облаке новый ключ нельзя снова слать в окно чата; см. После утечки переменных окружения в облаке новый ключ нельзя снова слать в чат. Та статья — про вторую утечку: Telegram, Slack, тикет или скриншот оставляют открытую копию, которую можно найти поиском. Эта — про первую, и она может случиться на пути вызова модели: вы даже не «отправляли ключ коллеге». Вы только дали агенту рабочую папку и попросили закончить деплой. История чата и журнал прокси — разные архивы. Лечение одно: новый ключ не должен идти каналом, который хранит тело.
Фрагмент # в URL не входит в HTTP-запрос; см. Почему фрагмент # в URL не попадает в логи сервера. Burn-Link ставит ключ расшифровки во фрагмент как раз затем, чтобы машина с шифротекстом ключ не видела. Прокси — наоборот: его работа — читать тело. Не читайте «сервер одноразовой ссылки не видит ключ» как «никакой посредник не видит промпт». У двух путей разная видимость. Обе можно сверить в панели Network.
UsePwd не выключит чужой журнал прокси и не запретит агенту читать рабочую папку, к которой вы уже дали доступ. Сверить можно другое: ловится ли обычный токен маской на этой машине и можно ли увести секрет одноразовой ссылкой, которая хранит только шифротекст. Не читайте статью как «поставили этот сайт — и прокси больше не продаст ваши логи».
Как сразу сверить, что маска закрыла
Цель не доказать, что «каждый прокси продаёт 6 ТБ». Цель — на этом браузере увидеть, какие строки маска закрывает, а какие оставляет открытыми.
-
01
Подготовьте два образца, которые никогда не коснутся настоящей системы
Не вставляйте живой закрытый ключ, облачный токен или токен GitLab. Первый образец: фальшивые токены вроде
glpat-TESTONLY0000000000wQ4xиsk-test_UsePwdRelayCheck20260916. Второй: фальшивая оболочка PEM только со строками-----BEGIN OPENSSH PRIVATE KEY-----,USEPWD-FAKE-KEY-NOT-REALи парнымEND. Шаги ниже сравнивают форматные правила. Они не отдают настоящие учётные данные модели или прокси. -
02
Вставьте первый образец на локальной странице маски
Откройте очистку конфиденциальности. Страница работает сразу. Вставьте первый образец в зону маскирования. Частый результат:
glpat-иsk-test_распознаются как токены, середина становится звёздочками. Нажмите F12 и откройте Network: пока обрабатывается этот исходник, в теле запроса не должно быть только что вставленной строки. Этот шаг сверяет «форматное правило закрывает обычный префикс», а не «прокси уже выключили». -
03
Вставьте второй образец и посмотрите, остался ли PEM-блок
Очистите поле и вставьте фальшивый блок ключа. Частый результат: весь промежуток
BEGIN/ENDна месте, потому что форматная маска не считает PEM-броню полем. Запишите это: если агент прочитает настоящийid_ed25519в промпт, в логе прокси окажется такой незакрытый блок, а не телефон со звёздочками. Маска тикета до этого слоя не достаёт. -
04
Отделите «шаги» от «материала» и уведите секрет одноразовой ссылкой
Откройте одноразовую ссылку, положите фальшивую фразу
RelayCheck-20260916в тестовую ссылку, оставьте число прочтений по умолчанию 1 и срок 24 часа. После создания должны быть иs.html?id=, и сегмент#. В Network полезная нагрузка на сервер должна быть шифротекстом, а в URL запроса не должно быть текста после#. В промпте напишите только «материал на одноразовой ссылке», не саму фразу. Ссылку после проверки выбросьте. -
05
Для целого конфига перейдите к шифрованию файлов
Профиль VPN или что угодно больше 32 КБ в одноразовую ссылку не кладут. Для одного файла до 5 ГБ откройте шифрование файлов: потоковое AES-256-GCM на этой машине, результат
.lock/.enc, файл по умолчанию на сервер не уходит. Парольную фразу передайте отдельной одноразовой ссылкой. Сверяете «шифротекст и фраза не идут одним каналом, который хранит тело», а не «после шифрования агенту уже можно читать закрытый ключ».
Если редактор уже указывает API Host на сторонний прокси, сначала прогоните одноразовый проект и посмотрите, читает ли он .env или ~/.ssh в контекст, и только потом оставляйте этот hop. Боевые ключи для эксперимента не берите. Прямой официальный API убирает одного серого посредника. Закрытый ключ внутри промпта от этого безопасным не становится.
Чего не остановит отказ класть ключ в промпт
Прочитать «я сам не вставлял» как «в логе прокси ключа быть не может» — значит потерять несколько границ, которые всё ещё можно сверить.
Если агенту разрешено читать рабочую папку, он может вшить ключ в запрос, даже когда вы не открывали чат. Режим YOLO, автоподтверждение команд оболочки и «весь репозиторий как контекст» расширяют эту поверхность. Находка статьи о том, что часть маршрутизаторов вшивала в ответ лишние инструкции, — второй, активный путь: тот же hop может оставить ключ, который вы отправили, и переписать код, который вы получили. Этот сайт не проверит, подменяет ли конкретный прокси пакеты. Он может только напомнить: hop, которого вы не видите, может писать журнал и может переписывать ответ.
Уже проданные 6 ТБ не исчезнут, потому что вы сегодня поменяли привычку в промпте. Шоу говорил, что часть тех учётных данных ещё может работать. Порядок такой: сначала отозвать — консоль облака, GitLab, хосты, VPN — потом выпустить новый материал. Новый ключ не должен снова войти в контекст агента и не должен снова войти в окно чата. Долгое хранение и синхронизация между устройствами — задача отдельного менеджера паролей. У UsePwd нет аккаунтов и хранилища паролей, потерянную ссылку по пользователю не восстановить. Кто мы — на странице О сервисе.
Форматная маска — подсказка, не обещание, что ничего не проскочит. Важный исходящий текст всё равно просмотрите глазами. Парольную фразу от 6 до 128 символов можно собрать в генераторе паролей, затем сверить локальную стойкость и открытый список слабых паролей на странице проверки пароля — это не поиск Have I Been Pwned по всей сети. Эти страницы, как и статья, открываются сразу. Не читайте замок HTTPS или пометку «временный чат» как «внутри процесса прокси нет открытого текста». Шифрование провода и тело внутри процесса — разные слои.
Что спрашивают, когда ключ уже попал в промпт
Четыре пункта ниже остаются внутри границы статьи. Они не повторяют кнопки на страницах инструментов.
Дочитали — сверьте, что маска закрыла
Статья отвечает, почему после ключа в промпте агента прокси LLM всё ещё может продать логи вызовов как есть. Чтобы пройти ненастоящий токен через форматную маску или увести материал одноразовой ссылкой, откройте нужную страницу — регистрироваться не нужно.