این صفحه یک ترجمه است. نسخهٔ انگلیسی متن معتبر است. خواندن نسخهٔ انگلیسی

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

keyHunter: عملیاتی برای برداشت کلید پروکسی‌های LLM که جعبه‌ابزار خودش را افشا کرد

یک گردانندهٔ چینی‌زبان با FOFA به دنبال پنل‌های پروکسی هوش مصنوعی در معرض اینترنت می‌گردد، آن‌ها را با کدی آزمون‌واحدشده که برای شناسایی هانی‌پات نوشته شده تأیید می‌کند و کلیدهای API را استخراج می‌کند. عامل او 283 مسیر فایل از میزبان خودش، بازده‌های پویش، گزارش گفت‌وگوی WeChat و یک پوشهٔ نتایج شامل فایل‌های بهره‌جویی با نام‌هایی برگرفته از شش CVE سال 2026 را روی یکی از هانی‌پات‌های ما ارسال کرد که دور زدن وب‌هوک Stripe در New-API یکی از آن‌ها است.

نوشتهٔ Davis Zheng·

CWE
CWE-306

TLP:CLEAR. برای انتشار عمومی تأیید شده است. تقریباً همهٔ آنچه در ادامه می‌آید مواد خود گرداننده است که از خروجی ارسال‌شده توسط عامل او به یکی از هانی‌پات‌های ما بازیابی شده است. شاخص‌ها خنثی‌سازی شده‌اند، یعنی نشانی‌های مهاجم به شکلی نوشته شده‌اند که نتوان به‌طور تصادفی روی آن‌ها کلیک کرد یا آن‌ها را resolve کرد. هدف‌های پویش، یک میزبان متعلق به شخص ثالث که گرداننده آن را علامت‌گذاری کرده بود و کلید کامل API مربوط به FOFA او منتشر نشده است.

خلاصهٔ مدیریتی

  • 27,173میزبان کاندید پویش‌شده با FOFA
  • 194موردی که مدلی را فهرست کرد
  • 17کلید API استخراج‌شده
  • 6CVE سال 2026، بر پایهٔ نام فایل

یک گردانندهٔ چینی‌زبان 27,173 میزبان را در هشت کشور با یک هدف پویش کرده است: پنل‌های پروکسی هوش مصنوعی در معرض اینترنت که کلیدهای فعال پشت آن‌ها قرار دارد. پنل پروکسی هوش مصنوعی نرم‌افزاری است که تیم‌ها میان برنامه‌های خود و ارائه‌دهندگان پولی مدل قرار می‌دهند تا یک مجموعه کلید ارائه‌دهنده قابل اشتراک باشد، مانند 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 است. هیچ نشانی از پژوهش اصیل آسیب‌پذیری دیده نمی‌شود. اطمینان بالا در مورد محصولات و تکنیک‌ها، اطمینان متوسط در مورد 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) یک رله است که روی پورت 8087 یک نقطهٔ پایانی سازگار با OpenAI ارائه می‌دهد و عامل برای ظرفیت مدل آن را فراخوانی می‌کند. این دو اثر انگشت 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. یک اپلیکیشن پیام‌رسان مصرفی کانال کنترل ارزانی می‌سازد: ترافیک به‌طور پیش‌فرض رمزنگاری شده است و همراه با هر کاربر دیگر WeChat به سمت Tencent می‌رود، پس چیزی را که برای بیکن‌زنی فرمان و کنترل تنظیم شده باشد به کار نمی‌اندازد.

موتور استدلالی پشت همهٔ این‌ها github_copilot/gpt-5.6-sol است، یک دستیار کدنویسی تجاری که از طریق یک رله به آن دسترسی پیدا می‌کنند. پیکربندی آن‌ها کلیدهای اختیاری چند ارائه‌دهندهٔ دیگر را هم متصل می‌کند. کد تهاجمی پایتون سفارشی است؛ مدل استدلالی، چارچوب عامل و کانال کنترل WeChat زیر آن همه محصولات آمادهٔ مصرف‌کننده‌اند.

خط لوله

مهارت اصلی آن‌ها کل عملیات را در یک خط توصیف می‌کند: «کشف، پویش، تأیید و بایگانی پنل‌های پروکسی API هوش مصنوعی که در معرض عموم قرار دارند (LiteLLM، Sub2API، New-API، One-API) با استفاده از FOFA + keyHunter + اسکریپت‌های تأیید سفارشی.»

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 کارگر عمیق است، با عقب‌نشینی در برابر پاسخ‌های 429 مربوط به محدودیت نرخ FOFA، و حذف تکراری نقاط پایانی بر پایهٔ پروتکل، میزبان و پورت.

