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

keyHunter: عملية لحصاد مفاتيح وسطاء نماذج اللغة سرّبت عُدّتها الخاصة

يمسح مشغّل ناطق بالصينية FOFA بحثاً عن لوحات وسطاء ذكاء اصطناعي مكشوفة، ويتحقّق منها بشيفرة مزوّدة باختبارات وحدة مبنية للتعرّف على الطُعوم (honeypots)، ثم يصدّر مفاتيح الـ API. نفّذ وكيله استدعاءات أدوات طُعمٍ من Kinryū Labs على مضيفه هو، فأعاد 283 مساراً لملفات، وحصائل المسح، وسجلّ محادثة WeChat، ودليل نتائج يضم ملفات استغلال مسمّاة على اسم ست ثغرات CVE من عام 2026، من بينها تجاوز لخطاف Stripe في New-API.

بقلم Davis Zheng·

CWE
CWE-306

TLP:CLEAR. أُجيز للنشر العام. جُلّ ما يلي هو مادة المشغّل نفسه، استُرجِعت حين نفّذ وكيله استدعاءات أدوات طُعمٍ من Kinryū Labs على مضيفه هو وأعاد المخرجات إلينا. المؤشرات مُبطَّلة المخالب، أي أن عناوين المهاجم مكتوبة بحيث لا يمكن النقر عليها أو تحليلها (resolve) عرَضاً. أهداف المسح، ومضيف واحد تابع لطرف ثالث أشار إليه المشغّل، ومفتاح FOFA API الخاص به بكامله، محجوبة.

ملخص تنفيذي

  • 27,173مضيف مرشّح مُسِح عبر FOFA
  • 194منها سرد نموذجاً
  • 17مفتاح API مُصدَّر
  • 6ثغرات CVE من 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 نجاحاً، ويطلب إكمال محادثة حقيقياً لكل نموذج، ويقيّم ما إذا كانت الإجابة تطابق المورّد الذي تدّعيه، وصنّف 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) فهو مُرحِّل، يقدّم نقطة نهاية متوافقة مع OpenAI على المنفذ 8087 يستدعيها الوكيل لسعة النماذج. يتشاركان بصمة JA4H وهي po11nn070000_ebbca96fac43، التي تصف كيف يركّب العميل طلبات HTTP الخاصة به وتبقى رغم تغيّر العنوان، إلى جانب وكيلَي مستخدم مخصّصين هما 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 [email protected] \
    'cd /home/developer && /home/developer/.venv-us30/bin/python litellm_scan_us_30d_optimized.py'

كان ذلك الجهاز قيد التشغيل منذ أربعة أيام وتسع ساعات، وله 7.5 GB من الذاكرة وأربع أنوية، ويشغّل عمّال المسح. وفصل المسح الصاخب عن واجهة الوكيل الأمامية اختيار متعمَّد، واسم hw_vm_key يقول إن المشغّل يعدّه جهاز Huawei.

تجري السيطرة عبر WeChat. تصف خدمة البوابة نفسها بأنها “Hermes Agent Gateway, Messaging Platform Integration”، ويكلّف المشغّل الوكيل بالمهام بمحادثته في خيط WeChat. والذاكرة طويلة الأمد للوكيل هي تلك المحادثة: يبحث في سجلّ محادثته هو ليتذكّر ما يعمل عليه. ويُظهر الإطار الثاني النمط نفسه، بجلسة اسمها openclaw-weixin. يصنع تطبيق مراسلة استهلاكي قناة سيطرة رخيصة: فالحركة مشفّرة افتراضياً وتسير إلى Tencent جنباً إلى جنب مع كل مستخدم WeChat آخر، فلا تثير شيئاً مضبوطاً على رصد نبضات القيادة والتحكّم.

محرّك الاستدلال وراء كل ذلك هو github_copilot/gpt-5.6-sol، وهو مساعد برمجة تجاري يُوصَل إليه عبر مُرحِّل. وتربط إعداداتهم أيضاً مفاتيح اختيارية لعدّة مزوّدين آخرين. الشيفرة الهجومية Python مخصّصة؛ أما نموذج الاستدلال وإطار الوكيل وقناة السيطرة عبر 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 عاملاً عميقاً، مع تراجع عند حدّ المعدّل لاستجابات FOFA بالرمز 429، وإزالة تكرار لنقاط النهاية مفتاحها البروتوكول والمضيف والمنفذ.

