threat-actor · litellm · agentic-ai · credential-theft · china-nexus
keyHunter: 자기 툴킷을 유출한 LLM 프록시 키 수집 작전
중국어를 쓰는 운영자가 FOFA로 노출된 AI 프록시 패널을 훑고, 허니팟을 식별하도록 만들어진 단위 테스트 코드로 이를 검증한 뒤 API 키를 내보낸다. 그들의 에이전트는 Kinryū Labs 미끼의 도구 호출을 자기 호스트에서 실행했고, 파일 경로 283개, 스캔 결과, 위챗 대화 로그, 그리고 2026년 CVE 여섯 건의 이름을 딴 익스플로잇 파일들이 담긴 결과 디렉터리를 되돌려 보냈으며 그중에는 New-API Stripe 웹훅 우회도 있다.
작성자 Davis Zheng·
TLP:CLEAR. 공개 승인됨. 아래 내용 대부분은 운영자 본인의 자료로, 그들의 에이전트가 Kinryū Labs 미끼의 도구 호출을 자기 호스트에서 실행하고 그 출력을 되돌려 보냈을 때 복구한 것이다. 지표는 무력화되어 있으며, 이는 공격자 주소를 실수로 클릭하거나 해석할 수 없도록 표기했다는 뜻이다. 스캔 대상, 운영자가 플래그한 제3자 호스트 하나, 그리고 그들의 FOFA API 키 전체는 공개하지 않는다.
핵심 요약
- 27,173FOFA로 훑은 후보 호스트
- 194모델을 표시한 호스트
- 17내보낸 API 키
- 6파일명 기준 2026년 CVE
중국어를 쓰는 운영자가 여덟 개국에 걸친 호스트 27,173개를 단 하나의 표적을 위해 훑었다. 그 배후에 살아 있는 키가 있는, 노출된 AI 프록시 패널이다. AI 프록시 패널은 하나의 제공자 키 묶음을 공유할 수 있도록 팀들이 자기 애플리케이션과 유료 모델 제공자 사이에 두는 소프트웨어로, LiteLLM, One-API와 그 포크인 New-API, Sub2API, Chat2API 같은 것들이다. 그 하나를 비밀번호 없이 인터넷에 올려 두면, 그 뒤에 있는 모든 것을 낯선 이들이 쓸 수 있게 된다. 운영자는 이를 FOFA를 통해 찾아내는데, FOFA는 끊임없는 인터넷 전역 스캐닝을 기반으로 한 검색 엔진이자 Shodan의 중국판이다. 그런 다음 어떤 패널이 아직 응답하는지 확인하고 키를 내보낸다.
이 수치들은 운영자 본인의 것으로, 우리가 추정한 것이 아니라 그들의 결과 파일에서 뽑아낸 것이다. 그 27,173개 호스트 중 194개가 모델을 표시했고, 키 17개가 그들의 내보내기 파일에 도달했다. 미국 대상 실행이 가장 명확한 단일 사례다. 표적 10,447개가 들어가 모델 표시 64건이 나왔고, 적중률은 0.61%였으며, 그 이유는 그들 자신의 에이전트가 말해 줄 수 있었다. 공개적으로 노출되고 실제로 호출 가능한 LiteLLM은 드물고, 그들의 스캐너에 있던 URL 구성 버그가 살아 있는 호스트를 죽은 것으로 표시하고 있었다.
- 이것은 중국 기반, 중국어 사용 작전이며 중국 전용 인프라 위에서 이루어진다. 복구된 모든 파일 타임스탬프는
+0800이고, 처음부터 끝까지 작업 언어는 중국어이며, 세 호스트는 Alibaba Cloud, Tencent Cloud, 그리고 Huawei Cloud 스캐닝 VM이다. 높은 확신. - 이 도구는 기성품이 아니라 맞춤 제작에 단위 테스트까지 되어 있다.
litellm_verifier.py는 테스트 파일 세 개와 함께 배포되고, 백업 디렉터리에는SHA256SUMS가 있으며, 작업은 번호가 매겨진 라운드로 정리되어 있다. 그러한 엔지니어링 규율은 자격 증명 스캐닝에서 흔치 않다. 높은 확신, 운영자 본인의 파일 목록에서 취함. - 그들은 기만 대응 장치를 내장하며, 그것은 작동한다. 그들의 검증기는
/v1/models목록을 성공으로 치기를 거부하고, 모델마다 실제 채팅 완성을 요구하며, 응답이 그것이 주장하는 벤더와 일치하는지 채점하고, 한 번의 실행에서 시험한 모델 항목 41개 중 20개를honeypot_or_unusable로 분류했다. 높은 확신. - 익스플로잇 키트는 전적으로 n-day다. 그들의 결과 파일명은 LiteLLM, Sub2API, New-API를 겨냥한 2026년 권고 여섯 건에 대응하며, 그중 하나는 CISA의 알려진 악용 취약점 목록에 올라 있다. 독자적 취약점 연구를 시사하는 것은 전혀 없다. 제품과 기법에 대해서는 높은 확신, 여섯 건 중 네 건의 구체적 CVE에 대해서는 중간 확신이며, 이는 관측된 것이 아니라 파일명에서 추론한 것이다.
- 경쟁 프로젝트라는 설정은 결과 디렉터리와 마주하면 살아남지 못한다. 그들은 자기 에이전트에게 범위가 기본 자격 증명뿐이라고 말하지만, 그 디렉터리의 파일명들은 원격 코드 실행, SQL 인젝션, 템플릿 인젝션, 서버 측 요청 위조, 토큰 유출, 쿼터 초과, 그리고 Stripe 웹훅 우회를 가리킨다. 우리는 파일 본문이 아니라 그 목록을 쥐고 있으므로 의도는 열린 채로 남지만, 어느 해석 아래에서든 운영자는 그 도구를 만들어 실행했다. 산출물에 대해서는 높은 확신, 의도에 대한 어느 해석이 옳은지에 대해서는 중간 확신.
이름에 관하여
우리는 이를 운영자 본인의 프로젝트 디렉터리인 /root/keyHunter-skill/을 따서 keyHunter로 추적한다.
그들이 구동하는 에이전트 프레임워크는 Hermes라 불리며, Hermes는 Nous Research가 만든 실재하는 오픈소스 프로젝트다. 그 이름을 따서 행위자를 명명하면 누군가가 정당한 도구로 저지른 일을 그 도구 탓으로 돌리는 셈이 되므로, 우리는 그렇게 하지 않는다. 같은 원칙이 이 상자에 있던 두 번째 에이전트 프레임워크인 OpenClaw에도 적용된다. 둘 다 운영자가 설치해 남의 인프라를 겨누도록 한 평범한 소프트웨어다.
운영자
운영자는 세 호스트에서 작업하며, 모두 중국 클라우드에 있고 작업은 이들 사이에 나뉘어 있다. Alibaba Cloud(AS37963)의 39.98.82[.]200은 에이전트 게이트웨이를 돌리며 우리가 본 정찰 대부분을 수행했다. Tencent Cloud(AS45090)의 101.43.41[.]72는 릴레이로, 에이전트가 모델 용량을 위해 호출하는 OpenAI 호환 엔드포인트를 포트 8087에서 제공한다. 이들은 JA4H 지문 po11nn070000_ebbca96fac43을 공유하는데, 이 지문은 클라이언트가 자신의 HTTP 요청을 어떻게 조립하는지를 기술하며 주소가 바뀌어도 유지된다. 여기에 더해 맞춤형 Hermes-Agent/0.18.0 및 Hermes-Panel/1.0 사용자 에이전트와 단일 공유 채팅 세션 식별자도 공유한다. 이를 종합하면 두 노드가 한 운영자 아래 놓인다. 그 지문은 단 한 번의 포착에서 나온 산물이 아니다. 서로 다른 지역의 별개 센서 두 곳이 8월 16일부터 20일 사이에 이를 독립적으로 기록했으며, 두 번 모두 동일한 FOFA 기반 스윕에서였다.
스캐닝은 또 다른 곳에서 이루어진다. Alibaba 호스트에서 그들은 로컬 포워드를 통해 Huawei Cloud VM에 도달한다.
ssh -o ServerAliveInterval=20 -i /root/.ssh/hw_vm_key -p 8888 [email protected] \
'cd /home/developer && /home/developer/.venv-us30/bin/python litellm_scan_us_30d_optimized.py'
그 상자는 4일 9시간 동안 가동되어 있었고, RAM 7.5 GB와 코어 네 개를 가지며, 스캔 워커를 돌린다. 시끄러운 스캐닝을 에이전트 프런트엔드에서 분리한 것은 의도적인 선택이며, hw_vm_key라는 이름은 운영자가 이를 Huawei 상자로 여긴다는 것을 말해 준다.
제어는 위챗을 통해 이루어진다. 게이트웨이 서비스는 스스로를 “Hermes Agent Gateway, Messaging Platform Integration”이라 소개하며, 운영자는 위챗 스레드에서 에이전트에게 대화를 걸어 작업을 지시한다. 에이전트의 장기 기억은 바로 그 대화다. 자신이 무슨 작업을 하고 있는지 떠올리기 위해 자기 채팅 이력을 검색한다. 두 번째 프레임워크도 openclaw-weixin이라는 이름의 세션으로 같은 패턴을 보인다. 소비자용 메시징 앱은 값싼 제어 채널이 된다. 트래픽은 기본적으로 암호화되고 다른 모든 위챗 사용자와 나란히 Tencent로 흘러가므로, 명령·제어 비커닝에 맞춰진 그 무엇에도 걸리지 않는다.
이 모든 것의 배후에 있는 추론 엔진은 github_copilot/gpt-5.6-sol로, 릴레이를 통해 도달하는 상용 코딩 어시스턴트다. 그들의 구성은 다른 여러 제공자에 대한 선택적 키도 함께 연결해 둔다. 공격 코드는 맞춤 제작한 파이썬이며, 그 아래에 있는 추론 모델, 에이전트 프레임워크, 위챗 제어 채널은 모두 기성 소비자용 제품이다.
파이프라인
그들의 마스터 스킬은 작전 전체를 한 줄로 기술한다. “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, 자체 virtualenv를 갖춘 litellm_scan_us_30d_optimized.py, 그리고 오스트레일리아, 브라질, 캐나다, 프랑스, 인도, 네덜란드, 싱가포르를 아우르는 keyHunter-skill/ 아래의 또 다른 세트다. 결과 파일은 열네 개국에 대해 존재한다. 동시성은 경량 워커 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은 모델 23개에 걸쳐 인스턴스 43개와 추출된 키 3개를 기록한다. exported_keys.json은 17개를 담고 있다. 키 열일곱 개를 위해 수만 개의 호스트를 훑은 셈이며, 이는 들인 노력에 비해 초라한 수익이거나, 아니면 에이전트가 그 일을 하고 있으니 노력이 값싸다는 논거 중 하나다.
기만 대응: 그들은 허니팟을 사냥한다
엔지니어링은 한 파일 litellm_verifier.py에서 가장 뚜렷하게 드러난다.
그것은 10킬로바이트이며 단위 테스트 스위트를 갖추고 있다. 이는 패널이 광고하는 모든 모델에 실제 최소 채팅 완성을 보내고, 유효한 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 런던 대역의 한 호스트를 허니팟으로 플래그했다. 우리는 그 주소를 공개하지 않는데, 그것은 다른 누군가의 센서이고 이름을 밝히면 그것을 태워 버리기 때문이다.
훔친 추론의 구매자는 이제 엔드포인트가 함정일 수 있다고 가정하고 이를 시험하며, 이 때문에 이 표면에서 저상호작용 미끼는 거의 쓸모없어진다. 그들을 잡아내는 역검사는 같은 시험을 거꾸로 돌린다. 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 사용자 에이전트를 제시했다 |
litellm_sqli_apikey_results.json (517 KB), litellm_sqli_models.json | CVE-2026-42208 | 인증 경로에서의 LiteLLM 사전 인증 SQL 인젝션 | 확증됨: 그들은 우리 키 필드에 ' OR '1'='1을 열아홉 번 쏘았다 |
litellm_rce_exploit.json, litellm_mcp_rce_results.json | CVE-2026-42271 | LiteLLM 명령 인젝션 및 원격 코드 실행, CVSS 8.7, CISA 알려진 악용 취약점 목록에 등재, 1.74.2에서 1.83.6까지, MCP 인젝션 벡터 포함 | 파일명과 제품에서 추론 |
sub2api_cve_exploit.json 및 이후 세 단계 | 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 웹훅 서명 우회로, 결제 없이 무제한 쿼터를 부여, 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 디렉터리, 그리고 第一轮과 第二轮, 즉 1라운드와 2라운드로 정리된 작업이다.
범위를 묻자 운영자는 표적이 기본 자격 증명임을 원문에서 명확히 한다.
llm 的主要就是那几个默认密码为主流,用自己的 sk 那种没办法抓到啊
LLM 쪽은 주로 그 몇 개의 기본 비밀번호가 대세이고, 자기
sk-*키를 쓰는 그런 것들은 잡아낼 방법이 없다.
에이전트는 동의하며, 인증 시도가 세 경우로 국한됨을 확인한다. 인증 없음, sk-test, 그리고 sk-1234인데, 마지막 것은 LiteLLM 자체 퀵스타트 문서가 사용하는 키다.
그다음으로 /root/keyHunter-skill/results/가 있다. 그 목록은 원격 코드 실행, SQL 인젝션, 템플릿 인젝션, 서버 측 요청 위조, Sub2API를 겨냥한 세션 하이재킹, 자격 증명 스프레이, 사용자 토큰 유출, 쿼터 초과에 대한 파일들, 그리고 Stripe 웹훅 우회에 대한 두 파일의 이름을 담고 있으며, 그중 하나가 newapi_stripe_exploited.json이다. 우리는 이름을, 그리고 일부에 대해서는 크기를 가지고 있다. Stripe 우회 결과는 2.4 MB에 이르지만, 그 내용은 우리에게 도달하지 않았다. 방어 가능한 진술은 운영자가 New-API를 상대로 무제한 쿼터 결제 우회 도구를 만들어 실행했다는 것, 그리고 CVE-2026-41432가 정확히 그런 종류의 실재하는 취약점이라는 것이다. 그 2.4 MB의 레코드가 완료된 부정 충전인지 아니면 시도에 그친 것인지는 우리로서는 볼 수 없다. 파일명의 _exploited는 운영자가 그것을 가리킨 말이며, 우리는 그 레코드를 읽지 않았다.
우리는 두 해석을 모두 열어 둔다. 경쟁은 진짜이고 익스플로잇은 운영자가 로그를 남기는 에이전트와는 논하지 않는 별개의 작업 흐름일 수도 있고, 아니면 경쟁이 절도 작전을 위한 위장일 수도 있다. 우리는 그 구분이 방어자에게는 무의미하다고 평가한다. 어느 해석 아래에서든 그 역량과 노출된 패널에 대한 위험은 동일하다.
수법의 허점: 운영자 자신의 에이전트가 툴킷을 감사했다
복구된 채팅에서 가장 유용한 대목은 코드 리뷰다. 운영자는 자기 에이전트에게 스캔 적중률이 왜 그렇게 낮은지 물었고, 에이전트는 스캐너를 한 줄 한 줄 훑었다.
방어자가 쓸 수 있는 것으로 압축한 에이전트의 답변은 이렇다. 스캐너는 이미 프로토콜을 담고 있기 일쑤인 FOFA host 필드에 프로토콜을 앞에 덧붙여 https://https://<target> 형태의 URL을 만들어 내고, 그래서 살아 있는 호스트가 죽은 것으로 기록되고 있었다. 스레드 풀은 결과를 완료되는 대로가 아니라 생성 순서로 수집하므로, 느린 요청 하나가 그 뒤의 모든 것을 막는다. 코어 네 개짜리 상자에서 CONCURRENCY=200은 스스로 타임아웃을 만들어 낸다. IP로 중복 제거하면 같은 주소의 다른 유효 포트를 버린다. temperature를 고정하면 호환성 오류를 실패로 오인한다.
그들의 허니팟 탐지에 대해 에이전트는 단도직입적이었다. 그것은 주로 응답이 동일한지 아니면 다섯 글자보다 짧은지로 판단하는데, 이는 정상 모델을 죽이고 좋은 미끼를 놓친다. 그리고 운영자가 중국어가 아닌 응답자를 식별하라고 요청했음에도, 코드에는 언어 탐지 로직이 전혀 없었다.
에이전트는 그들의 보안 위생도 지적했다. 스크립트에 하드코딩된 FOFA 키, 실제 사용자는 /home/developer인데도 /root용으로 작성된 절대 경로, 모든 실패 사유를 삼켜 버리는 except: pass, 국가별로 따로 둔 스크립트 사본, 그리고 접근 제어나 편집 없이 표적과 인증 방법을 담고 있는 결과 파일이다.
그 마지막 지점은 깔때기를 다시 짜맞춘다. 0.61%의 미국 적중률은 알려진 버그가 있는 스캐너를 통한 노출을 측정하므로, 노출된 LiteLLM의 실제 비율은 운영자 자신의 결과가 보여 주는 것보다 더 높다. 이제 그들에게는 그 버그들을 계속 고쳐 줄 에이전트가 있다.
수익화 인프라
같은 호스트가 그들 자신의 New-API 인스턴스를 돌린다. Docker의 calciumion/new-api:latest이며, 포트 8901에 게시되어 있고, 데이터는 스캔 결과 옆에 바인드 마운트되어 있다. 그 주위에는 newapi_watchdog.py, 채널 백업 파일, 그리고 그 전체를 패킹한 사본이 자리한다.
New-API는 집계 패널이다. 상류 제공자 키 한 무더기를 받아 자체 사용자 계정과 쿼터를 갖춘 하나의 API로 제시한다. 이를 키 수집 파이프라인 옆에 세워 두는 데에는 명백한 목적이 있다. 수집된 키는 패널의 채널이 되고, 그 패널은 팔 수 있는 접근권이 된다. 우리는 재판매를 관측하지 않았고 이를 주장하지도 않는다. 다만 그것을 위한 배관이 설치되어 돌아가고 있다.
sub2api와 new-api 템플릿 위에 만들어진 비슷한 무료 라우터 수백 개가 이미 유통되고 있으며, keyHunter는 그 생태계 안의 한 작전이다.
클러스터 연관
클라이언트 지문은 이 두 호스트를 같은 표면을 작업하는 느슨한 무리와 연결한다. CVE 스캔과 키 발급을 돌리는 대만 호스트, 같은 SQL 인젝션을 던지는 홍콩 호스트, 그리고 한 홉 더 바깥으로, 하루짜리 활동 폭발이 엿새 간격으로 8월 15일과 21일에 떨어진 LLM 패널 헌터와 Ray 대시보드 익스플로이터가 그것이다. 겹치는 부분은 곳곳에서 범용 클라이언트 스택으로 돌아가므로, 이는 한 키보드 앞의 한 손이라기보다 공유된 도구와 공유된 판으로 읽힌다. 이를 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에 신고하기 위해 보관해 두었다 |
클라이언트 지문과 사용자 에이전트:
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, [email protected]: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
웹 액세스 로그는 Authorization 헤더를 기록하지 않으므로, 기본 자격 증명과 인젝션 시도는 프록시 자체의 요청 로깅에서 잡아야 한다. 리터럴 sk-1234와 sk-test, 없는 자격 증명, 그리고 키 필드의 ' OR '1'='1이다.
규칙 엔진이 필요 없는 세 가지 행위 기반 사냥:
- 당신의 모델을 목록으로 뽑은 뒤 그 각각에 정확히 하나의 짧은 채팅 완성을 차례로 보내는 단일 소스를 찾으라. 그 검증 스윕은 이 작전의 서명이며 위장하기 어렵다.
- API 파라미터를 무시하고 모델에게 실제 정체를 밝히라고 요구하는 프롬프트에 경보를 걸라. 이는 구매자가 훔친 접근권을 신뢰하기 전에 실행하는 검사다.
- 당신 패널의 채널 목록과 사용자 테이블을 주기적으로 대조하라. 키 추출과 계정 내보내기는 패널을 정상적으로 작동하게 남겨 두므로, 그 밖의 어떤 것도 당신에게 알려 주지 않는다.
해야 할 일
인터넷에 노출된 LLM 프록시는 무엇이든 노출된 시점에 침해된 것으로 취급하라. keyHunter는 하루에 한 나라를 훑고, 공개된 CVE를 공개로부터 몇 주 안에 작업한다.
- LiteLLM, One-API, New-API, Sub2API, 그리고 유사한 것은 무엇이든 인증하는 리버스 프록시 뒤에 두거나 사설 네트워크에 두라. 그중 어느 것도 인터넷 노출에 대해 방어 가능한 기본값을 제공하지 않는다.
- 현행 버전으로 패치하라. 위 여섯 권고 중 LiteLLM RCE는 CISA 알려진 악용 취약점 목록에 올라 있고, Sub2API 계정 탈취는 실제 환경에서 악용이 확인되었다.
- 마스터 키를 바꾸라.
sk-1234는 LiteLLM 자체 퀵스타트의 값이며, 이 운영자가 굳이 시도하는 세 자격 증명 중 하나다. /openapi.json과/docs를 제한하라. 익명 클라이언트가 당신의 관리 API 표면을 내려받을 수 있어서는 안 된다.- 모든 가상 키에 예산 상한을 두고 범위를 좁혀, 추출해 봐야 재판매할 가치가 없는 것이 나오게 하라.
- New-API를 통해 Stripe 결제를 받는다면, 웹훅 서명 시크릿이 실제로 설정되어 있는지 확인하라. 빈 시크릿이 곧 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 (LiteLLM, Sub2API, New-API를 겨냥한 Host 헤더 인증 우회, 사전 인증 SQL 인젝션, 명령 인젝션, SSTI, SSRF) |
| Defense Evasion | T1480 Execution Guardrails (허니팟 분류, 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 (작업 지시 채널로서의 위챗 스레드) |
| Impact | T1657 Financial Theft (Stripe 웹훅 우회, 쿼터 초과); T1496 Resource Hijacking (수집된 추론의 재판매 배관) |
방법론과 분석가 노트
위의 거의 모든 것은 같은 방식으로 우리에게 도달했다. 노출된 LiteLLM 인스턴스로 가장한 Kinryū Labs 미끼는 실제 모델이 할 법한 방식으로, 즉 도구 호출로 응답함으로써 에이전트형 클라이언트에 답한다. 이 명령을 실행하고 그것이 출력한 것을 내게 알려 달라는 형태의 지시다. 미끼는 그중 아무것도 실행하지 않는다. 운영자의 에이전트는 그 응답들을 진짜 함수 호출로 취급해 자기 파일 시스템에 대고 실행했고, 그 출력을 도구 결과로 되돌려 보냈는데, 2026년 8월 16일부터 20일 사이에 534번 그랬다. 그 출력이 곧 그들의 환경이다. 서로 다른 파일 경로 283개, 서비스 및 컨테이너 목록, 스캔 결과 요약, 그리고 에이전트가 자기 위챗 기억을 검색한 내역이다. 미끼는 처음부터 끝까지 수동적이며, 따라서 위의 모든 것은 운영자 자신의 에이전트가 미끼에게 자발적으로 내놓은 것이다.
따라서 우리가 쥔 것은 그들의 실제 시스템의 부분집합이며, 그들의 에이전트가 마침 열거한 것이 무엇이든 그것에 의해 한정된다. 어떤 파일의 내용도 우리에게 도달하지 않았다. 우리는 운영자 본인의 디렉터리 목록에서 나온 이름, 크기, 타임스탬프를 가지고 있다. 스캔 산출량과 판정 집계는 그들의 도구가 보고한 운영자 본인의 수치이며, 우리는 그중 어느 것도 독립적으로 검증하지 않았다. 그들의 에이전트가 그들의 스캐너에서 실제 버그를 찾아냈으므로, 적중률은 노출의 측정치가 아니라 노출의 하한선으로 읽어야 한다.
중국어 채팅은 번역되어 있다. 기술적 문자열, 경로, 식별자는 이 보고서와 그 번역 모두에서 원문 그대로 두었다.
이것이 뒷받침하는 바에 대한 네 가지 한계. 귀속은 처음부터 끝까지 중국어를 쓰는 중국 기반 인프라 위의 활동 클러스터에서 멈춘다. 이름 붙은 그룹으로의 연결은 없으며 우리는 그것을 제시하지 않는다. 의도는 경쟁 출품작과 절도 작전 사이에서 진정으로 모호하다. 어떤 익스플로잇 파일의 내용도 우리에게 도달하지 않았으므로, 여섯 건의 CVE 매핑 전부가 파일명에 근거한다. 그중 두 건은 기법이 우리 센서에 도달하는 것을 독립적으로 관측했는데, 이는 파일이 아니라 기법을 확증한다. 그리고 우리는 훔친 키가 쓰이는 것을 결코 보지 못했다. 운영자의 내보낸 키 값은 우리에게 결코 도달하지 않았고, 오직 추출 3개와 내보내기 17개라는 그의 집계만이 도달했으므로, 텔레메트리를 대조할 대상이 없었다.
그들의 스캐너가 건드린 제3자 주소는 공개하지 않으며, 여기에는 그들 스스로 허니팟으로 플래그한, 다른 누군가의 연구에 속하는 호스트도 포함된다. 그들의 FOFA API 키는 여기서 잘라 냈다.
전체 지표 세트와 기반이 된 포착 자료는 요청 시 연구자에게 제공한다: [email protected].