کلید API مربوط به FOFA در سورس پویشگر به‌صورت سخت‌کدشده است و ما از همین راه آن را داریم. پویشگر روی یک آینهٔ غیررسمی FOFA در hamal.cc[.]cd اجرا می‌شود و خروجی آن از یک پروکسی Squid محلی می‌گذرد.

یک پویش در عمل چه برمی‌گرداند

کشورهدف‌های FOFAمدل‌های فهرست‌شدهنرخ موفقیت
ایالات متحده10,447640.61%
چین6,329831.31%
کرهٔ جنوبی1,772100.56%
بریتانیا1,422181.27%
ایتالیا1,13090.80%
استرالیا، هند، برزیل6,07310 که 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 را در خود دارد. ده‌ها هزار میزبان پویش‌شده برای هفده کلید، که یا بازگشت ضعیفی در قبال این حجم کار است یا استدلالی است بر این‌که این حجم کار ارزان است چون یک عامل آن را انجام می‌دهد.

ضدفریب: آن‌ها هانی‌پات شکار می‌کنند

مهندسی کار در یک فایل بیش از همه دیده می‌شود، 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 لندن به‌عنوان هانی‌پات استفاده کردند. ما آن نشانی را منتشر نمی‌کنیم، چون سنسور شخص دیگری است و نام بردن از آن آن را می‌سوزاند.

خریدار استنتاج دزدیده‌شده اکنون فرض می‌کند نقطهٔ پایانی ممکن است تله باشد و آن را آزمون می‌کند. بررسی متقابلی که آن‌ها را می‌گیرد همان آزمون را در جهت معکوس اجرا می‌کند: هر کلاینتی که از دروازهٔ شما بخواهد ثابت کند واقعاً کدام مدل را اجرا می‌کند، برخلاف پارامتر 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.jsonCVE-2026-42208تزریق SQL پیش از احراز هویت در مسیر احراز هویت LiteLLMتأییدشده با شاهد مستقل: نوزده بار ' OR '1'='1 را به‌عنوان کلید فرستادند
litellm_rce_exploit.json، litellm_mcp_rce_results.jsonCVE-2026-42271تزریق فرمان و اجرای کد از راه دور در LiteLLM، CVSS 8.7، در فهرست آسیب‌پذیری‌های شناخته‌شدهٔ بهره‌جویی‌شدهٔ CISA، نسخه‌های 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.jsonCVE-2026-41432دور زدن امضای وب‌هوک Stripe در New-API به‌واسطهٔ secret خالی، که سهمیهٔ نامحدود بدون پرداخت می‌دهد، پیش از 0.12.10استنباطی
newapi_user_token_leak_results.json، oneapi_user_token_leak_results.json، newapi_ssrf_bypass_results.jsonCVE-2026-30886ارجاع مستقیم ناامن به شیء و دور زدن احراز هویت در نقطهٔ پایانی پروکسی ویدئوی New-API، که محتوای کاربران دیگر را افشا می‌کند و به مهاجم امکان می‌دهد اعتبارنامهٔ قربانی را در سمت بالادست خرج کنداستنباطی
litellm_ssti_prompts_results.jsonتوصیه‌نامهٔ واحدی نداردتزریق قالب سمت سرور Jinja2 علیه نقاط پایانی prompt و templateاستنباطی

محتوای هیچ فایلی به ما نرسید؛ هر سطر بر نام فایل تکیه دارد. در دو مورد ما به‌طور مستقل رسیدن تکنیک را به سنسور خودمان دیدیم، دور زدن سرآیند 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 MB می‌رسد، هرچند محتوای آن هرگز به ما نرسید. گزارهٔ قابل دفاع این است که گرداننده ابزار دور زدن پرداخت برای سهمیهٔ نامحدود را علیه New-API ساخته و اجرا کرده است و CVE-2026-41432 دقیقاً آسیب‌پذیری واقعی از همین نوع است. این‌که آن 2.4 مگابایت رکورد، شارژهای متقلبانهٔ تکمیل‌شده است یا فقط تلاش، برای ما دیدنی نیست. _exploited در نام فایل واژهٔ خود گرداننده برای آن است؛ ما رکوردها را نخواندیم.

ما هر دو خوانش را باز نگه می‌داریم. ممکن است مسابقه واقعی باشد و بهره‌جویی جریان کاری جداگانه‌ای باشد که گرداننده با عاملی که گزارش نگه می‌دارد دربارهٔ آن حرف نمی‌زند؛ یا ممکن است مسابقه پوششی برای یک عملیات سرقت باشد. ما این تمایز را برای دفاع‌کنندگان بی‌اهمیت ارزیابی می‌کنیم: توانمندی و خطر برای یک پنل در معرض اینترنت زیر هر دو خوانش یکسان است.

