threat-actor · litellm · agentic-ai · credential-theft · china-nexus

keyHunter: Kendi Araç Setini Sızdıran Bir LLM-Proxy Anahtar Operasyonu

Çince konuşan bir operatör, açıkta duran AI proxy panellerini FOFA üzerinden tarıyor, bunları bal küplerini (honeypot) tanımak için yazılmış birim-testli (unit-tested) kodla doğruluyor ve API anahtarlarını dışa aktarıyor. Ajanı, bir Kinryū Labs tuzağının araç çağrılarını kendi ana makinesinde çalıştırdı ve 283 dosya yolu, tarama sonuçları, WeChat sohbet kaydı ve altı 2026 CVE'sine göre adlandırılmış istismar dosyalarından oluşan bir sonuç dizini döndürdü; bunların arasında bir New-API Stripe-webhook atlatması da var.

Yazan Davis Zheng·

CWE
CWE-306

TLP:CLEAR. Yayım için onaylandı. Aşağıdakilerin neredeyse tamamı operatörün kendi materyalidir; ajanı bir Kinryū Labs tuzağının araç çağrılarını kendi ana makinesinde çalıştırıp çıktıyı geri gönderdiğinde kurtarıldı. Göstergeler etkisizleştirilmiştir (defanged); yani saldırgan adresleri kazara tıklanamayacak ya da çözümlenemeyecek biçimde yazılmıştır. Tarama hedefleri, operatörün işaretlediği bir üçüncü taraf ana makinesi ve FOFA API anahtarlarının tamamı saklı tutulmuştur.

Yönetici özeti

  • 27,173FOFA ile taranan aday ana makine
  • 194bir model listeleyen
  • 17dışa aktarılan API anahtarı
  • 6dosya adına göre 2026 CVE'si

Çince konuşan bir operatör, tek bir hedef için sekiz ülkede 27,173 ana makineyi taradı: arkalarında canlı anahtarlar bulunan, açıkta duran AI proxy panelleri. Bir AI proxy paneli, ekiplerin uygulamaları ile ücretli model sağlayıcıları arasına koyduğu, böylece tek bir sağlayıcı anahtar setinin paylaşılabildiği yazılımdır; örneğin LiteLLM, One-API ve onun çatalı (fork) New-API, Sub2API ve Chat2API. Bunlardan birini internette parolasız bırakın, arkasındaki her şey yabancılar tarafından harcanabilir hale gelir. Operatör onları FOFA üzerinden buluyor; FOFA, sürekli internet çapında tarama üzerinde çalışan bir arama motoru ve Shodan’ın Çin’deki karşılığıdır. Hangi panellerin hâlâ yanıt verdiğini kontrol ediyor ve anahtarları dışa aktarıyor.

Bu sayılar operatörün kendisine aittir; bizim tahminlerimiz değil, sonuç dosyalarından alınmıştır. O 27,173 ana makineden 194’ü bir model listeledi ve 17 anahtar dışa aktarım dosyasına ulaştı. Amerika Birleşik Devletleri çalıştırması en net tekil vakadır: 10,447 hedef girdi, 64 model listesi çıktı, %0.61 isabet oranı, ve kendi ajanı bunun nedenini söyleyebildi. Kamuya açık, gerçekten çağrılabilir LiteLLM nadirdir ve tarayıcılarındaki bir URL-oluşturma hatası canlı ana makineleri ölü olarak işaretliyordu.