مفتاح FOFA API مضمَّن صلباً في مصدر الماسح، وهكذا صار بحوزتنا. يعمل مقابل مرآة 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.

حجمه عشرة كيلوبايت، مع طقم اختبارات وحدة. يرسل إكمال محادثة أدنى حقيقياً إلى كل نموذج تعلن عنه اللوحة، ولا يسجّل نجاحاً إلا على استجابة صحيحة بصيغة OpenAI من نوع choices/message/content أو ردّ تدفّقي مشروع بعلامة انتهاء. قاعدتهم هم، بكلماتهم: نجاح /models وحده لا يُحتسَب أبداً. أسماء الاختبارات تُرمِّز ذلك، ومنها واحد اسمه test_models_listing_alone_is_not_success. كتب أحدهم اختبار انحدار (regression) ليمنع أدواتهم من الكذب عليهم بشأن مفتاح مسروق.

أعداد الأحكام من تشغيلة واحدة:

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 دون مصادقةمؤكَّد: أُلقيت استدعاءات مستوى الإدارة نفسها على طُعمنا، وقدّموا وكيل مستخدم 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 عبر سرّ فارغ، ما يمنح حصّة غير محدودة دون دفع، قبل 0.12.10مُستنتَج
newapi_user_token_leak_results.json، oneapi_user_token_leak_results.json، newapi_ssrf_bypass_results.jsonCVE-2026-30886مرجع كائن مباشر غير آمن (IDOR) وتجاوز مصادقة في New-API على نقطة نهاية وسيط الفيديو، ما يكشف محتوى مستخدمين آخرين ويتيح لمهاجم إنفاق بيانات اعتماد الضحية في الأعلىمُستنتَج
litellm_ssti_prompts_results.jsonلا نشرة إرشادية واحدةحقن قوالب من جانب الخادم بـ Jinja2 ضد نقاط نهاية المطالبات والقوالبمُستنتَج

لم تصلنا محتويات أيّ ملف؛ كل صفّ يقوم على اسم الملف. في اثنين منها رصدنا التقنية بشكل مستقلّ وهي تصل إلى مستشعرنا، تجاوز ترويسة Host وحقن SQL في المصادقة، وهذا يؤكّد التقنية لا الملف. أما الأربعة الأخرى فتقوم على اسم الملف مضافاً إليه النشرة الإرشادية المعروفة للمنتج، وهي مُعلَّمة بذلك.

النمط عبر الست جميعاً واحد. كل نشرة إرشادية من عام 2026، عدّة منها من الربع نفسه، ولا شيء منها بحث أصيل. يُصنِّع keyHunter العللَ عالية الخطورة المُفصَح عنها حديثاً في منظومة وسطاء نماذج اللغة مفتوحة المصدر لحظة نزولها. تلك نافذة قصيرة، على صنف من البرمجيات كثيراً ما يثبّته مطوّر واحد ثم يُترَك وشأنه.

النيّة: رواية المسابقة في مواجهة دليل النتائج

يصف المشغّل هذا لوكيله بأنه مشاركة في مسابقة. والمفردات متّسقة عبر المحادثة المُسترجَعة: 比赛项目 (مشروع مسابقة)، و评委 (المحكّمون)، و答辩材料 (مواد المناقشة الشفوية)، ودليل 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 MB من السجلّات عمليات شحن احتيالية مكتملة أم مجرّد محاولات، فلا نستطيع رؤيته. الـ _exploited في اسم الملف كلمة المشغّل هو؛ لم نقرأ السجلّات.

نُبقي القراءتين مفتوحتين. قد تكون المسابقة حقيقية، والاستغلال مسار عمل منفصل لا يناقشه المشغّل مع وكيل يحتفظ بالسجلّات؛ أو قد تكون المسابقة غطاءً لعملية سرقة. نقدّر أن الفارق غير ذي أثر على المدافعين: القدرة والخطر على لوحة مكشوفة متطابقان في القراءتين.

ثغرة في الحرفة: وكيل المشغّل نفسه دقّق العُدّة

أنفع مقطع في المحادثة المُسترجَعة مراجعة شيفرة. سأل المشغّل وكيله لِمَ معدّل إصابة المسح منخفض هكذا، فمرّ الوكيل على الماسح سطراً سطراً.