شکاف در فنون عملیاتی: عامل خود گرداننده جعبه‌ابزار را ممیزی کرد

سودمندترین بخش گفت‌وگوی بازیابی‌شده یک بازبینی کد است. گرداننده از عامل خود پرسید چرا نرخ موفقیت پویش این‌قدر پایین است و عامل سطر به سطر پویشگر را بررسی کرد.

پاسخ عامل، فشرده‌شده به آنچه برای یک دفاع‌کننده به کار می‌آید: پویشگر یک پروتکل را به فیلد host دریافتی از FOFA می‌چسباند که خود آن فیلد اغلب پروتکل دارد، و URL‌هایی به شکل https://https://<target> تولید می‌کند، پس میزبان‌های زنده مرده ثبت می‌شدند. استخر نخ نتایج را به ترتیب ایجاد و نه به ترتیب تکمیل جمع می‌کند، پس یک درخواست کند همه چیز را پشت خود متوقف می‌کند. CONCURRENCY=200 روی یک ماشین چهارهسته‌ای تایم‌اوت‌های خودش را می‌سازد. حذف تکراری بر پایهٔ IP پورت‌های معتبر دیگر روی همان نشانی را دور می‌ریزد. تثبیت temperature یک خطای سازگاری را شکست می‌خواند.

دربارهٔ تشخیص هانی‌پات آن‌ها، عامل بی‌پرده بود: قضاوت عمدتاً بر این است که پاسخ یکسان باشد یا کوتاه‌تر از پنج نویسه، که مدل‌های عادی را از رده خارج می‌کند و طعمه‌های خوب را از دست می‌دهد. و با آن‌که گرداننده از آن خواسته بود پاسخ‌دهندگان غیرچینی را شناسایی کند، کد هیچ منطق تشخیص زبان نداشت.

همچنین بهداشت امنیتی آن‌ها را علامت زد: کلید FOFA سخت‌کدشده در اسکریپت، مسیرهای مطلق نوشته‌شده برای /root در حالی که کاربر واقعی /home/developer است، except: pass که هر دلیل شکستی را می‌بلعد، یک نسخهٔ جداگانه از اسکریپت برای هر کشور، و فایل‌های نتیجه‌ای که هدف‌ها و روش‌های احراز هویت را بدون هیچ کنترل دسترسی یا پوشاندنی نگه می‌دارند.

آن نکتهٔ آخر قاب قیف را عوض می‌کند. نرخ موفقیت 0.61٪ ایالات متحده، میزان در معرض بودن را از چشم پویشگری با باگ‌های شناخته‌شده اندازه می‌گیرد، پس نرخ واقعی LiteLLM در معرض اینترنت بالاتر از آنچه نتایج خود گرداننده نشان می‌دهد است. آن‌ها اکنون عاملی دارند که به رفع آن باگ‌ها ادامه خواهد داد.

زیرساخت کسب درآمد

همان میزبان یک نمونهٔ New-API از خودشان را اجرا می‌کند: calciumion/new-api:latest در Docker، منتشرشده روی پورت 8901، با دادهٔ bind-mount شده کنار نتایج پویش. پیرامون آن 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…کلید API مربوط به FOFA خود گرداننده، سخت‌کدشده در 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 اعلام کند، همان بررسی‌ای که خریدار پیش از اعتماد به دسترسی دزدیده‌شده اجرا می‌کند.
  • فهرست کانال‌ها و جدول کاربران پنل خود را به‌صورت زمان‌بندی‌شده diff بگیرید. استخراج کلید و برون‌ریزی حساب پنل را در حالت کار عادی رها می‌کنند، پس چیز دیگری به شما خبر نمی‌دهد.

چه باید کرد