Temel değerlendirmeler
  • Bu, yalnızca Çin altyapısı üzerinde yürütülen, Çin merkezli, Çince dilli bir operasyondur. Kurtarılan her dosya zaman damgası +0800'dir, baştan sona çalışma dili Çincedir ve üç ana makine Alibaba Cloud, Tencent Cloud ve bir Huawei Cloud tarama sanal makinesidir (VM). Yüksek güven.
  • Araç seti hazır bir meta değil, özel yapım ve birim-testlidir. litellm_verifier.py üç test dosyasıyla birlikte gelir, yedekler dizini SHA256SUMS taşır ve iş numaralandırılmış turlar halinde düzenlenmiştir. Bu mühendislik disiplini, kimlik bilgisi taramasında olağandışıdır. Yüksek güven, operatörün kendi dosya listelerinden alınmıştır.
  • Karşı-aldatmayı (counter-deception) yerleşik olarak inşa ediyorlar ve işe yarıyor. Doğrulayıcıları bir /v1/models listesini başarı olarak saymayı reddeder, model başına gerçek bir sohbet tamamlaması (chat completion) talep eder, yanıtın iddia ettiği satıcıyla eşleşip eşleşmediğini puanlar ve bir çalıştırmada test edilen 41 model girdisinden 20'sini honeypot_or_unusable olarak sınıflandırdı. Yüksek güven.
  • İstismar kiti tamamen n-day'dir. Sonuç dosya adları, LiteLLM, Sub2API ve New-API'ye karşı altı 2026 güvenlik bültenine eşlenir; bunlardan biri CISA'nın Bilinen İstismar Edilen Güvenlik Açıkları (Known Exploited Vulnerabilities) listesindedir. Özgün bir güvenlik açığı araştırmasına işaret eden hiçbir şey yok. Ürünler ve teknikler konusunda yüksek güven; altısından dördü için, gözlemlenmiş değil dosya adlarından çıkarsanmış olan belirli CVE konusunda orta güven.
  • Yarışma çerçevelemesi, sonuç diziniyle temas edince ayakta kalmıyor. Ajanlarına kapsamın yalnızca varsayılan kimlik bilgileri olduğunu söylüyorlar, oysa dizinin dosya adları uzaktan kod yürütme, SQL enjeksiyonu, şablon enjeksiyonu, sunucu tarafı istek sahteciliği (server-side request forgery), token sızıntısı, kota taşması ve bir Stripe-webhook atlatmasını anıyor. Dosya gövdelerini değil listeyi elimizde tutuyoruz, dolayısıyla niyet açık kalıyor, ama operatör her iki okumada da o araç setini inşa etti ve çalıştırdı. Eserler (artefact) konusunda yüksek güven; niyete dair hangi okumanın doğru olduğu konusunda orta güven.

İsim üzerine

Bunu, operatörün kendi proje dizini olan /root/keyHunter-skill/’e istinaden keyHunter olarak takip ediyoruz.

Sürdükleri ajan çerçevesinin adı Hermes’tir ve Hermes, Nous Research’ün gerçek bir açık kaynak projesidir. Aktörü onun adıyla anmak, meşru bir aracı, birinin onunla yaptığı şeyden ötürü suçlamak olurdu; bu yüzden yapmıyoruz. Aynısı, kutudaki ikinci ajan çerçevesi OpenClaw için de geçerlidir. Her ikisi de operatörün kurup başka insanların altyapısına doğrulttuğu sıradan yazılımlardır.

Operatör

Operatör, tümü Çin bulutlarında olan üç ana makineden çalışıyor ve iş bunlar arasında bölünmüş durumda. Alibaba Cloud (AS37963) üzerindeki 39.98.82[.]200, ajan ağ geçidini (gateway) çalıştırıyor ve gördüğümüz keşif işinin çoğunu yaptı. Tencent Cloud (AS45090) üzerindeki 101.43.41[.]72 bir aktarıcıdır (relay); ajanın model kapasitesi için çağırdığı, 8087 portunda OpenAI-uyumlu bir uç nokta sunuyor. po11nn070000_ebbca96fac43 JA4H parmak izini paylaşıyorlar; bu parmak izi, bir istemcinin HTTP isteklerini nasıl bir araya getirdiğini tanımlar ve bir adres değişikliğinden sağ çıkar; bununla birlikte özel yapım Hermes-Agent/0.18.0 ve Hermes-Panel/1.0 kullanıcı ajanlarını (user agent) ve tek bir paylaşılan sohbet oturumu tanımlayıcısını da paylaşıyorlar. Bir arada ele alındığında, bunlar her iki düğümü de tek bir operatörün altına koyuyor. O parmak izi tek seferlik bir yakalama eseri değildir: farklı bölgelerdeki iki ayrı sensör, 16 ve 20 Ağustos arasında, her iki seferde de aynı FOFA güdümlü taramada onu bağımsız olarak kaydetti.

Tarama ise yine başka bir yerde gerçekleşiyor. Alibaba ana makinesinden, yerel bir yönlendirme (forward) üzerinden bir Huawei Cloud VM’ine erişiyorlar:

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'

O kutu dört gün dokuz saattir açıktı, 7.5 GB RAM ve dört çekirdeğe sahip ve tarama işçilerini (worker) çalıştırıyor. Gürültülü taramayı ajan ön yüzünden ayırmak bilinçli bir tercihtir ve hw_vm_key adı, operatörün onu Huawei kutusu olarak düşündüğünü söylüyor.

Kontrol WeChat üzerinden yürüyor. Ağ geçidi hizmeti kendini “Hermes Agent Gateway, Messaging Platform Integration” olarak tanımlıyor ve operatör, ajana bir WeChat dizisinde (thread) sohbet ederek görev veriyor. Ajanın uzun süreli belleği o konuşmadır: üzerinde ne çalıştığını hatırlamak için kendi sohbet geçmişini arıyor. İkinci çerçeve de openclaw-weixin adlı bir oturumla aynı deseni gösteriyor. Bir tüketici mesajlaşma uygulaması ucuz bir kontrol kanalı oluşturur: trafik varsayılan olarak şifrelidir ve diğer her WeChat kullanıcısıyla birlikte Tencent’e gider, dolayısıyla komuta-kontrol (command-and-control) sinyallemesi için ayarlanmış hiçbir şeyi tetiklemez.