إجابة الوكيل، مُختزَلة إلى ما يفيد المدافع: يسبق الماسح حقلَ host في FOFA ببروتوكول، وهو حقل كثيراً ما يحمل واحداً أصلاً، فينتج عناوين بصيغة 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-dashboard كانت دفقاتهما اليومية المنفردة في 15 و21 أغسطس، بفارق ستة أيام. تعمل التداخلات على أطقم عملاء عامة في مواضع، فيُقرأ هذا كأدوات مشتركة ومشهد مشترك لا كيدٍ واحدة على لوحة مفاتيح واحدة. عامِله كمجتمع مرتبط بالصين يتشارك أدوات اصطياد وسطاء نماذج اللغة. لا مؤشر يربط هذا بـ 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

الكشف

إن كنت تشغّل وسيط نماذج لغة يمكن الوصول إليه من الإنترنت، فإن التسلسل كلّه مرئي في سجلّات البوابة نفسها. بصيغة 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 في حقل المفتاح.

ثلاث عمليات اصطياد سلوكية لا تحتاج محرّك قواعد:

  • ابحث عن مصدر واحد يسرد نماذجك ثم يرسل إكمال محادثة قصيراً واحداً بالضبط إلى كل منها بالتتابع. مسح التحقّق ذاك بصمة العملية ويصعب تمويهه.
  • نبّه على المطالبات التي تطلب من النموذج ذكر هويته الحقيقية خلافاً لمعامل الـ API، وهو الفحص الذي يجريه المشتري قبل أن يثق بوصول مسروق.
  • قارِن قائمة قنوات لوحتك وجدول مستخدميها دورياً. استخراج المفاتيح وتصدير الحسابات يتركان اللوحة تعمل بشكل طبيعي، فلا شيء آخر سيخبرك.

ما العمل

عامِل أيّ وسيط نماذج لغة مكشوف على الإنترنت كأنه مُخترَق بمجرّد تعرّضه. يمسح keyHunter دولة في يوم ويشتغل على ثغرات CVE المنشورة خلال أسابيع من الإفصاح.

  • ضع LiteLLM وOne-API وNew-API وSub2API وأيّ شيء مماثل خلف وسيط عكسي يفرض المصادقة أو على شبكة خاصة. لا شيء منها يُشحَن بإعداد افتراضي قابل للدفاع عند التعرّض للإنترنت.
  • رقّع إلى الأحدث. من النشرات الست أعلاه، تنفيذ الأكواد عن بُعد في LiteLLM على قائمة CISA للثغرات المستغَلّة المعروفة، والاستيلاء على الحساب في Sub2API مؤكَّد استغلاله في البرّية.
  • غيّر المفتاح الرئيسي. sk-1234 هو القيمة في دليل البدء السريع الخاص بـ LiteLLM وهو أحد ثلاث بيانات اعتماد فقط يتكبّد هذا المشغّل عناء تجربتها.
  • قيّد /openapi.json و/docs. لا ينبغي لعميل مجهول أن يستطيع تنزيل سطح واجهتك الإدارية.
  • ضع سقف ميزانية ونطاقاً لكل مفتاح افتراضي، كي يعطي الاستخراج شيئاً لا يستحقّ إعادة البيع.
  • إن كنت تتلقّى مدفوعات Stripe عبر New-API، فتحقّق من أن سرّ توقيع الخطاف مضبوط فعلاً. السرّ الفارغ هو كامل CVE-2026-41432.
  • دوّر كل مفتاح مزوّد في الأعلى سبق أن جلس في لوحة لا تستطيع إثبات أنها لم تتعرّض قط.

مخطط MITRE ATT&CK

