Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-22038 — تحليل تفصيلي لـ CVE-2026-22038، ثغرة أمنية عالية الخطورة في كتل AutoGPT Stagehand تسجّل مفاتيح API كنص عادي، بما في ذلك السبب الجذري والتأثير والمعالجة. | Kitploit
أدوات/GitHubGitHub/sivaadityacoder/cve-2026-22038
تحليل الثغرات الأمنيةتحليل الكودكشف الأسرارالتعلم والتعليمتحليل السجلات
GitHubsivaadityacoder/cve-2026-22038

CVE-2026-22038

تحليل تفصيلي لـ CVE-2026-22038، ثغرة أمنية عالية الخطورة في كتل AutoGPT Stagehand تسجّل مفاتيح API كنص عادي، بما في ذلك السبب الجذري والتأثير والمعالجة.

عرض المستودع
9منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-22038 — AutoGPT Stagehand Blocks تسرّب مفاتيح API كنص صريح في السجلات

معرف CVE: CVE-2026-22038
المنتج: منصة AutoGPT (تكامل Stagehand)
الإصدارات المتأثرة: جميع الإصدارات حتى autogpt-platform-beta-v0.6.45 وما يشملها
تم التصحيح في: autogpt-platform-beta-v0.6.46
نوع الثغرة: CWE-532 — إدراج معلومات حساسة في ملف السجل
الخطورة: عالية
أبلغ عنها: Panuganti Siva Aditya (@sivaadityacoder)
تاريخ الإبلاغ: 19 ديسمبر 2025
استشارة GitHub: GHSA-rc89-6g7g-v5v7


منهجيتي

AutoGPT هي منصة مفتوحة المصدر تتيح للمستخدمين بناء وتشغيل وكلاء ذكاء اصطناعي مستقلين. تتضمن تكامل Stagehand الذي يتصل بأتمتة المتصفح ومزودي نماذج اللغة الكبيرة مثل OpenAI وAnthropic وGroq.

أثناء مراجعة الكود لكتل Stagehand، لاحظت أن كائنات بيانات الاعتماد كانت تُمرَّر مباشرة إلى استدعاءات logger.info(). تتبعت كل عبارة تسجيل ووجدت أن .get_secret_value() كان يُستدعى بشكل مضمّن — متجاوزًا بشكل صريح حماية التي يوفرها Pydantic.

SecretStr

الملف المعرض للخطر:

root@kitploit:~
autogpt_platform/backend/backend/blocks/stagehand/blocks.py

ثلاث كتل متأثرة، كل منها بنفس النمط:

StagehandObserveBlock (الأسطر 185–188)