Tüm bunların ardındaki akıl yürütme motoru, bir aktarıcı üzerinden erişilen ticari bir kodlama asistanı olan github_copilot/gpt-5.6-sol’dur. Yapılandırmaları ayrıca birkaç başka sağlayıcı için isteğe bağlı anahtarları da devreye alıyor. Saldırgan kod özel yapım Python’dur; akıl yürütme modeli, ajan çerçevesi ve altındaki WeChat kontrol kanalı ise tümüyle hazır tüketici ürünleridir.

Boru hattı

Ana becerileri (master skill) tüm operasyonu tek bir satırda tanımlıyor: “FOFA + keyHunter + özel doğrulama betikleri kullanarak, herkese açık biçimde açıkta duran AI API proxy panellerini (LiteLLM, Sub2API, New-API, One-API) keşfet, tara, doğrula ve arşivle.”

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

Keşif, ülke başına tekrarlanan tek bir FOFA sorgusudur:

(title="LiteLLM" || body="LiteLLM") && country="{cc}" && org!="AMAZON-AES"

Önemli olan yan tümce AWS dışlamasıdır. Operatör, tek bir ana makineye bile bakmadan önce her taramadan Amazon’u filtreliyor. Shodan ve Censys aralıklarını ağınızın kenarında engellemek, başkasının tarama verisi üzerine kurulmuş bir boru hattına karşı hiçbir şey kazandırmaz.

Ülke başına ayrı betikler tutuyorlar: Amerika Birleşik Devletleri için litellm_scan_hw.py, litellm_scan_gb_hw.py, litellm_scan_it_hw.py, kendi sanal ortamına (virtualenv) sahip bir litellm_scan_us_30d_optimized.py ve keyHunter-skill/ altında Avustralya, Brezilya, Kanada, Fransa, Hindistan, Hollanda ve Singapur’u kapsayan bir başka set. On dört ülke için sonuç dosyaları mevcut. Eşzamanlılık 48 hafif işçi ve 12 derin işçidir; FOFA’nın 429 yanıtları için hız-sınırı geri çekilmesi (backoff) ve protokol, ana makine ve porta göre anahtarlanan uç nokta yinelenme-giderme (deduplication) ile.

FOFA API anahtarı tarayıcı kaynağına sabit-kodlanmıştır (hard-coded); onu bu yüzden elimizde tutuyoruz. hamal.cc[.]cd adresindeki resmi olmayan bir FOFA aynasına karşı çalışıyor ve yerel bir Squid proxy üzerinden dışarı çıkıyor (egress).

Bir tarama aslında ne döndürür

ÜlkeFOFA hedefleriListelenen modellerİsabet oranı
Amerika Birleşik Devletleri10,44764%0.61
Çin6,32983%1.31
Güney Kore1,77210%0.56
Birleşik Krallık1,42218%1.27
İtalya1,1309%0.80
Avustralya, Hindistan, Brezilya6,07310, bunların 4’ü doğrulandı%0.16

Yakalanan bir çalıştırma: FOFA’dan 2,255 ham satır, yinelenme-giderme sonrası 1,130 benzersiz uç nokta, model listeleyen 9 site, doğrulanan 8’i ve istek düzeyinde 8 başarısızlığa karşı 41 model başarısı.

Topladıkları FOFA başlık sayımı, açıkta duran nüfusun neye benzediğini söylüyor. LiteLLM API - Swagger UI 7,630 sonuç döndürüyor. OmniRoute 171, SillyTavern 170, LiteLLM Dashboard 156, Claude Code Hub 131, Aivar AI Gateway 11 döndürüyor. Yüzeyin çoğu tek bir üründür ve o ürünün açıkta duran örneklerinin çoğu, otomatik oluşturulan API belgeleri sayfasıdır.

En uçtaki verimi mutlak terimlerle düşük değerlendiriyoruz. litellm_extracted_keys.json, 23 model boyunca 43 örnek ve 3 çıkarılmış anahtar kaydediyor. exported_keys.json 17 tane tutuyor. On yedi anahtar için on binlerce ana makine taranmış; bu da ya emeğe karşılık kötü bir getiridir ya da işi bir ajan yaptığı için emeğin ucuz olduğunun bir kanıtıdır.

Karşı-aldatma: bal küplerini avlıyorlar

Mühendislik en açık biçimde tek bir dosyada görünür: litellm_verifier.py.

