Эта страница является переводом. Авторитетным считается текст английской версии. Читать на английском
threat-actor · litellm · agentic-ai · credential-theft · china-nexus
keyHunter: операция по сбору ключей LLM-прокси, раскрывшая собственный инструментарий
Китаеязычный оператор прочесывает FOFA в поисках открытых панелей AI-прокси, проверяет их кодом с модульными тестами, написанным так, чтобы распознавать honeypot, и выгружает API-ключи. Его агент отправил на один из наших honeypot 283 файловых пути со своего хоста, результаты сканирования, лог переписки в WeChat и каталог результатов с файлами эксплойтов, названными по шести CVE 2026 года, включая обход Stripe-вебхука в New-API.
Автор Davis Zheng·
TLP:CLEAR. Разрешено к публичному распространению. Практически весь материал ниже принадлежит самому оператору и восстановлен из вывода, который агент оператора отправил на один из наших honeypot. Индикаторы деактивированы, то есть адреса атакующих записаны так, что по ним нельзя случайно перейти или разрешить их в DNS. Цели сканирования, один сторонний хост, помеченный самим оператором, и полное значение его FOFA API-ключа не публикуются.
Резюме
- 27,173хостов-кандидатов прочесано через FOFA
- 194выдали список моделей
- 17API-ключей выгружено
- 6CVE 2026 года, по именам файлов
Китаеязычный оператор прочесал 27,173 хоста в восьми странах ради одной цели: открытых панелей AI-прокси с живыми ключами за ними. Панель AI-прокси, это ПО, которое команды ставят между своими приложениями и платными провайдерами моделей, чтобы один набор провайдерских ключей можно было использовать совместно: например LiteLLM, One-API и его форк New-API, Sub2API и Chat2API. Оставьте такую панель в интернете без пароля, и всё, что стоит за ней, смогут расходовать посторонние. Оператор находит их через FOFA, поисковик по данным непрерывного сканирования всего интернета и китайский аналог Shodan, проверяет, какие панели ещё отвечают, и выгружает ключи.
Эти цифры принадлежат самому оператору, они взяты из его файлов с результатами, а не оценены нами. Из тех 27,173 хостов 194 выдавали список моделей, а 17 ключей попали в файл экспорта. Прогон по США, самый наглядный отдельный случай: 10,447 целей на входе, 64 списка моделей на выходе, доля попаданий 0.61%, и его собственный агент смог объяснить причину. Публично доступный и реально работающий LiteLLM встречается редко, а ошибка построения URL в сканере помечала живые хосты как мёртвые.
- Это операция, ведущаяся из Китая, на китайском языке и исключительно на китайской инфраструктуре. Все восстановленные временные метки файлов имеют смещение
+0800, рабочий язык везде китайский, а три хоста относятся к Alibaba Cloud, Tencent Cloud и сканирующей ВМ в Huawei Cloud. Высокая уверенность. - Инструментарий самописный и покрыт модульными тестами, а не взят из общедоступных наборов. К
litellm_verifier.pyприложены три файла тестов, в каталоге бэкапов лежитSHA256SUMS, а работа разбита на нумерованные раунды. Такая инженерная дисциплина нетипична для сканирования учётных данных. Высокая уверенность, на основе собственных файловых листингов оператора. - Они встраивают противодействие обману, и оно работает. Их верификатор отказывается считать успехом выдачу
/v1/models, требует реального chat completion по каждой модели, оценивает, соответствует ли ответ заявленному вендору, и в одном прогоне отнёс 20 из 41 проверенной записи модели к категорииhoneypot_or_unusable. Высокая уверенность. - Набор эксплойтов целиком n-day. Имена их файлов с результатами соотносятся с шестью рекомендациями 2026 года по LiteLLM, Sub2API и New-API, одна из которых входит в список CISA Known Exploited Vulnerabilities. Признаков собственных исследований уязвимостей нет. Высокая уверенность в отношении продуктов и техник, умеренная в отношении конкретной CVE для четырёх из шести, которые выведены из имён файлов, а не наблюдались.
- Версия о конкурсе не выдерживает сопоставления с каталогом результатов. Оператор говорит своему агенту, что объём работ ограничен только учётными данными по умолчанию, однако имена файлов в каталоге указывают на удалённое выполнение кода, SQL-инъекцию, инъекцию шаблонов, подделку запросов на стороне сервера, утечку токенов, переполнение квоты и обход Stripe-вебхука. У нас есть листинг, а не содержимое файлов, поэтому вопрос о мотивации остаётся открытым, но при любой трактовке оператор собрал и запустил этот инструментарий. Высокая уверенность в отношении артефактов, умеренная в отношении того, какая трактовка мотивации верна.
О названии
Мы отслеживаем эту активность как keyHunter, по каталогу проекта самого оператора /root/keyHunter-skill/.
Фреймворк агента, которым он управляет, называется Hermes, и Hermes, это реальный проект с открытым исходным кодом от Nous Research. Назвать актора по нему означало бы возложить на легитимный инструмент ответственность за чужие действия, поэтому мы так не делаем. То же относится к OpenClaw, второму фреймворку агента на этой машине. Оба, это обычное ПО, которое оператор установил и направил на чужую инфраструктуру.
Оператор
Оператор работает с трёх хостов, все на китайских облаках, с разделением задач между ними. 39.98.82[.]200 в Alibaba Cloud (AS37963) обслуживает шлюз агента и выполнил большую часть наблюдавшейся нами разведки. 101.43.41[.]72 в Tencent Cloud (AS45090), это релей, отдающий OpenAI-совместимый эндпоинт на порту 8087, к которому агент обращается за ёмкостью модели. У них общий JA4H-отпечаток po11nn070000_ebbca96fac43, который описывает, как клиент собирает свои HTTP-запросы, и сохраняется при смене адреса, а также самописные user agent Hermes-Agent/0.18.0 и Hermes-Panel/1.0 и единый общий идентификатор чат-сессии. Вместе это относит оба узла к одному оператору. Этот отпечаток не артефакт единичного захвата: он повторяется на протяжении активности с 16 по 20 августа, в рамках того же прочёсывания через FOFA.
Сканирование же происходит в третьем месте. С хоста Alibaba они выходят на ВМ в Huawei Cloud через локальный форвард:
ssh -o ServerAliveInterval=20 -i /root/.ssh/hw_vm_key -p 8888 developer@127.0.0.1 \
'cd /home/developer && /home/developer/.venv-us30/bin/python litellm_scan_us_30d_optimized.py'
Эта машина была в работе четыре дня и девять часов, имеет 7.5 ГБ ОЗУ и четыре ядра и запускает воркеры сканирования. Отделение шумного сканирования от фронтенда агента, это осознанный выбор, а имя hw_vm_key говорит, что оператор воспринимает её как машину Huawei.
Управление идёт через WeChat. Служба шлюза описывает себя как “Hermes Agent Gateway, Messaging Platform Integration”, и оператор ставит агенту задачи, переписываясь с ним в ветке WeChat. Долговременная память агента, это та самая переписка: он ищет по собственной истории чата, чтобы вспомнить, над чем работает. Второй фреймворк демонстрирует ту же схему, с сессией под именем openclaw-weixin. Потребительский мессенджер, это дешёвый канал управления: трафик шифруется по умолчанию и идёт в Tencent вместе с трафиком всех остальных пользователей WeChat, поэтому не срабатывает ничего из настроенного на обнаружение маячков command-and-control.
Движок рассуждений за всем этим, это github_copilot/gpt-5.6-sol, коммерческий помощник для написания кода, доступ к которому идёт через релей. В их конфигурации также прописаны опциональные ключи для нескольких других провайдеров. Наступательный код написан на Python самостоятельно; модель рассуждений, фреймворк агента и лежащий под ними канал управления через WeChat, это готовые потребительские продукты.
Конвейер
Их основной скилл описывает всю операцию одной строкой: “Discover, scan, verify, and archive publicly exposed AI API proxy panels (LiteLLM, Sub2API, New-API, One-API) using FOFA + keyHunter + custom verification scripts.”
FOFA search, per country
-> dedupe and normalise targets
-> light HTTP fingerprint
-> /v1/models listing
-> real chat completion per model
-> honeypot classification
-> weak-credential panel login, key extraction
-> export keys and accounts, archive
Обнаружение, это один запрос к FOFA, повторяемый для каждой страны:
(title="LiteLLM" || body="LiteLLM") && country="{cc}" && org!="AMAZON-AES"
Значение здесь имеет условие с исключением AWS. Оператор отфильтровывает Amazon в каждом прогоне, ещё не посмотрев ни на один хост. Блокировка диапазонов Shodan и Censys на периметре ничего не даёт против конвейера, построенного на чужих данных сканирования.
По странам они держат отдельные скрипты: litellm_scan_hw.py для США, litellm_scan_gb_hw.py, litellm_scan_it_hw.py, litellm_scan_us_30d_optimized.py с собственным виртуальным окружением и ещё один набор внутри keyHunter-skill/, охватывающий Австралию, Бразилию, Канаду, Францию, Индию, Нидерланды и Сингапур. Файлы результатов существуют для четырнадцати стран. Параллелизм составляет 48 легких воркеров и 12 глубоких, с отступом по rate limit на ответы 429 от FOFA и дедупликацией эндпоинтов по протоколу, хосту и порту.
FOFA API-ключ жёстко прописан в исходнике сканера, поэтому он у нас и есть. Запросы идут к неофициальному зеркалу FOFA на hamal.cc[.]cd, а исходящий трафик проходит через локальный прокси Squid.
Что реально даёт один прогон
| Страна | Цели в FOFA | Списки моделей | Доля попаданий |
|---|---|---|---|
| США | 10,447 | 64 | 0.61% |
| Китай | 6,329 | 83 | 1.31% |
| Южная Корея | 1,772 | 10 | 0.56% |
| Великобритания | 1,422 | 18 | 1.27% |
| Италия | 1,130 | 9 | 0.80% |
| Австралия, Индия, Бразилия | 6,073 | 10, из них 4 подтверждены | 0.16% |
Один захваченный прогон: 2,255 исходных строк из FOFA, 1,130 уникальных эндпоинтов после дедупликации, 9 сайтов, выдавших списки моделей, 8 подтверждённых, а на уровне запросов 41 успех по моделям против 8 неудач.
Собранная ими сводка по заголовкам в FOFA показывает, как выглядит открытая популяция. LiteLLM API - Swagger UI даёт 7,630 результатов. OmniRoute даёт 171, SillyTavern 170, LiteLLM Dashboard 156, Claude Code Hub 131, Aivar AI Gateway 11. Большая часть поверхности, это один продукт, и большая часть его открытых экземпляров, это автоматически сгенерированная страница документации API.
Мы оцениваем выход на дальнем конце как низкий в абсолютных величинах. litellm_extracted_keys.json фиксирует 43 экземпляра и 3 извлечённых ключа по 23 моделям. exported_keys.json содержит 17. Десятки тысяч прочёсанных хостов ради семнадцати ключей, это либо плохая отдача от затраченных усилий, либо аргумент в пользу того, что усилия дешёвы, потому что работу делает агент.
Противодействие обману: они охотятся на honeypot
Инженерная работа лучше всего видна в одном файле, litellm_verifier.py.
Он занимает десять килобайт и снабжён набором модульных тестов. Он отправляет реальный минимальный chat completion каждой модели, которую заявляет панель, и фиксирует успех только при корректном ответе OpenAI-образной формы choices/message/content либо при легитимном потоковом ответе с маркером завершения. Их собственное правило, в их собственной формулировке: один лишь успех по /models не считается никогда. Это закреплено в именах тестов, включая один под названием test_models_listing_alone_is_not_success. Кто-то написал регрессионный тест, чтобы их собственный инструмент не врал им про украденный ключ.
Счётчики вердиктов из одного прогона:
verdict_counts: honeypot_or_unusable 20 · trusted_pass 5 · unavailable 16
formatted_false_success_model_hits 29
non_chinese_evidence_count 13
total_questions 205
formatted_false_success, это заготовленный или продублированный ответ, именно так отвечает наивная приманка. non_chinese_evidence оценивает, ведёт ли себя модель как тот вендор, за которого себя выдаёт. Они также проводят допрос из пяти вопросов, 蜜罐五题测试, и в захваченном окне использовали его, чтобы пометить хост в лондонском диапазоне AWS как honeypot. Этот адрес мы не публикуем, потому что это чужой сенсор, и его раскрытие вывело бы его из строя.
Покупатель краденого инференса теперь исходит из того, что эндпоинт может быть ловушкой, и проверяет это. Встречная проверка, которая их выявляет, устроена так же, но наоборот: любой клиент, который просит ваш шлюз доказать, какую модель он на самом деле запускает, вопреки параметру API, проверяет товар.
Арсенал эксплойтов: исключительно n-day
Содержимое их файлов с результатами эксплуатации до нас не дошло. Имена файлов дошли, а их цели, это продукты с открытым исходным кодом и публичными рекомендациями по безопасности, поэтому эксплойты восстанавливаются из этих рекомендаций.
| Файл результатов на их хосте | CVE | Уязвимость | Основание |
|---|---|---|---|
litellm_host_header_bypass_results.json (568 KB) | CVE-2026-49468 | Обход аутентификации в LiteLLM через инъекцию заголовка Host, CVSS 9.8, до версии 1.84.0. Рассинхронизирует аутентификацию с маршрутизацией, открывая неаутентифицированный доступ к /key/generate и /user/new | Подтверждено: те же вызовы административной плоскости пришли на наш сенсор, и они предъявляли user agent CVE-2026-49468-Scanner |
litellm_sqli_apikey_results.json (517 KB), litellm_sqli_models.json | CVE-2026-42208 | Доаутентификационная SQL-инъекция в LiteLLM на пути аутентификации | Подтверждено: они девятнадцать раз отправляли ' OR '1'='1 в качестве ключа |
litellm_rce_exploit.json, litellm_mcp_rce_results.json | CVE-2026-42271 | Инъекция команд и удалённое выполнение кода в LiteLLM, CVSS 8.7, в списке CISA Known Exploited Vulnerabilities, версии с 1.74.2 по 1.83.6, включая вектор инъекции через MCP | Выведено из имени файла и продукта |
sub2api_cve_exploit.json и три последующие фазы | CVE-2026-27812 | Отравление сброса пароля в Sub2API через доверенные заголовки Host и Forwarded, ведущее к захвату аккаунта. Эксплуатируется в реальных атаках, до версии 0.1.85 | Выведено |
newapi_stripe_bypass_results.json, newapi_stripe_exploited.json, newapi_quota_overflow_results.json | CVE-2026-41432 | Обход проверки подписи Stripe-вебхука в New-API через пустой секрет, дающий неограниченную квоту без оплаты, до версии 0.12.10 | Выведено |
newapi_user_token_leak_results.json, oneapi_user_token_leak_results.json, newapi_ssrf_bypass_results.json | CVE-2026-30886 | Небезопасная прямая ссылка на объект и обход аутентификации в New-API на эндпоинте видео-прокси, раскрывающие контент других пользователей и позволяющие атакующему расходовать учётные данные жертвы на вышестоящих провайдерах | Выведено |
litellm_ssti_prompts_results.json | отдельной рекомендации нет | Серверная инъекция шаблонов Jinja2 против эндпоинтов промптов и шаблонов | Выведено |
Содержимое ни одного файла до нас не дошло; каждая строка опирается на имя файла. По двум из них мы независимо наблюдали, как техника приходит на наш собственный сенсор, это обход через заголовок Host и SQLi на пути аутентификации, что подтверждает технику, но не файл. Остальные четыре опираются на имя файла плюс известную рекомендацию по продукту, и это отмечено.
Схема во всех шести случаях одна. Все рекомендации относятся к 2026 году, несколько из них к одному и тому же квартал, и ничего из этого не является собственным исследованием. keyHunter промышленно эксплуатирует недавно раскрытые уязвимости высокой критичности в экосистеме LLM-прокси с открытым кодом сразу после их появления. Окно короткое, а класс ПО такой, который часто устанавливает один разработчик и затем оставляет без присмотра.
Мотивация: версия о конкурсе против каталога результатов
Оператор описывает это своему агенту как заявку на конкурс. Лексика последовательна на протяжении всей восстановленной переписки: 比赛项目 (конкурсный проект), 评委 (судьи), 答辩材料 (материалы для защиты), каталог contest-kit и работа, разбитая на 第一轮 и 第二轮, раунд один и раунд два.
На вопрос об объёме работ оператор прямо говорит, что цель, это учётные данные по умолчанию, в оригинале:
llm 的主要就是那几个默认密码为主流,用自己的 sk 那种没办法抓到啊
По LLM в основном рулят те несколько паролей по умолчанию; те, кто использует свои собственные ключи
sk-*, их никак не выцепить.
Агент соглашается и подтверждает, что попытки аутентификации ограничены тремя вариантами: без аутентификации, sk-test и sk-1234, причём последний, это ключ, который использует сама документация быстрого старта LiteLLM.
А затем есть /root/keyHunter-skill/results/. В его листинге перечислены файлы про удалённое выполнение кода, SQL-инъекцию, инъекцию шаблонов, подделку запросов на стороне сервера, перехват сессий против Sub2API, распыление учётных данных, утечку пользовательских токенов, переполнение квоты и два файла про обход Stripe-вебхука, один из которых newapi_stripe_exploited.json. У нас есть имена и для части файлов размеры; результаты обхода Stripe занимают 2.4 МБ, хотя их содержимое до нас не дошло. Обоснованно утверждать можно то, что оператор собрал и запустил против New-API инструментарий обхода оплаты с неограниченной квотой и что CVE-2026-41432, это реальная уязвимость именно такого рода. Являются ли эти 2.4 МБ записей завершёнными мошенническими пополнениями или только попытками, нам не видно. Слово _exploited в имени файла, это формулировка самого оператора; сами записи мы не читали.
Мы оставляем открытыми обе трактовки. Конкурс может быть настоящим, а эксплуатация, отдельным направлением работы, которое оператор не обсуждает с агентом, ведущим логи; либо конкурс может быть прикрытием операции по краже. Мы оцениваем это различие как несущественное для защищающихся: возможности и риск для открытой панели идентичны при любой трактовке.
Пробел в методике: агент самого оператора провёл аудит инструментария
Самый полезный фрагмент восстановленной переписки, это код-ревью. Оператор спросил своего агента, почему доля попаданий при сканировании такая низкая, и агент прошёл по сканеру строка за строкой.
Ответ агента, сжатый до того, что может использовать защищающийся: сканер подставляет протокол в поле host из FOFA, которое часто уже содержит протокол, получая URL вида https://https://<target>, из-за чего живые хосты записывались как мёртвые. Пул потоков собирает результаты в порядке создания, а не по мере готовности, поэтому один медленный запрос блокирует всё, что стоит за ним. CONCURRENCY=200 на четырёхъядерной машине сам создаёт себе таймауты. Дедупликация по IP отбрасывает другие валидные порты на том же адресе. Жёсткая фиксация temperature приводит к тому, что ошибка совместимости трактуется как неудача.
По их обнаружению honeypot агент высказался прямо: оно судит в основном по тому, идентичен ли ответ или короче пяти символов, что отсекает нормальные модели и пропускает хорошие приманки. И, несмотря на просьбу оператора выявлять некитайских респондентов, в коде вообще не было логики определения языка.
Он также отметил проблемы с их гигиеной безопасности: FOFA-ключ, жёстко прописанный в скрипте, абсолютные пути, написанные под /root, тогда как фактический пользователь, это /home/developer, except: pass, проглатывающий любую причину сбоя, отдельная копия скрипта под каждую страну и файлы результатов, содержащие цели и методы аутентификации без контроля доступа и редактирования.
Последний пункт меняет прочтение воронки. Доля попаданий 0.61% по США измеряет открытость через сканер с известными ошибками, поэтому реальная доля открытых экземпляров LiteLLM выше, чем показывают собственные результаты оператора. Теперь у него есть агент, который будет продолжать исправлять эти ошибки.
Инфраструктура монетизации
На том же хосте работает их собственный экземпляр New-API: calciumion/new-api:latest в Docker, опубликованный на порту 8901, с данными, смонтированными рядом с результатами сканирования. Вокруг него лежат newapi_watchdog.py, файл бэкапа каналов и упакованная копия всего этого.
New-API, это агрегирующая панель. Она берёт набор ключей вышестоящих провайдеров и представляет их как один API со своими пользовательскими аккаунтами и квотами. Развёртывание такой панели рядом с конвейером сбора ключей имеет очевидное назначение: собранные ключи становятся каналами в панели, а панель становится доступом, который можно продавать. Перепродажу мы не наблюдали и не утверждаем; инфраструктура для неё установлена и работает.
Сотни похожих бесплатных роутеров, построенных на шаблонах sub2api и new-api, уже циркулируют, и keyHunter, это одна операция внутри этой экосистемы.
Связи с кластером
Фингерпринтинг клиента связывает эти два хоста с рыхлым набором других, работающих по той же поверхности: тайваньский хост, выполняющий CVE-сканирование и выпуск ключей, гонконгский хост, отправляющий ту же SQL-инъекцию, и на шаг дальше, охотник за LLM-панелями и эксплуататор Ray-дашбордов, чьи однодневные всплески пришлись на 15 и 21 августа, с разницей в шесть дней. Совпадения местами приходятся на типовые клиентские стеки, поэтому это читается как общий инструментарий и общая среда, а не как одна рука за одной клавиатурой. Следует рассматривать это как связанное с Китаем сообщество, обменивающееся инструментарием для охоты на LLM-прокси. Ни один индикатор не связывает это с поименованной APT, поэтому мы отслеживаем это как кластер активности.
Индикаторы компрометации
Сеть и инфраструктура, деактивировано:
| Индикатор | Роль |
|---|---|
39.98.82[.]200 | Шлюз агента, разведка, SQL-инъекция (Alibaba Cloud, AS37963, CN) |
101.43.41[.]72 | Эндпоинт релея на порту 8087, делегированный воркер-субагент (Tencent Cloud, AS45090, CN) |
hamal.cc[.]cd | Неофициальное зеркало FOFA, к которому обращается сканер |
cae332848db5… | Собственный FOFA API-ключ оператора, жёстко прописанный в litellm_scan_hw.py. Здесь усечён; полное значение сохранено для передачи в FOFA, а не для публикации |
Отпечатки клиента и user agent:
po11nn070000_ebbca96fac43_00000000 shared across both nodes
Hermes-Agent/0.18.0
Hermes-Panel/1.0
Mozilla/5.0 (CVE-2026-49468-Scanner)
Артефакты на хостах. Это пути на машинах оператора, полезные для поиска похожего хоста или второго развёртывания:
/home/developer/litellm_verifier.py real-chat verifier and honeypot classifier
/home/developer/test_litellm_verifier.py unit tests
/home/developer/litellm_endpoint.py endpoint normalise and dedupe
/home/developer/litellm_scan_hw.py FOFA scanner, US, AWS excluded
/home/developer/litellm_scan_gb_hw.py
/home/developer/litellm_scan_it_hw.py
/home/developer/litellm_scan_us_30d_optimized.py
/home/developer/contest-kit/keyHunter-skill/
/home/developer/backups/litellm_verifier_round2_<ts>/SHA256SUMS
/root/keyHunter-skill/results/
/root/keyHunter-skill/{honeypot_test.py, verify_country_models.py, add_to_panel.py, report.py}
/root/.ssh/hw_vm_key key to the scanning VM, developer@127.0.0.1:8888
/opt/hermes-simple-panel/app.py config panel, port 9120
/root/new-api.tar.gz, /root/newapi_watchdog.py
Имена скиллов и проектов, самые сильные одиночные строки для пивотинга:
keyhunter / keyHunter
contest-kit
ai-proxy-panel-audit
fofa-panel-recon
delegation-orchestration
Поведенческие:
FOFA: (title="LiteLLM" || body="LiteLLM") && country="XX" && org!="AMAZON-AES"
auth: no credential, then sk-test, then sk-1234
SQLi: ' OR '1'='1 in the API key field
verify: a real chat completion per advertised model; a /models listing alone is rejected
verdict strings: honeypot_or_unusable, trusted_pass, unavailable,
formatted_false_success, non_chinese_evidence
services on actor infra: new-api :8901, config panel :9120, agent gateway
Обнаружение
Если у вас есть LLM-прокси, доступный из интернета, вся последовательность видна в собственных логах шлюза. В формате Sigma, вендоронезависимом формате правил, который умеет импортировать большинство SIEM-платформ:
title: AI proxy panel enumeration consistent with keyHunter
id: 2c6f9a41-8e07-4b53-9f1a-7d0c4b62ae35
status: experimental
description: >
The keyHunter discovery and verification sequence against an exposed LLM
proxy: an unauthenticated model listing followed by per-model chat
completions from the same source, or one of the cluster's user agents.
references:
- https://kinryu.sh/reports/keyhunter-llm-proxy-key-harvesting/
logsource:
category: webserver
detection:
model_listing:
cs-uri-stem|endswith:
- '/v1/models'
- '/models'
admin_paths:
cs-uri-stem|startswith:
- '/key/'
- '/user/'
- '/organization/'
cluster_agents:
c-useragent|contains:
- 'Hermes-Agent'
- 'Hermes-Panel'
- 'CVE-2026-49468-Scanner'
admin_allowlist:
c-ip|cidr: '10.0.0.0/8' # replace with your own admin range
condition: (((model_listing or admin_paths) and not admin_allowlist) or cluster_agents)
falsepositives:
- Client libraries that legitimately call /v1/models on startup from allow-listed ranges
level: high
Лог доступа веб-сервера не записывает заголовок Authorization, поэтому попытки с учётными данными по умолчанию и инъекции приходится ловить в собственном логировании запросов прокси: буквальные sk-1234 и sk-test, отсутствие учётных данных и ' OR '1'='1 в поле ключа.
Три поведенческих поиска, для которых не нужен движок правил:
- Ищите один источник, который запрашивает список ваших моделей и затем отправляет каждой из них по очереди ровно один короткий chat completion. Этот проверочный прогон, это подпись операции, и его трудно замаскировать.
- Настройте оповещение на промпты, требующие от модели назвать её настоящую идентичность вопреки параметру API, это та проверка, которую покупатель проводит перед тем, как доверять краденому доступу.
- Регулярно сравнивайте список каналов и таблицу пользователей вашей панели. Извлечение ключей и экспорт аккаунтов оставляют панель работающей нормально, поэтому больше ничто вам об этом не сообщит.
Что делать
Считайте любой LLM-прокси, доступный из интернета, скомпрометированным с момента открытия. keyHunter прочёсывает страну за день и отрабатывает опубликованные CVE в течение недель после раскрытия.
- Поставьте LiteLLM, One-API, New-API, Sub2API и всё подобное за обратный прокси с аутентификацией или в приватную сеть. Ни один из них не поставляется с настройками по умолчанию, пригодными для доступа из интернета.
- Обновитесь до актуальных версий. Из шести рекомендаций выше RCE в LiteLLM входит в список CISA Known Exploited Vulnerabilities, а захват аккаунта в Sub2API подтверждённо эксплуатируется в реальных атаках.
- Смените мастер-ключ.
sk-1234, это значение из документации быстрого старта самого LiteLLM, и это один из всего трёх наборов учётных данных, которые этот оператор вообще пробует. - Ограничьте доступ к
/openapi.jsonи/docs. Анонимный клиент не должен иметь возможности скачать поверхность вашего административного API. - Задайте бюджетный лимит и область действия для каждого виртуального ключа, чтобы извлечение давало нечто, не стоящее перепродажи.
- Если вы принимаете платежи Stripe через New-API, проверьте, что секрет подписи вебхука действительно задан. Пустой секрет, это и есть вся CVE-2026-41432.
- Ротируйте все ключи вышестоящих провайдеров, которые когда-либо находились в панели, чью закрытость вы не можете доказать.
Сопоставление с MITRE ATT&CK
| Тактика | Техника |
|---|---|
| Reconnaissance | T1596.005 Search Open Technical Databases: Scan Databases (FOFA, по странам, AWS исключён); T1595.002 Active Scanning: Vulnerability Scanning (лёгкое и глубокое HTTP-зондирование) |
| Resource Development | T1583.003 Acquire Infrastructure: Virtual Private Server (Alibaba, Tencent, Huawei); T1588.002 Obtain Capabilities: Tool (Hermes Agent, OpenClaw, подписка FOFA, github_copilot/gpt-5.6-sol в роли движка рассуждений) |
| Initial Access | T1190 Exploit Public-Facing Application (обход аутентификации через заголовок Host, доаутентификационная SQL-инъекция, инъекция команд, SSTI, SSRF против LiteLLM, Sub2API и New-API) |
| Defense Evasion | T1480 Execution Guardrails (классификация honeypot, оценка non_chinese_evidence, фильтрация org!="AMAZON-AES") |
| Credential Access | T1078.001 Valid Accounts: Default Accounts (без учётных данных, sk-test, sk-1234); T1552.001 Unsecured Credentials: Credentials In Files (извлечение ключей в exported_keys.json) |
| Discovery | T1518 Software Discovery (получение списка моделей и проверка по каждой модели); T1087 Account Discovery (перечисление пользователей через административную плоскость) |
| Collection | T1213 Data from Information Repositories (экспорт аккаунтов, нормализация, архивация) |
| Command and Control | T1102 Web Service (ветка WeChat как канал постановки задач) |
| Impact | T1657 Financial Theft (обход Stripe-вебхука, переполнение квоты); T1496 Resource Hijacking (инфраструктура перепродажи собранного инференса) |
Методология и замечания аналитиков
Практически весь материал выше, это вывод, который агент самого оператора отправил на один из наших honeypot между 16 и 20 августа 2026 года: 283 различных файловых пути, листинги сервисов и контейнеров, сводки результатов сканирования и собственные поисковые запросы агента по его памяти в WeChat.
То, что у нас есть, является, таким образом, подмножеством их реальной системы, ограниченным тем, что их агент по случаю перечислил. Содержимое ни одного файла до нас не дошло; у нас есть имена, размеры и временные метки из собственных каталожных листингов оператора. Результаты сканирования и счётчики вердиктов, это цифры самого оператора, выданные его инструментарием, и ни одну из них мы независимо не проверяли. Их агент нашёл реальные ошибки в их сканере, поэтому доли попаданий следует читать как нижнюю границу открытости, а не как её измерение.
Переписка на китайском языке дана в переводе. Технические строки, пути и идентификаторы оставлены дословно как в этом отчёте, так и в переводе.
Четыре ограничения на то, что этот материал подтверждает. Атрибуция останавливается на кластере активности на инфраструктуре в Китае с использованием китайского языка везде; связи с поименованной группой нет, и мы её не предлагаем. Мотивация действительно неоднозначна между заявкой на конкурс и операцией по краже. Содержимое ни одного файла эксплойта до нас не дошло, поэтому все шесть сопоставлений с CVE опираются на имена файлов; по двум из них техника независимо наблюдалась приходящей на наш сенсор, что подтверждает технику, но не файл. Был ли украденный ключ впоследствии израсходован, неизвестно: вывод оператора даёт только счётчики, 3 извлечено и 17 экспортировано, и ни одного значения ключа для отслеживания.
Сторонние адреса, к которым обращался их сканер, не публикуются, включая хост, который они сами помечали как honeypot и который принадлежит чьему-то исследованию. Их FOFA API-ключ здесь усечён.
Полные наборы индикаторов и исходные захваты доступны исследователям по запросу: contact@kinryu.sh.