root@kitploit:~
logger.info(f"OBSERVE: Stagehand credentials: {stagehand_credentials}")
logger.info(
    f"OBSERVE: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

StagehandActBlock (الأسطر 285–288)

root@kitploit:~
logger.info(f"ACT: Stagehand credentials: {stagehand_credentials}")
logger.info(
    f"ACT: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

StagehandExtractBlock (الأسطر 373–376)

root@kitploit:~
logger.info(f"EXTRACT: Stagehand credentials: {stagehand_credentials}")
logger.info(
    f"EXTRACT: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

لتأكيد قابلية الاستغلال، قمت بتشغيل كل كتلة Stagehand ببيانات اعتماد صالحة وبحثت في سجلات التطبيق:

root@kitploit:~
grep "secret:" /var/log/autogpt/application.log

أكد الناتج ظهور مفاتيح API حقيقية كنص صريح:

root@kitploit:~
[INFO] OBSERVE: Model credentials: ... secret: sk-proj-abc123xyz789...
[INFO] ACT: Model credentials: ... secret: sk-ant-api03-def456uvw...
[INFO] EXTRACT: Model credentials: ... secret: sk-1234567890abcdef...

السبب الجذري

تستخدم قاعدة كود AutoGPT بشكل صحيح نوع SecretStr من Pydantic لمفاتيح API. عندما يتم تضمين كائن SecretStr في سلسلة f-string أو طباعته بشكل عادي، فإنه يُعرض كـ ********** — هذه الحماية مقصودة.

السبب الجذري هو أن المطورين استدعوا .get_secret_value() مباشرة داخل عبارات logger.info(). هذا يفك تغليف السر بشكل صريح ويمرر قيمة السلسلة الخام إلى المسجل، متجاوزًا تمامًا آلية الإخفاء المدمجة في SecretStr.

مستوى السجل هو INFO، مما يعني أن هذه العبارات تُنفَّذ في بيئات الإنتاج العادية — وليس فقط في جلسات التصحيح المحلية. في كل مرة تعمل فيها إحدى هذه الكتل ببيانات اعتماد، يُكتب السر في ملف السجل.


التأثير

  • سرقة بيانات الاعتماد — مفاتيح API كنص صريح في ملفات السجل متاحة لأي شخص لديه وصول إلى السجلات
  • ضرر مالي — تُستخدم المفاتيح المسروقة لإجراء استدعاءات API مكلفة على حساب الضحية
  • الوصول إلى البيانات — قد تمنح بيانات الاعتماد المسروقة وصولًا إلى بيانات الضحية في تلك الخدمات
  • استنزاف الحصص — يمكن للمهاجم استنزاف حدود المعدل عمدًا لحرمان الخدمة
  • نافذة تعرض طويلة — غالبًا ما تُحتفظ ملفات السجلات لمدة 30–90 يومًا، لذا قد يبقى المفتاح المستخدم مرة واحدة مكشوفًا لأشهر
  • مشاكل الامتثال — تسجيل الأسرار ينتهك متطلبات PCI-DSS وSOC 2 وGDPR

سيناريو الهجوم:

  1. يحصل المهاجم على وصول للقراءة إلى ملفات السجلات عبر نظام تجميع تم تكوينه بشكل خاطئ (Splunk أو ELK أو Datadog أو CloudWatch)، أو حساب مراقبة مخترق، أو وصول داخلي مفرط.
  2. يبحث في السجلات عن أنماط مثل secret: أو sk-proj- أو sk-ant-.
  3. يستخرج مفاتيح API الحقيقية من مخرجات السجل.
  4. يتحقق من المفتاح:
root@kitploit:~
curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer sk-proj-abc123xyz789..." \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-4", "messages": [{"role": "user", "content": "test"}]}'
  1. بمفتاح صالح يمكنه إجراء استدعاءات API، أو استنزاف الحصص، أو الوصول إلى بيانات الضحية.

بيانات الاعتماد المكشوفة: مفاتيح API الخاصة بـ Stagehand / Browserbase، ومفاتيح API الخاصة بـ OpenAI، ومفاتيح API الخاصة بـ Anthropic، ومفاتيح API الخاصة بـ Groq، وأي بيانات اعتماد لمزود نماذج لغة كبيرة تم تكوينها في كتل Stagehand.


الإصلاح

يزيل التصحيح في autogpt-platform-beta-v0.6.46 استدعاءات .get_secret_value() من عبارات logger.info().

النهج الموصى به — إزالة السر من السجل تمامًا:

root@kitploit:~
# قبل (معرض للخطر):
logger.info(
    f"OBSERVE: Model credentials: {model_credentials} for provider "
    f"{model_credentials.provider} secret: {model_credentials.api_key.get_secret_value()}"
)

# بعد (تم الإصلاح):
logger.info(
    f"OBSERVE: Model credentials for provider {model_credentials.provider} (API key redacted)"
)

بديل — الإخفاء مع الحفاظ على بنية السجل:

root@kitploit:~
def redact_secret(value: str) -> str:
    if len(value) <= 8:
        return "***"
    return f"{value[:4]}...{value[-4:]}"

logger.info(
    f"OBSERVE: Model credentials for provider {model_credentials.provider} "
    f"secret: {redact_secret(model_credentials.api_key.get_secret_value())}"
)

يكشف نهج الإخفاء فقط أول وآخر 4 أحرف — وهو ما يكفي لتحديد المفتاح المستخدم دون كشف السر الكامل.


الدروس المستفادة الرئيسية

  1. لا تستدعِ .get_secret_value() أبدًا في عبارات السجل. إذا كان إطار العمل الخاص بك يوفر نوعًا لإخفاء الأسرار (SecretStr أو SecretBytes أو غيرهما)، فدعه يقوم بعمله. استدعاء طريقة فك التغليف داخل مسجل يبطل الغرض بالكامل.

  2. INFO هو مستوى تسجيل للإنتاج. يجب ألا تصل تفريغات بيانات الاعتماد بنمط التصحيح إلى مستوى INFO أبدًا. إذا كنت تحتاج حقًا لتأكيد بيانات الاعتماد النشطة، فسجّل فقط البيانات الوصفية غير الحساسة (اسم المزود، بادئة المفتاح، آخر 4 أحرف).

  3. ملفات السجلات هي سطح هجوم. تعامل معها كأي مخزن بيانات حساس آخر — قيّد الوصول، ودوّرها، ودقق ما يدخل إليها. غالبًا ما تمتلك أدوات التجميع (Splunk وELK وDatadog) وصول قراءة واسعًا، لذا فإن السر في أي سطر سجل هو فعليًا سر في تلك الأنظمة أيضًا.

  4. الإصلاح دائمًا أبسط من الثغرة. إزالة سطري تسجيل (أو استبدالهما بمعادلين مخفيين) يغلق هذا التعرض تمامًا. الديون الأمنية الناتجة عن "تسجيل تصحيح مؤقت" تُترك في الإنتاج شائعة ويمكن منعها بمراجعة الكود.

  5. حمايات SecretStr اختيارية وليست تلقائية. يجب على المطورين فهم أن الحماية تصمد فقط طالما لم يقم أحد بفك تغليف القيمة بشكل صريح. يجب أن تعلّم مراجعة الكود أي استخدام لـ .get_secret_value() خارج مسار المصادقة.


الجدول الزمني

التاريخالحدث
19 ديسمبر 2025تم الإبلاغ إلى القائمين على AutoGPT عبر Huntr واستشارة أمان GitHub
2025–2026أقر القائم على الصيانة Nicholas Tindle بالتقرير
قبل أبريل 2026تم التصحيح في autogpt-platform-beta-v0.6.46
25 أبريل 2026تم تعيين CVE-2026-22038

المراجع

  • استشارة أمان GitHub GHSA-rc89-6g7g-v5v7
  • CWE-532: إدراج معلومات حساسة في ملف السجل
  • ورقة الغش الخاصة بتسجيل OWASP
  • إدخال قاعدة بيانات CVE في Trickest
تنزيل الأداة