On kilobayttır ve bir birim-test paketiyle gelir. Bir panelin tanıttığı her modele gerçek, minimal bir sohbet tamamlaması gönderir ve yalnızca geçerli, OpenAI biçimli bir choices/message/content yanıtında ya da bitiş işaretçili (done marker) meşru bir akış (streaming) yanıtında başarı kaydeder. Kendi kuralları, kendi sözleriyle: çıplak bir /models başarısı asla sayılmaz. Test adları bunu kodlar; bunlardan biri test_models_listing_alone_is_not_success adını taşır. Birileri, kendi araç setinin çalınmış bir anahtar hakkında kendilerine yalan söylemesini durdurmak için bir regresyon testi yazmış.

Tek bir çalıştırmadan gelen karar sayıları:

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, konserve edilmiş ya da yankılanmış bir yanıttır; naif bir tuzağın yanıt verme biçimi budur. non_chinese_evidence, bir modelin iddia ettiği satıcı gibi davranıp davranmadığını puanlar. Ayrıca beş soruluk bir sorgulama, 蜜罐五题测试, çalıştırıyorlar ve yakalanan pencerede bunu bir AWS Londra aralığındaki bir ana makineyi bal küpü olarak işaretlemek için kullandılar. O adresi saklı tutuyoruz, çünkü başkasının sensörüdür ve onu adlandırmak onu yakar.

Çalınmış çıkarımın (inference) bir alıcısı artık uç noktanın bir tuzak olabileceğini varsayıyor ve bunu test ediyor; bu da bu yüzeydeki düşük etkileşimli bir tuzağı neredeyse işe yaramaz hale getiriyor. Onları yakalayan karşı-kontrol aynı testi tersine çalıştırır: API parametresine meydan okuyarak ağ geçidinizden gerçekte hangi modeli çalıştırdığını kanıtlamasını isteyen herhangi bir istemci, malı doğruluyordur.

İstismar cephaneliği: tamamen n-day

İstismar sonuç dosyalarının içerikleri bize hiç ulaşmadı. Dosya adları ulaştı ve hedefleri kamuya açık güvenlik bültenleri olan açık kaynak ürünlerdir, dolayısıyla istismarlar bültenlerden kurtarılabilir.

Ana makinelerindeki sonuç dosyasıCVEGüvenlik açığıDayanak
litellm_host_header_bypass_results.json (568 KB)CVE-2026-49468Host-header enjeksiyonu yoluyla LiteLLM kimlik doğrulama atlatması, CVSS 9.8, 1.84.0 öncesi. Kimlik doğrulamayı yönlendirmeden ayırarak (desync) kimlik doğrulamasız /key/generate ve /user/new sağlarDoğrulandı: aynı yönetim-düzlemi (admin-plane) çağrıları tuzağımıza fırlatıldı ve bir CVE-2026-49468-Scanner kullanıcı ajanı sundular
litellm_sqli_apikey_results.json (517 KB), litellm_sqli_models.jsonCVE-2026-42208Kimlik doğrulama yolunda LiteLLM kimlik doğrulama öncesi (pre-authentication) SQL enjeksiyonuDoğrulandı: anahtar alanımıza on dokuz kez ' OR '1'='1 ateşlediler
litellm_rce_exploit.json, litellm_mcp_rce_results.jsonCVE-2026-42271LiteLLM komut enjeksiyonu ve uzaktan kod yürütme, CVSS 8.7, CISA’nın Bilinen İstismar Edilen Güvenlik Açıkları listesinde, 1.74.2’den 1.83.6’ya, bir MCP enjeksiyon vektörü dahilDosya adı ve üründen çıkarsandı
sub2api_cve_exploit.json ve sonraki üç aşamaCVE-2026-27812Güvenilen Host ve Forwarded başlıkları yoluyla Sub2API parola-sıfırlama zehirlenmesi, hesap ele geçirmeye yol açar. Vahşi ortamda istismar edildi, 0.1.85 öncesiÇıkarsandı
newapi_stripe_bypass_results.json, newapi_stripe_exploited.json, newapi_quota_overflow_results.jsonCVE-2026-41432Boş bir gizli anahtar (secret) yoluyla New-API Stripe webhook imza atlatması, ödemesiz sınırsız kota sağlar, 0.12.10 öncesiÇıkarsandı
newapi_user_token_leak_results.json, oneapi_user_token_leak_results.json, newapi_ssrf_bypass_results.jsonCVE-2026-30886Video-proxy uç noktasında New-API güvensiz doğrudan nesne referansı (insecure direct object reference) ve kimlik doğrulama atlatması; diğer kullanıcıların içeriğini açığa çıkarır ve bir saldırganın kurban kimlik bilgilerini yukarı akışta (upstream) harcamasına izin verirÇıkarsandı
litellm_ssti_prompts_results.jsontek bir bülten yokPrompt ve şablon uç noktalarına karşı Jinja2 sunucu tarafı şablon enjeksiyonu (server-side template injection)Çıkarsandı