هر پروکسی LLM در معرض اینترنت را از لحظهٔ در معرض بودن نفوذشده فرض کنید. keyHunter یک کشور را در یک روز پویش می‌کند و روی CVE‌های منتشرشده در چند هفته پس از افشا کار می‌کند.

  • LiteLLM، One-API، New-API، Sub2API و هر چیز مشابه را پشت یک پروکسی معکوس با احراز هویت یا روی یک شبکهٔ خصوصی قرار دهید. هیچ‌کدام پیش‌فرض قابل دفاعی برای در معرض اینترنت بودن ندارند.
  • به نسخهٔ جاری وصله کنید. از شش توصیه‌نامهٔ بالا، RCE مربوط به LiteLLM در فهرست آسیب‌پذیری‌های شناخته‌شدهٔ بهره‌جویی‌شدهٔ CISA است و تسخیر حساب Sub2API بهره‌جویی‌شده در فضای واقعی تأیید شده است.
  • کلید اصلی را عوض کنید. sk-1234 مقداری است که در شروع سریع خود LiteLLM آمده و یکی از تنها سه اعتبارنامه‌ای است که این گرداننده به آزمودنش زحمت می‌دهد.
  • دسترسی به /openapi.json و /docs را محدود کنید. یک کلاینت ناشناس نباید بتواند سطح API مدیریتی شما را دانلود کند.
  • برای هر کلید مجازی سقف بودجه و دامنه تعیین کنید، تا استخراج چیزی به دست دهد که ارزش بازفروش نداشته باشد.
  • اگر پرداخت Stripe را از طریق New-API می‌گیرید، تأیید کنید که secret امضای وب‌هوک واقعاً تنظیم شده است. یک secret خالی تمام ماجرای 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 (دور زدن احراز هویت با سرآیند Host، تزریق SQL پیش از احراز هویت، تزریق فرمان، SSTI، SSRF علیه LiteLLM، Sub2API و New-API)
فرار از دفاع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، سرریز سهمیه)؛ T1496 Resource Hijacking (لوله‌کشی بازفروش برای استنتاج برداشت‌شده)

روش‌شناسی و یادداشت‌های تحلیل‌گر

تقریباً همهٔ آنچه در بالا آمد خروجی‌ای است که عامل خود گرداننده میان 16 و 20 اوت 2026 روی یکی از هانی‌پات‌های ما ارسال کرد: 283 مسیر فایل متمایز، فهرست سرویس‌ها و کانتینرها، خلاصهٔ نتایج پویش، و جست‌وجوهای خود عامل در حافظهٔ WeChat‌اش.

بنابراین آنچه در دست داریم زیرمجموعه‌ای از سامانهٔ واقعی آن‌ها است، محدود به هر آنچه عاملشان اتفاقاً شمارش کرد. محتوای هیچ فایلی به ما نرسید؛ ما نام‌ها، اندازه‌ها و مهرهای زمانی را از فهرست پوشه‌های خود گرداننده داریم. بازده‌های پویش و شمارش داوری‌ها ارقام خود گرداننده است که ابزارشان گزارش کرده و ما هیچ‌یک را مستقلاً تأیید نکرده‌ایم. عامل آن‌ها باگ‌های واقعی در پویشگرشان یافت، پس نرخ‌های موفقیت را باید کف میزان در معرض بودن خواند و نه اندازه‌گیری آن.

گفت‌وگوی چینی‌زبان ترجمه شده است. رشته‌ها، مسیرها و شناسه‌های فنی هم در این گزارش و هم در ترجمه عیناً باقی مانده‌اند.

چهار محدودیت بر آنچه این گزارش پشتیبانی می‌کند. انتساب در حد یک خوشهٔ فعالیت روی زیرساخت مستقر در چین با استفادهٔ سراسری از زبان چینی متوقف می‌شود؛ پیوندی با گروهی نام‌دار وجود ندارد و ما چنین پیوندی ارائه نمی‌دهیم. قصد به‌واقع میان ورودی مسابقه و عملیات سرقت مبهم است. محتوای هیچ فایل بهره‌جویی به ما نرسید، پس همهٔ شش نقشه‌نگاری CVE بر نام فایل‌ها تکیه دارد؛ برای دو مورد، تکنیک به‌طور مستقل در حال رسیدن به سنسور ما مشاهده شد که تکنیک را تأیید می‌کند و نه فایل را. این‌که کلید دزدیده‌شده‌ای بعداً خرج شده است یا نه دانسته نیست: خروجی گرداننده فقط شمارش می‌دهد، 3 استخراج‌شده و 17 برون‌ریزی‌شده، و هیچ مقدار کلیدی برای رهگیری نمی‌دهد.

نشانی‌های شخص ثالث که پویشگر آن‌ها به آن‌ها دست زد منتشر نشده است، از جمله میزبانی که خودشان به‌عنوان هانی‌پات علامت زدند و به پژوهش شخص دیگری تعلق دارد. کلید API مربوط به FOFA آن‌ها اینجا کوتاه شده است.

مجموعه‌های کامل شاخص‌ها و ثبت‌های پایه در صورت درخواست برای پژوهشگران در دسترس است: contact@kinryu.sh.

How to cite
Kinryū Labs (2026). keyHunter: عملیاتی برای برداشت کلید پروکسی‌های LLM که جعبه‌ابزار خودش را افشا کرد. https://kinryu.sh/fa/reports/keyhunter-llm-proxy-key-harvesting/