このページは翻訳版です。正式な本文は英語版です。 英語版を読む
threat-actor · litellm · agentic-ai · credential-theft · china-nexus
keyHunter: 自らのツールキットを漏洩させた LLM プロキシキーのオペレーション
中国語話者のオペレーターが FOFA を使って露出した AI プロキシパネルをスイープし、ハニーポットを識別するために作られたユニットテスト付きのコードで検証し、API キーをエクスポートしている。そのエージェントは、自ホストの 283 件のファイルパス、スキャンの収量、WeChat のチャットログ、そして 2026 年の CVE 6 件にちなんで名付けられたエクスプロイトファイルが並ぶ results ディレクトリを、我々のハニーポットの 1 つに投稿した。そのうち 1 件は New-API の Stripe webhook バイパスだ。
著者 Davis Zheng·
TLP:CLEAR。公開可。以下のほぼすべてはオペレーター自身の資料であり、オペレーターのエージェントが我々のハニーポットの 1 つに投稿した出力から回収したものだ。指標は defang してある。つまり、攻撃者のアドレスは誤ってクリックしたり名前解決したりできない形で書かれている。スキャンの標的、オペレーターが判定した第三者ホスト 1 件、および彼らの FOFA API キーの完全な値は公表を控える。
エグゼクティブサマリー
- 27,173FOFA でスイープした候補ホスト
- 194モデルを一覧表示したホスト
- 17エクスポートされた API キー
- 6ファイル名から判明した 2026 年の CVE
中国語話者のオペレーターが、8 か国にまたがる 27,173 ホストを単一の標的のためにスイープしている。すなわち、背後に有効なキーを抱えたまま露出している AI プロキシパネルだ。AI プロキシパネルとは、1 組のプロバイダーキーを共有できるようにするために、開発チームが自社アプリケーションと有料モデルプロバイダーの間に置くソフトウェアであり、LiteLLM、One-API とそのフォークである New-API、Sub2API、Chat2API などがそれに当たる。パスワードなしでインターネット上に放置すれば、その背後にあるものはすべて見知らぬ第三者に消費可能となる。オペレーターは FOFA を使ってそれらを見つけ出す。FOFA はインターネット全体の継続的スキャンを検索対象とする検索エンジンで、Shodan の中国版に相当する。どのパネルがまだ応答するかを確認し、キーをエクスポートする。
これらの数値はオペレーター自身のもので、我々の推定ではなく彼らの結果ファイルから取り出したものだ。この 27,173 ホストのうち、モデルを一覧表示したのは 194、エクスポートファイルに到達したキーは 17 だった。最も明瞭な単一事例は米国での実行だ。投入した標的 10,447、得られたモデル一覧 64、ヒット率 0.61%。そしてその理由はオペレーター自身のエージェントが説明できた。公開状態で実際に呼び出せる LiteLLM は稀であり、加えてスキャナの URL 構築のバグが、生きているホストを死んでいると記録していた。
- これは中国を拠点とし、中国語で行われ、中国国内の基盤のみを使うオペレーションである。 回収したファイルのタイムスタンプはすべて
+0800、全体を通じた作業言語は中国語、3 つのホストは Alibaba Cloud、Tencent Cloud、および Huawei Cloud のスキャン用 VM だ。高い確信度。 - ツール群はコモディティではなく、独自開発されユニットテストを備えている。
litellm_verifier.pyには 3 つのテストファイルが付属し、backups ディレクトリにはSHA256SUMSがあり、作業は番号付きのラウンドに整理されている。この種のエンジニアリング規律は、資格情報スキャンでは珍しい。高い確信度。オペレーター自身のファイル一覧に基づく。 - 彼らは対デセプション機能を組み込んでおり、それは機能している。 検証器は
/v1/modelsの一覧取得を成功として数えることを拒み、モデルごとに実際のチャット補完を要求し、応答が自称するベンダーと一致するかをスコア化する。ある実行では、テストした 41 のモデルエントリのうち 20 をhoneypot_or_unusableに分類した。高い確信度。 - エクスプロイトキットは全面的に n-day だ。 結果ファイル名は、LiteLLM、Sub2API、New-API を対象とする 2026 年の 6 件のアドバイザリに対応し、そのうち 1 件は CISA の Known Exploited Vulnerabilities リストに載っている。独自の脆弱性研究を示すものは何もない。製品と手法については高い確信度、6 件のうち 4 件の具体的な CVE については中程度の確信度であり、これらは観測ではなくファイル名からの推定だ。
- 「コンテスト」という建前は、results ディレクトリと突き合わせると成立しない。 彼らはエージェントに対して対象はデフォルト資格情報のみだと述べているが、このディレクトリのファイル名はリモートコード実行、SQL インジェクション、テンプレートインジェクション、サーバーサイドリクエストフォージェリ、トークン漏洩、クォータのオーバーフロー、そして Stripe webhook バイパスを示している。我々が保有しているのはファイル本体ではなく一覧であるため、意図は未決のままだが、どちらの解釈をとってもオペレーターがそのツールを作成し実行したことは変わらない。アーティファクトについては高い確信度、意図のどちらの解釈が正しいかについては中程度。
名称について
我々はこれを、オペレーター自身のプロジェクトディレクトリ /root/keyHunter-skill/ にちなみ keyHunter として追跡している。
彼らが動かしているエージェントフレームワークは Hermes と呼ばれ、Hermes は Nous Research による実在のオープンソースプロジェクトだ。これにちなんでアクターを命名すれば、誰かがそのツールで行ったことの責任を正当なツールに負わせることになるため、我々はそうしない。同じことが、このホスト上の 2 つ目のエージェントフレームワークである OpenClaw にも当てはまる。どちらもオペレーターがインストールし、他人のインフラに向けただけの、ごく普通のソフトウェアだ。
オペレーター
オペレーターは 3 つのホストから作業しており、いずれも中国のクラウド上にあって、作業はそれらの間で分担されている。Alibaba Cloud (AS37963) 上の 39.98.82[.]200 はエージェントゲートウェイを稼働させ、我々が観測した偵察の大部分を実施した。Tencent Cloud (AS45090) 上の 101.43.41[.]72 はリレーで、ポート 8087 で OpenAI 互換のエンドポイントを提供し、エージェントがモデルの処理能力を得るために呼び出している。両者は JA4H フィンガープリント po11nn070000_ebbca96fac43 を共有している。これはクライアントが HTTP リクエストをどう組み立てるかを表すもので、アドレスが変わっても残る。加えて独自の Hermes-Agent/0.18.0 と Hermes-Panel/1.0 の user agent、そして単一の共有チャットセッション識別子も共有している。総合すると、これらは両ノードが単一のオペレーターの下にあることを示す。このフィンガープリントは 1 回の捕捉に限られたものではなく、8 月 16 日から 20 日の活動を通じて、同一の FOFA 駆動のスイープ上で繰り返し現れる。
スキャン自体はさらに別の場所で行われる。Alibaba のホストから、ローカルフォワード経由で Huawei Cloud の VM に到達する。
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'
このホストは稼働時間 4 日 9 時間、RAM 7.5 GB、4 コアで、スキャンワーカーを動かしている。騒がしいスキャンをエージェントのフロントエンドから分離しているのは意図的な選択であり、hw_vm_key という名前は、オペレーターがこれを Huawei のマシンとして認識していることを示している。
指揮統制は WeChat 上で行われる。ゲートウェイサービスは自身を “Hermes Agent Gateway, Messaging Platform Integration” と説明しており、オペレーターは WeChat のスレッド上でチャットすることでエージェントに指示を与える。エージェントの長期記憶はその会話そのものだ。自分が何に取り組んでいるかを思い出すために、自らのチャット履歴を検索する。2 つ目のフレームワークも同じパターンを示し、openclaw-weixin という名前のセッションを持つ。消費者向けメッセージングアプリは安価なコントロールチャネルになる。通信はデフォルトで暗号化され、他のあらゆる WeChat 利用者と一緒に Tencent へ流れるため、コマンド&コントロールのビーコンを狙って調整された検知には何も引っかからない。
すべての背後にある推論エンジンは github_copilot/gpt-5.6-sol で、リレー経由で到達する商用コーディングアシスタントだ。設定には他の複数プロバイダー向けのオプションのキーも組み込まれている。攻撃コードは独自の Python だが、推論モデル、エージェントフレームワーク、その下にある WeChat のコントロールチャネルはいずれも市販の消費者向け製品だ。
パイプライン
彼らのマスタースキルはオペレーション全体を 1 行で説明している。「FOFA + keyHunter + 独自の検証スクリプトを使い、公開状態で露出している AI API プロキシパネル (LiteLLM, Sub2API, New-API, One-API) を発見し、スキャンし、検証し、アーカイブする。」
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 の除外句だ。オペレーターは 1 ホストも見る前に、すべてのスイープから Amazon を除外している。他人のスキャンデータの上に構築されたパイプラインに対しては、自組織のエッジで Shodan や Censys のレンジをブロックしても何の役にも立たない。
国ごとに別個のスクリプトを保持している。米国向けの litellm_scan_hw.py、litellm_scan_gb_hw.py、litellm_scan_it_hw.py、独自の virtualenv を持つ litellm_scan_us_30d_optimized.py、さらに keyHunter-skill/ 配下にオーストラリア、ブラジル、カナダ、フランス、インド、オランダ、シンガポールを対象とする一式がある。結果ファイルは 14 か国分存在する。並行度は軽量ワーカー 48、深掘りワーカー 12 で、FOFA の 429 応答に対するレート制限バックオフを備え、エンドポイントの重複排除はプロトコル、ホスト、ポートをキーに行う。
FOFA の API キーはスキャナのソースにハードコードされており、そのおかげで我々の手元にある。スキャナは hamal.cc[.]cd にある非公式の FOFA ミラーに対して動作し、ローカルの 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% |
捕捉したある実行では、FOFA からの生データ 2,255 行、重複排除後のユニークなエンドポイント 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 インスタンス、23 モデルにまたがる抽出キー 3 件を記録している。exported_keys.json には 17 件が入っている。キー 17 件のために数万のホストをスイープしたことになり、これは労力に対する見返りが乏しいか、あるいはエージェントが作業しているので労力が安いという論拠のどちらかだ。
対デセプション: 彼らはハニーポットを狩る
エンジニアリングが最も明確に現れているのは litellm_verifier.py という 1 つのファイルだ。
サイズは 10 キロバイトで、ユニットテストスイートを伴う。パネルが広告するすべてのモデルに対して実際の最小限のチャット補完を送信し、OpenAI 形式の妥当な choices/message/content 応答、または done マーカーを伴う正当なストリーミング応答が返ったときにのみ成功として記録する。彼ら自身の言葉によるルールは、/models 単独の成功は決して数えないというものだ。テスト名がそれを体現しており、test_models_listing_alone_is_not_success という名前のものもある。盗んだキーについて自分のツールが自分に嘘をつかないよう、誰かがリグレッションテストを書いたわけだ。
ある 1 回の実行における判定の集計。
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 は、モデルが自称するベンダーらしく振る舞うかどうかをスコア化する。彼らは 5 問の尋問、蜜罐五题测试 も実行しており、捕捉した期間内にはそれを使って AWS ロンドンのレンジにあるホストをハニーポットとして判定していた。そのアドレスは他者のセンサーであり、名指しすればそれを焼くことになるため、我々は公表を控える。
盗まれた推論の買い手は、いまやエンドポイントが罠かもしれないと想定し、それを検査する。彼らを捕まえる逆方向の検査は同じテストを反転させたものだ。API のパラメータを無視して、実際にどのモデルを動かしているかを証明せよとゲートウェイに要求するクライアントは、商品の検品をしている。
エクスプロイトの兵器庫: 全面的に n-day
彼らのエクスプロイト結果ファイルの中身は我々の手元には届いていない。届いたのはファイル名だけだが、対象は公開アドバイザリを持つオープンソース製品であるため、エクスプロイト自体はアドバイザリから復元できる。
| ホスト上の結果ファイル | CVE | 脆弱性 | 根拠 |
|---|---|---|---|
litellm_host_header_bypass_results.json (568 KB) | CVE-2026-49468 | Host ヘッダインジェクションによる LiteLLM の認証バイパス、CVSS 9.8、1.84.0 未満。認証とルーティングを乖離させ、未認証での /key/generate と /user/new を可能にする | 裏付けあり: 同じ管理プレーンへの呼び出しが我々のセンサーに到来し、CVE-2026-49468-Scanner という user agent を提示していた |
litellm_sqli_apikey_results.json (517 KB)、litellm_sqli_models.json | CVE-2026-42208 | 認証パスにおける LiteLLM の事前認証 SQL インジェクション | 裏付けあり: キーとして ' OR '1'='1 を 19 回送信していた |
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 と後続の 3 フェーズ | CVE-2026-27812 | 信頼された Host および Forwarded ヘッダを介した Sub2API のパスワードリセット汚染で、アカウント乗っ取りに至る。実環境で悪用済み、0.1.85 未満 | 推定 |
newapi_stripe_bypass_results.json、newapi_stripe_exploited.json、newapi_quota_overflow_results.json | CVE-2026-41432 | 空のシークレットによる New-API の Stripe webhook 署名バイパスで、支払いなしに無制限のクォータを得られる、0.12.10 未満 | 推定 |
newapi_user_token_leak_results.json、oneapi_user_token_leak_results.json、newapi_ssrf_bypass_results.json | CVE-2026-30886 | video プロキシエンドポイントにおける New-API の安全でない直接オブジェクト参照および認証バイパス。他ユーザーのコンテンツを露出させ、攻撃者が上流で被害者の資格情報を消費できるようにする | 推定 |
litellm_ssti_prompts_results.json | 単一のアドバイザリなし | prompt および template エンドポイントに対する Jinja2 のサーバーサイドテンプレートインジェクション | 推定 |
いずれのファイルの中身も我々には届いておらず、各行はファイル名に依拠している。そのうち 2 件、Host ヘッダバイパスと認証 SQLi については、その手法が我々自身のセンサーに到来するのを独立に観測している。これが裏付けるのは手法であってファイルではない。残る 4 件はファイル名と製品の既知アドバイザリに依拠しており、そのように注記してある。
6 件すべてに共通するパターンは同じだ。アドバイザリはいずれも 2026 年のもので、複数は同一四半期に出ており、独自研究は一つもない。keyHunter は、オープンソースの LLM プロキシエコシステムで最近開示された高深刻度の欠陥を、公開された瞬間に大規模に運用する。これは短い窓であり、対象は開発者 1 人がインストールしてそのまま放置されがちな種類のソフトウェアだ。
意図: コンテストという物語と results ディレクトリ
オペレーターはこれを自身のエージェントに対してコンテストへの応募だと説明している。回収したチャット全体で語彙は一貫している。比赛项目 (コンテスト企画)、评委 (審査員)、答辩材料 (口頭審査用資料)、contest-kit ディレクトリ、そして第一轮、第二轮、すなわち第 1 ラウンドと第 2 ラウンドに整理された作業だ。
対象範囲を問われると、オペレーターは標的がデフォルト資格情報であることを明言している。原文は以下のとおり。
llm 的主要就是那几个默认密码为主流,用自己的 sk 那种没办法抓到啊
LLM 系については主流はもっぱらあの数個のデフォルトパスワードで、自分の
sk-*キーを使っているようなものは捕まえようがない。
エージェントはこれに同意し、認証試行が 3 通りに限られていることを確認している。認証なし、sk-test、sk-1234 であり、最後のものは LiteLLM 自身のクイックスタート文書が使っているキーだ。
そして /root/keyHunter-skill/results/ がある。その一覧には、リモートコード実行、SQL インジェクション、テンプレートインジェクション、サーバーサイドリクエストフォージェリ、Sub2API に対するセッションハイジャック、資格情報スプレー、ユーザートークン漏洩、クォータのオーバーフローに対応するファイル名が並び、Stripe webhook バイパスに対応するものが 2 つ、うち 1 つは newapi_stripe_exploited.json だ。我々が持っているのは名前と、一部のファイルについてはサイズだ。Stripe バイパスの結果は 2.4 MB に達するが、その中身は届いていない。擁護可能な言明は、オペレーターが New-API に対して無制限クォータの支払いバイパスツールを作成し実行したということ、そして CVE-2026-41432 がまさにその種の実在する脆弱性だということだ。その 2.4 MB のレコードが完了した不正チャージなのか、試行のみなのかは、我々には見えない。ファイル名の _exploited はオペレーター自身の言葉であり、我々はレコードを読んでいない。
我々は両方の解釈を開いたままにしている。コンテストは本物で、エクスプロイトはログを残すエージェントには話さない別の作業ラインなのかもしれない。あるいはコンテストが窃取オペレーションの隠れ蓑なのかもしれない。この区別は防御側にとって重要ではないと評価する。どちらの解釈でも、能力と、露出したパネルに対するリスクは同一だ。
トレードクラフトの穴: オペレーター自身のエージェントがツールキットを監査した
回収したチャットで最も有用な箇所はコードレビューだ。オペレーターはエージェントにスキャンのヒット率がなぜこれほど低いのかを尋ね、エージェントはスキャナを 1 行ずつ点検した。
防御側が使える範囲に要約したエージェントの回答はこうだ。スキャナは FOFA の host フィールドにプロトコルを前置するが、このフィールドはすでにプロトコルを含んでいることが多く、結果として https://https://<target> という形の URL が生成され、生きているホストが死んでいると記録されていた。スレッドプールは結果を完了順ではなく生成順に収集するため、遅いリクエスト 1 件がその後ろのすべてをブロックする。4 コアのマシンで CONCURRENCY=200 は自らタイムアウトを製造する。IP 単位の重複排除は、同一アドレス上の他の有効なポートを捨ててしまう。temperature を固定しているため、互換性エラーを失敗と誤読する。
ハニーポット検知についてエージェントは率直だった。判定は主に応答が同一かどうか、あるいは 5 文字未満かどうかに基づいており、これは正常なモデルを切り捨てつつ、出来のよいデコイを見逃す。さらに、オペレーターが中国語以外で応答するものを識別するよう求めていたにもかかわらず、コードには言語判定のロジックが一切含まれていなかった。
エージェントは彼らのセキュリティ衛生にも言及した。スクリプトにハードコードされた FOFA キー、実際のユーザーが /home/developer であるのに /root 向けに書かれた絶対パス、あらゆる失敗理由を飲み込む except: pass、国ごとに別コピーされたスクリプト、そしてアクセス制御も秘匿処理もないまま標的と認証方式を保持している結果ファイルだ。
最後の点はファネルの読み方を変える。米国の 0.61% というヒット率は、既知のバグを抱えたスキャナを通して露出を測ったものであり、実際に露出している LiteLLM の割合はオペレーター自身の結果が示すより高い。そして彼らはいま、そのバグを修正し続けるエージェントを手にしている。
収益化のためのインフラ
同一のホストは彼ら自身の New-API インスタンスも動かしている。Docker 上の calciumion/new-api:latest で、ポート 8901 で公開され、データはスキャン結果の隣に bind mount されている。その周辺には newapi_watchdog.py、チャネルのバックアップファイル、そして全体をまとめたアーカイブが置かれている。
New-API は集約パネルだ。上流プロバイダーのキーを大量に束ね、独自のユーザーアカウントとクォータを備えた単一の API として提示する。キー収集パイプラインの隣にそれを立てる目的は明白だ。収集したキーはパネルのチャネルになり、パネルは販売可能なアクセスになる。我々は転売を観測しておらず、それを主張もしない。ただし、そのための配管はインストールされ稼働している。
sub2api と new-api のテンプレートを基にした類似の無料ルーターが既に数百流通しており、keyHunter はそのエコシステムの中の 1 つのオペレーションだ。
クラスタの関連
クライアントのフィンガープリントは、この 2 ホストを同じ攻撃面を扱う他の緩やかな集合と結びつける。CVE スキャンとキー発行を行う台湾のホスト、同じ SQL インジェクションを投げる香港のホスト、そしてもう 1 ホップ外側に、LLM パネルのハンターと Ray ダッシュボードのエクスプロイターがいて、その単日のバーストは 8 月 15 日と 21 日、6 日の間隔で発生している。重なりの一部は汎用的なクライアントスタック上で成立しているため、これは 1 人が 1 台のキーボードを叩いているというより、ツールの共有とシーンの共有として読める。LLM プロキシ狩りのツールを共有する China-nexus のコミュニティとして扱うべきだ。名前の付いた APT に結びつける指標はないため、我々はこれをアクティビティクラスタとして追跡する。
侵害指標
ネットワークと基盤 (defang 済み)。
| 指標 | 役割 |
|---|---|
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)
ホスト上のアーティファクト。これらはオペレーターのマシン上のパスで、類似のホストや第 2 の展開を探すのに有用だ。
/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 プロキシを運用しているなら、この一連の流れはゲートウェイ自身のログに現れる。以下は、大半の SIEM プラットフォームがインポートできるベンダー中立のルール形式である Sigma で書いたものだ。
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
web のアクセスログは Authorization ヘッダを記録しないため、デフォルト資格情報とインジェクションの試行はプロキシ自身のリクエストログで捕まえる必要がある。リテラルの sk-1234 と sk-test、資格情報の欠落、そしてキー欄の ' OR '1'='1 だ。
ルールエンジンを必要としない 3 つの挙動ハンティング。
- モデル一覧を取得したうえで、各モデルに順番にちょうど 1 回ずつ短いチャット補完を送る単一の送信元を探す。この検証スイープはこのオペレーションの特徴であり、隠すのが難しい。
- API のパラメータを無視してモデルに本当の正体を述べさせようとするプロンプトでアラートを上げる。これは買い手が盗んだアクセスを信用する前に走らせる検査だ。
- パネルのチャネル一覧とユーザーテーブルを定期的に差分比較する。キー抽出とアカウントのエクスポートはパネルを正常に動作させたまま行われるため、他に気づかせてくれるものはない。
取るべき対応
インターネットに露出している LLM プロキシは、露出した時点で侵害されたものとして扱う。keyHunter は 1 か国を 1 日でスイープし、公開された CVE を開示から数週間のうちに使う。
- LiteLLM、One-API、New-API、Sub2API、および類似のものはすべて、認証を行うリバースプロキシの背後か、プライベートネットワーク上に置く。いずれもインターネット露出に耐えられる既定設定では出荷されていない。
- 最新版までパッチを適用する。上記 6 件のアドバイザリのうち、LiteLLM の RCE は CISA Known Exploited Vulnerabilities リストに載っており、Sub2API のアカウント乗っ取りは実環境での悪用が確認されている。
- マスターキーを変更する。
sk-1234は LiteLLM 自身のクイックスタートにある値で、このオペレーターがわざわざ試す 3 つの資格情報のうちの 1 つだ。 /openapi.jsonと/docsを制限する。匿名のクライアントが管理用 API の全体像をダウンロードできてはならない。- すべての仮想キーに予算上限とスコープを設定し、抽出されても転売する価値のないものにする。
- New-API 経由で Stripe 決済を受けているなら、webhook の署名シークレットが実際に設定されているか確認する。空のシークレットが CVE-2026-41432 のすべてだ。
- 一度も露出していないと証明できないパネルに置かれたことのある上流プロバイダーキーは、すべてローテーションする。
MITRE ATT&CK マッピング
| 戦術 | 手法 |
|---|---|
| 偵察 | T1596.005 Search Open Technical Databases: Scan Databases (FOFA、国別、AWS 除外); T1595.002 Active Scanning: Vulnerability Scanning (軽量および深掘りの HTTP プローブ) |
| リソース開発 | 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) |
| 初期アクセス | T1190 Exploit Public-Facing Application (LiteLLM、Sub2API、New-API に対する Host ヘッダ認証バイパス、事前認証 SQL インジェクション、コマンドインジェクション、SSTI、SSRF) |
| 防御回避 | T1480 Execution Guardrails (ハニーポット分類、non_chinese_evidence のスコアリング、org!="AMAZON-AES" によるフィルタリング) |
| 資格情報アクセス | T1078.001 Valid Accounts: Default Accounts (資格情報なし、sk-test、sk-1234); T1552.001 Unsecured Credentials: Credentials In Files (exported_keys.json へのキー抽出) |
| 探索 | T1518 Software Discovery (モデル一覧取得とモデルごとの検証); T1087 Account Discovery (管理プレーンに対するユーザー列挙) |
| 収集 | T1213 Data from Information Repositories (アカウントのエクスポート、正規化、アーカイブ) |
| コマンド&コントロール | T1102 Web Service (タスク付与チャネルとしての WeChat スレッド) |
| 影響 | T1657 Financial Theft (Stripe webhook バイパス、クォータのオーバーフロー); T1496 Resource Hijacking (収集した推論の転売用配管) |
手法とアナリストノート
上記のほぼすべては、オペレーター自身のエージェントが 2026 年 8 月 16 日から 20 日の間に我々のハニーポットの 1 つに投稿した出力だ。283 件の異なるファイルパス、サービスとコンテナの一覧、スキャン結果の要約、そしてエージェント自身による WeChat 記憶の検索である。
したがって我々が保有しているのは彼らの実システムの部分集合であり、彼らのエージェントが偶然列挙した範囲に限られる。いずれのファイルの中身も届いていない。我々の手元にあるのは、オペレーター自身のディレクトリ一覧から得た名前、サイズ、タイムスタンプだ。スキャンの収量と判定の集計はオペレーター自身の数値で、彼らのツールが報告したものであり、我々はそのいずれも独立に検証していない。彼らのエージェントはスキャナに実際のバグを見つけているため、ヒット率は露出の測定値ではなく下限として読むべきだ。
中国語のチャットは翻訳してある。技術的な文字列、パス、識別子は、本レポートと翻訳の双方で原文のまま残している。
本稿が支持できる範囲には 4 つの限界がある。アトリビューションは、全体を通じて中国語を使い中国拠点の基盤上で動くアクティビティクラスタまでで止まる。名前の付いたグループへの結びつきはなく、我々もそれを提示しない。意図はコンテストへの応募と窃取オペレーションの間で本当に曖昧だ。いずれのエクスプロイトファイルの中身も届いていないため、6 件の CVE マッピングはすべてファイル名に依拠する。うち 2 件については手法が我々のセンサーに到来するのを独立に観測しており、それが裏付けるのはファイルではなく手法だ。盗まれたキーがその後使われたかは不明だ。オペレーターの出力が与えるのは件数、すなわち抽出 3 件とエクスポート 17 件のみで、追跡できるキーの値はない。
彼らのスキャナが接触した第三者のアドレスは公表を控えている。これには彼ら自身がハニーポットと判定したホストも含まれ、そのホストは他者の研究に属する。彼らの FOFA API キーは本稿では切り詰めてある。
完全な指標セットと元となる捕捉データは、要請に応じて研究者に提供する。連絡先は contact@kinryu.sh。