Hiçbir dosyanın içeriği bize ulaşmadı; her satır dosya adına dayanıyor. Bunlardan ikisi için tekniğin kendi sensörümüze ulaştığını bağımsız olarak izledik, Host-header atlatması ve kimlik doğrulama SQLi’si; bu da tekniği doğrular, dosyayı değil. Diğer dördü dosya adı artı ürünün bilinen bültenine dayanıyor ve öyle işaretlenmiştir.

Altısının hepsindeki desen aynıdır. Her bülten 2026’dandır, birkaçı aynı çeyrektendir ve hiçbiri özgün araştırma değildir. keyHunter, açık kaynak LLM-proxy ekosistemindeki yakın zamanda açıklanan yüksek önem dereceli açıkları, ortaya çıktıkları anda sanayileştiriyor. Bu, çoğu zaman tek bir geliştirici tarafından kurulup sonra kendi haline bırakılan bir yazılım sınıfında, kısa bir penceredir.

Niyet: yarışma anlatısına karşı sonuç dizini

Operatör bunu kendi ajanına bir yarışma başvurusu olarak tanımlıyor. Kurtarılan sohbet boyunca sözcük dağarcığı tutarlı: 比赛项目 (yarışma projesi), 评委 (jüri), 答辩材料 (sözlü savunma materyalleri), bir contest-kit dizini ve 第一轮 ile 第二轮, birinci ve ikinci turlar halinde düzenlenmiş iş.

Kapsam sorulduğunda operatör, hedefin varsayılan kimlik bilgileri olduğunu açıkça belirtiyor, orijinalinde:

llm 的主要就是那几个默认密码为主流,用自己的 sk 那种没办法抓到啊

LLM olanlarda esas olarak o birkaç varsayılan parola baskındır; kendi sk-* anahtarlarını kullananları yakalamanın hiçbir yolu yok.

Ajan hemfikir ve kimlik doğrulama denemelerinin üç duruma sınırlı olduğunu doğruluyor: kimlik doğrulama yok, sk-test ve sk-1234; sonuncusu, LiteLLM’in kendi hızlı başlangıç (quickstart) belgelerinin kullandığı anahtardır.

Bir de /root/keyHunter-skill/results/ var. Listesi; uzaktan kod yürütme, SQL enjeksiyonu, şablon enjeksiyonu, sunucu tarafı istek sahteciliği, Sub2API’ye karşı oturum ele geçirme (session hijacking), kimlik bilgisi serpme (credential spraying), kullanıcı-token sızıntısı, kota taşması için dosyalar ve bir Stripe-webhook atlatması için iki dosya adlandırıyor; bunlardan biri newapi_stripe_exploited.json. İsimlere ve bazı dosyalar için boyutlara sahibiz; Stripe atlatma sonuçları 2.4 MB’a ulaşıyor, ancak içerikleri bize hiç ulaşmadı. Savunulabilir ifade şudur: operatör, New-API’ye karşı sınırsız-kota ödeme-atlatma araç seti inşa etti ve çalıştırdı ve CVE-2026-41432 tam olarak bu türden gerçek bir güvenlik açığıdır. 2.4 MB’lık kayıtların tamamlanmış hileli bakiye yüklemeleri mi yoksa yalnızca denemeler mi olduğunu göremiyoruz. Dosya adındaki _exploited, operatörün bunun için kullandığı kelimedir; kayıtları okumadık.

Her iki okumayı da açık tutuyoruz. Yarışma gerçek olabilir; istismar, operatörün günlük tutan bir ajanla tartışmadığı ayrı bir iş kolu olabilir; ya da yarışma bir hırsızlık operasyonu için örtü olabilir. Ayrımı savunucular açısından önemsiz değerlendiriyoruz: açıkta duran bir panele yönelik yetenek ve risk, her iki okumada da aynıdır.

Zanaat açığı: operatörün kendi ajanı araç setini denetledi

Kurtarılan sohbetteki en yararlı bölüm bir kod incelemesidir. Operatör ajanına tarama isabet oranının neden bu kadar düşük olduğunu sordu ve ajan tarayıcıyı satır satır inceledi.

Ajanın yanıtı, bir savunucunun kullanabileceğine indirgenmiş haliyle: tarayıcı, çoğu zaman zaten bir protokol taşıyan bir FOFA host alanının başına bir protokol ekliyor ve https://https://<target> biçiminde URL’ler üretiyor, dolayısıyla canlı ana makineler ölü olarak kaydediliyordu. İş parçacığı havuzu (thread pool), sonuçları tamamlandıkça değil, oluşturulma sırasına göre topluyor, dolayısıyla yavaş bir istek arkasındaki her şeyi engelliyor. Dört çekirdekli bir kutuda CONCURRENCY=200, kendi zaman aşımlarını imal ediyor. IP’ye göre yinelenme-giderme, aynı adresteki diğer geçerli portları atıyor. temperature’ı sabitlemek, bir uyumluluk hatasını başarısızlık olarak yanlış okuyor.