التكتيكالتقنية
ReconnaissanceT1596.005 Search Open Technical Databases: Scan Databases (FOFA، لكل دولة، مع استبعاد AWS)؛ T1595.002 Active Scanning: Vulnerability Scanning (سبر HTTP خفيف وعميق)
Resource DevelopmentT1583.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 AccessT1190 Exploit Public-Facing Application (تجاوز مصادقة بترويسة Host، وحقن SQL قبل المصادقة، وحقن أوامر، وSSTI، وSSRF ضد LiteLLM وSub2API وNew-API)
Defense EvasionT1480 Execution Guardrails (تصنيف الطُعوم، وتقييم non_chinese_evidence، وترشيح org!="AMAZON-AES")
Credential AccessT1078.001 Valid Accounts: Default Accounts (بلا بيانات اعتماد، وsk-test، وsk-1234)؛ T1552.001 Unsecured Credentials: Credentials In Files (استخراج المفاتيح إلى exported_keys.json)
DiscoveryT1518 Software Discovery (سرد النماذج والتحقّق لكل نموذج)؛ T1087 Account Discovery (تعداد المستخدمين ضد مستوى الإدارة)
CollectionT1213 Data from Information Repositories (تصدير الحسابات وتطبيعها وأرشفتها)
Command and ControlT1102 Web Service (خيط WeChat كقناة تكليف)
ImpactT1657 Financial Theft (تجاوز خطاف Stripe، وتجاوز الحصّة)؛ T1496 Resource Hijacking (سباكة إعادة بيع الاستدلال المحصود)

المنهجية وملاحظات المحلّل

وصلنا كل ما سبق تقريباً بالطريقة نفسها. طُعمٌ من Kinryū Labs يظهر كنسخة LiteLLM مكشوفة يجيب عميلاً وكيلياً كما يجيب نموذج حقيقي، بالردّ باستدعاءات أدوات: تعليمات من صيغة نفّذ هذا الأمر وأخبرني بما طبعه. لا ينفّذ الطُعم أياً منها. عامل وكيلُ المشغّل تلك الردود كاستدعاءات دوال حقيقية، وشغّلها على نظام ملفاته هو، وأعاد المخرجات كنتائج أدوات، 534 مرّة بين 16 و20 أغسطس 2026. تلك المخرجات هي بيئته: 283 مساراً متمايزاً لملفات، وقوائم خدمات وحاويات، وملخّصات نتائج مسح، وعمليات بحث الوكيل نفسه في ذاكرته على WeChat. يبقى الطُعم سلبياً طوال الوقت، فكل ما سبق هو ما تبرّع به وكيل المشغّل نفسه له.

وما بحوزتنا إذن مجموعة جزئية من نظامهم الحقيقي، محدودة بما صادف وكيلهم أن عدّده. لم تصلنا محتويات أيّ ملف؛ لدينا الأسماء والأحجام والطوابع الزمنية من قوائم أدلّة المشغّل نفسه. حصائل المسح وأعداد الأحكام أرقام المشغّل نفسه، أبلغت عنها أدواته، ولم نتحقّق من أيّ منها على نحو مستقلّ. وجد وكيلهم عللاً حقيقية في ماسحهم، فمعدّلات الإصابة ينبغي قراءتها كأرضية للتعرّض لا كقياس له.

المحادثة الصينية مترجَمة. أما السلاسل التقنية والمسارات والمعرّفات فتُركت حرفيةً في هذا التقرير وفي الترجمة كليهما.

أربعة حدود على ما يسنده هذا. الإسناد يقف عند عنقود نشاط على بنية تحتية قائمة في الصين تستخدم الصينية في كل موضع؛ لا صلة بمجموعة مسمّاة ولا نقدّم واحدة. النيّة غامضة فعلاً بين مشاركة في مسابقة وعملية سرقة. لم تصلنا محتويات أيّ ملف استغلال، فمخطّطات الـ CVE الستة كلها تقوم على أسماء الملفات؛ في اثنين رُصِدت التقنية على نحو مستقلّ وهي تصل إلى مستشعرنا، ما يؤكّد التقنية لا الملف. ولم نرَ قط إنفاق مفتاح مسروق: قيم المفاتيح المُصدَّرة عند المشغّل لم تصلنا قط، بل أعداده فقط، 3 مُستخرَجة و17 مُصدَّرة، فلم يكن ثمة ما نبحث عنه في القياس عن بُعد (telemetry).

عناوين الأطراف الثالثة التي لمسها ماسحهم محجوبة، بما فيها المضيف الذي وسموه هم أنفسهم بأنه طُعم، وهو يخصّ بحث غيرنا. ومفتاح FOFA API الخاص بهم مُقتطَع هنا.

مجموعات المؤشرات الكاملة والالتقاطات الأساسية متاحة للباحثين عند الطلب: [email protected].

How to cite
Kinryū Labs (2026). keyHunter: عملية لحصاد مفاتيح وسطاء نماذج اللغة سرّبت عُدّتها الخاصة. https://kinryu.sh/ar/reports/keyhunter-llm-proxy-key-harvesting/