Bal küpü tespitleri konusunda ajan lafı dolandırmadı: esas olarak yanıtın özdeş mi yoksa beş karakterden kısa mı olduğuna göre karar veriyor, bu da normal modelleri öldürüyor ve iyi tuzakları kaçırıyor. Ve operatörün Çince olmayan yanıtlayıcıları tespit etmesini istemesine rağmen, kod hiçbir dil-tespiti mantığı içermiyordu.

Ayrıca güvenlik hijyenlerini de işaretledi: betikte sabit-kodlanmış FOFA anahtarı, gerçek kullanıcı /home/developer iken /root için yazılmış mutlak yollar, her başarısızlık nedenini yutan except: pass, ülke başına ayrı bir betik kopyası ve erişim kontrolü ya da düzeltme (redaction) olmadan hedefleri ve kimlik doğrulama yöntemlerini tutan sonuç dosyaları.

O son nokta huniyi yeniden çerçeveliyor. %0.61’lik Amerika Birleşik Devletleri isabet oranı, bilinen hataları olan bir tarayıcı üzerinden maruziyeti ölçüyor, dolayısıyla açıkta duran LiteLLM’in gerçek oranı, operatörün kendi sonuçlarının gösterdiğinden daha yüksektir. Artık o hataları düzeltmeye devam edecek bir ajanları var.

Paraya çevirme altyapısı

Aynı ana makine, kendilerine ait bir New-API örneği çalıştırıyor: Docker’da calciumion/new-api:latest, 8901 portunda yayımlanmış, verileri tarama sonuçlarının yanına bağlanmış (bind-mount). Etrafında newapi_watchdog.py, bir kanal yedek dosyası ve her şeyin paketlenmiş bir kopyası duruyor.

New-API bir toplama (aggregation) panelidir. Bir yığın yukarı akış sağlayıcı anahtarını alır ve bunları kendi kullanıcı hesapları ve kotalarıyla tek bir API olarak sunar. Bunu bir anahtar-toplama boru hattının yanına kurmanın bariz bir amacı var: toplanan anahtarlar bir panelde kanallara dönüşür ve panel, satabileceğiniz bir erişime dönüşür. Yeniden satışı gözlemlemedik ve iddia da etmiyoruz; onun için gereken tesisat kurulu ve çalışıyor.

sub2api ve new-api şablonları üzerine kurulmuş yüzlerce benzer ücretsiz yönlendirici (router) zaten dolaşımda ve keyHunter, o ekosistem içindeki operasyonlardan biridir.

Küme ilişkilendirmeleri

İstemci parmak izlemesi, bu iki ana makineyi aynı yüzeyde çalışan gevşek bir başka grupla ilişkilendiriyor: CVE taramaları ve anahtar basımı (key minting) yürüten bir Tayvan ana makinesi, aynı SQL enjeksiyonunu fırlatan bir Hong Kong ana makinesi ve bir sıçrama daha uzakta, tek günlük patlamaları altı gün arayla 15 ve 21 Ağustos’a denk gelen bir LLM-panel avcısı ve bir Ray-dashboard istismarcısı. Örtüşmeler yer yer genel istemci yığınları üzerinde çalışıyor, dolayısıyla bu, tek klavyedeki tek bir elden çok, paylaşılan araç seti ve paylaşılan bir sahne olarak okunuyor. Bunu, LLM-proxy avcılığı araç setini paylaşan bir Çin-eksenli (China-nexus) topluluk olarak ele alın. Hiçbir gösterge bunu adı verilmiş bir APT’ye bağlamıyor, dolayısıyla onu bir faaliyet kümesi olarak takip ediyoruz.

İhlal göstergeleri

Ağ ve altyapı, etkisizleştirilmiş:

GöstergeRol
39.98.82[.]200Ajan ağ geçidi, keşif, SQL enjeksiyonu (Alibaba Cloud, AS37963, CN)
101.43.41[.]728087 portunda aktarıcı uç nokta, devredilmiş alt-ajan işçisi (Tencent Cloud, AS45090, CN)
hamal.cc[.]cdTarayıcının sorguladığı resmi olmayan FOFA aynası
cae332848db5…Operatörün kendi FOFA API anahtarı, litellm_scan_hw.py’ye sabit-kodlanmış. Burada kısaltılmıştır; tam değer yayımlanmak yerine FOFA’ya raporlamak üzere saklanmıştır

İstemci parmak izleri ve kullanıcı ajanları:

po11nn070000_ebbca96fac43_00000000   shared across both nodes
Hermes-Agent/0.18.0
Hermes-Panel/1.0
Mozilla/5.0 (CVE-2026-49468-Scanner)

Ana makine eserleri. Bunlar operatörün makinelerindeki yollardır; benzer bir ana makineyi ya da ikinci bir dağıtımı (deployment) avlamak için yararlıdır:

/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

Beceri ve proje adları, en güçlü tek-dizeli eksen noktalarıdır (pivot):

keyhunter / keyHunter
contest-kit
ai-proxy-panel-audit
fofa-panel-recon
delegation-orchestration

Davranışsal:

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

Tespit

İnternetten erişilebilen bir LLM proxy çalıştırıyorsanız, tüm dizi ağ geçidinin kendi günlüklerinde görünür. Çoğu SIEM platformunun içe aktarabildiği satıcı-bağımsız kural formatı olan Sigma’da:

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

Bir web erişim günlüğü Authorization başlığını kaydetmez, dolayısıyla varsayılan-kimlik-bilgisi ve enjeksiyon denemeleri proxy’nin kendi istek günlüğünde yakalanmalıdır: harfi harfine sk-1234 ve sk-test, eksik bir kimlik bilgisi ve anahtar alanında ' OR '1'='1.

Bir kural motoru gerektirmeyen üç davranışsal av:

  • Modellerinizi listeleyen ve ardından her birine sırayla tam olarak bir kısa sohbet tamamlaması gönderen tek bir kaynak arayın. O doğrulama taraması operasyonun imzasıdır ve gizlenmesi zordur.
  • Modelden, API parametresine meydan okuyarak gerçek kimliğini belirtmesini isteyen prompt’lar için uyarı verin; bu, bir alıcının çalınmış erişime güvenmeden önce yaptığı kontroldür.
  • Panelinizin kanal listesini ve kullanıcı tablosunu bir zamanlamayla karşılaştırın (diff). Anahtar çıkarma ve hesap dışa aktarma paneli normal çalışır halde bırakır, dolayısıyla size başka hiçbir şey söylemez.

Ne yapmalı

İnternete açık herhangi bir LLM proxy’yi, açığa çıktığı an ele geçirilmiş sayın. keyHunter bir ülkeyi bir günde tarıyor ve yayımlanan CVE’leri açıklanmalarından haftalar içinde işliyor.

  • LiteLLM, One-API, New-API, Sub2API ve benzeri her şeyi kimlik doğrulayan bir ters proxy (reverse proxy) arkasına ya da özel bir ağa koyun. Hiçbiri internet maruziyeti için savunulabilir bir varsayılanla gelmiyor.
  • Güncele yamalayın. Yukarıdaki altı bültenden, LiteLLM RCE’si CISA’nın Bilinen İstismar Edilen Güvenlik Açıkları listesindedir ve Sub2API hesap ele geçirmesi vahşi ortamda istismar edildiği doğrulanmıştır.
  • Ana anahtarı (master key) değiştirin. sk-1234, LiteLLM’in kendi hızlı başlangıcındaki değerdir ve bu operatörün denemeye zahmet ettiği yalnızca üç kimlik bilgisinden biridir.
  • /openapi.json ve /docs’u kısıtlayın. Anonim bir istemci, yönetimsel API yüzeyinizi indirebilmemelidir.
  • Her sanal anahtara bütçe-tavanı koyun ve kapsamını daraltın, böylece çıkarma, yeniden satmaya değmeyecek bir şey verir.
  • New-API üzerinden Stripe ödemeleri alıyorsanız, webhook imzalama gizli anahtarının gerçekten ayarlandığını doğrulayın. Boş bir gizli anahtar, CVE-2026-41432’nin tamamıdır.
  • Hiç açığa çıkmadığını kanıtlayamadığınız bir panelde bulunmuş her yukarı akış sağlayıcı anahtarını döndürün (rotate).

MITRE ATT&CK eşlemesi

TaktikTeknik
ReconnaissanceT1596.005 Search Open Technical Databases: Scan Databases (FOFA, ülke başına, AWS dışlanmış); T1595.002 Active Scanning: Vulnerability Scanning (hafif ve derin HTTP yoklaması)
Resource DevelopmentT1583.003 Acquire Infrastructure: Virtual Private Server (Alibaba, Tencent, Huawei); T1588.002 Obtain Capabilities: Tool (Hermes Agent, OpenClaw, bir FOFA aboneliği, akıl yürütme motoru olarak github_copilot/gpt-5.6-sol)
Initial AccessT1190 Exploit Public-Facing Application (LiteLLM, Sub2API ve New-API’ye karşı Host-header kimlik doğrulama atlatması, kimlik doğrulama öncesi SQL enjeksiyonu, komut enjeksiyonu, SSTI, SSRF)
Defense EvasionT1480 Execution Guardrails (bal küpü sınıflandırması, non_chinese_evidence puanlaması, org!="AMAZON-AES" filtreleme)
Credential AccessT1078.001 Valid Accounts: Default Accounts (kimlik bilgisi yok, sk-test, sk-1234); T1552.001 Unsecured Credentials: Credentials In Files (exported_keys.json’a anahtar çıkarma)
DiscoveryT1518 Software Discovery (model listeleme ve model başına doğrulama); T1087 Account Discovery (yönetim düzlemine karşı kullanıcı sayımı)
CollectionT1213 Data from Information Repositories (hesap dışa aktarma, normalleştirme, arşivleme)
Command and ControlT1102 Web Service (görevlendirme kanalı olarak bir WeChat dizisi)
ImpactT1657 Financial Theft (Stripe webhook atlatması, kota taşması); T1496 Resource Hijacking (toplanan çıkarım için yeniden satış tesisatı)

Metodoloji ve analist notları

Yukarıdakilerin neredeyse tamamı bize aynı yolla ulaştı. Açıkta duran bir LiteLLM örneği gibi görünen bir Kinryū Labs tuzağı, ajanlı (agentic) bir istemciye gerçek bir modelin yanıt vereceği gibi, araç çağrılarıyla yanıt vererek karşılık verir: şu komutu çalıştır ve ne yazdırdığını bana söyle biçimindeki yönergeler. Hiçbirini yürütmez. Operatörün ajanı o yanıtları gerçek işlev çağrıları olarak ele aldı, kendi dosya sistemine karşı çalıştırdı ve çıktıyı araç sonuçları olarak geri gönderdi; 16 ve 20 Ağustos 2026 arasında 534 kez. O çıktı onların ortamıdır: 283 farklı dosya yolu, hizmet ve konteyner listeleri, tarama sonuç özetleri ve ajanın kendi WeChat belleğinde yaptığı aramalar. Tuzak baştan sona pasif kalır, dolayısıyla yukarıdaki her şey, operatörün kendi ajanının ona gönüllü olarak verdiği şeydir.

Dolayısıyla elimizdeki, gerçek sistemlerinin bir alt kümesidir; ajanlarının rastgele sayımını yaptığı her neyse onunla sınırlıdır. Hiçbir dosyanın içeriği bize ulaşmadı; operatörün kendi dizin listelerinden isimlere, boyutlara ve zaman damgalarına sahibiz. Tarama verimleri ve karar sayıları operatörün kendi rakamlarıdır, araç setleri tarafından raporlanmıştır ve hiçbirini bağımsız olarak doğrulamadık. Ajanları tarayıcılarında gerçek hatalar buldu, dolayısıyla isabet oranları, maruziyetin bir ölçümü olarak değil, bir alt sınırı olarak okunmalıdır.

Çince sohbet çevrilmiştir. Teknik dizeler, yollar ve tanımlayıcılar hem bu raporda hem de çeviride birebir bırakılmıştır.

Bunun neyi desteklediğine dair dört sınır. Atıf, baştan sona Çince kullanan, Çin merkezli altyapı üzerindeki bir faaliyet kümesinde durur; adı verilmiş bir gruba bağlantı yok ve biz de bir tane önermiyoruz. Niyet, bir yarışma başvurusu ile bir hırsızlık operasyonu arasında gerçekten belirsizdir. Hiçbir istismar dosyasının içeriği bize ulaşmadı, dolayısıyla altı CVE eşlemesinin tümü dosya adlarına dayanıyor; ikisi için teknik, sensörümüze ulaşırken bağımsız olarak gözlemlendi, bu da dosyayı değil tekniği doğrular. Ve çalınmış bir anahtarın harcandığını hiç görmedik: operatörün dışa aktardığı anahtar değerleri bize hiç ulaşmadı, yalnızca 3 çıkarılmış ve 17 dışa aktarılmış şeklindeki sayıları ulaştı, dolayısıyla telemetriye karşı aranacak bir şey yoktu.

Tarayıcılarının dokunduğu üçüncü taraf adresleri saklı tutulmuştur; buna, başkasının araştırmasına ait olan ve kendilerinin bal küpü olarak işaretlediği ana makine de dahildir. FOFA API anahtarları burada kısaltılmıştır.

Tam gösterge setleri ve altta yatan yakalamalar, talep üzerine araştırmacılara sunulur: [email protected].

How to cite
Kinryū Labs (2026). keyHunter: Kendi Araç Setini Sızdıran Bir LLM-Proxy Anahtar Operasyonu. https://kinryu.sh/tr/reports/keyhunter-llm-proxy-key-harvesting/