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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-47630 — تحليل تقني لثغرة أمنية وإثبات مفهوم لـ CVE-2026-47630، وهي استدعاء dlopen تعسفي عبر TRITON_BATCH_STRATEGY_PATH في خادم NVIDIA Triton للاستدلال، مما يتيح تنفيذ كود أصلي، مع إرشادات للكشف والتخفيف. | Kitploit
أدوات/GitHubGitHub/s1ko/cve-2026-47630
تحليل الثغرات الأمنيةالاستغلالأمن الذكاء الاصطناعي
GitHubs1ko/cve-2026-47630

CVE-2026-47630

تحليل تقني لثغرة أمنية وإثبات مفهوم لـ CVE-2026-47630، وهي استدعاء dlopen تعسفي عبر TRITON_BATCH_STRATEGY_PATH في خادم NVIDIA Triton للاستدلال، مما يتيح تنفيذ كود أصلي، مع إرشادات للكشف والتخفيف.

عرض المستودع
منذ يوم واحدلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-47630 — NVIDIA Triton Inference Server: استدعاء dlopen عشوائي عبر TRITON_BATCH_STRATEGY_PATH

ثغرة اجتياز المسار المطلق في محمّل استراتيجية التجميع المخصص داخل triton-inference-server/core. تُمرَّر معلمة من معلمات إعداد النموذج دون أي تحقق إلى dlopen(RTLD_NOW | RTLD_LOCAL)، لذا فإن أي شخص قادر على التأثير في config.pbtxt لنموذج ما يحصل على تنفيذ كود أصلي داخل عملية خادم Triton وقت تحميل النموذج.

إقرار NVIDIA في النشرة 5865 نصّه الحرفي: CVE-2026-47630: s1ko.

ملخص

يقبل Triton معلمة TRITON_BATCH_STRATEGY_PATH لكل نموذج من config.pbtxt الخاص بالنموذج. وحتى الإصدار 26.05 كانت القيمة تُعامل كمسار نظام ملفات عشوائي وتُمرَّر دون تعديل إلى dlopen. لم يكن هناك أي فحص احتواء، ولا قائمة سماح، ولا تحقق من التوقيع أو التجزئة. كانت المسارات المطلقة وتسلسلات الاجتياز والروابط الرمزية جميعها مقبولة.

يحلّل RTLD_NOW كل رمز فورًا وينفّذ إجراءات __attribute__((constructor)) / .init_array الخاصة بالكائن قبل أن يعود dlopen. لذلك يكون التنفيذ غير مشروط بنجاح التحميل — لا حاجة لوجود أي من نقاط الدخول TRITONBACKEND_ModelBatch* لكي تعمل الحمولة، وهي تعمل بصلاحيات عملية Triton (غالبًا root في حاويات NGC).

التنفيذ

مسار الكود (اعتبارًا من 26.05)

src/backend_model.cc — يصل إدخال المهاجم إلى batch_libpath، ولا يُتحقق منه إلا للتأكد من وجوده:

root@kitploit:~
if (model_config.parameters().contains("TRITON_BATCH_STRATEGY_PATH")) {
  batch_libpath = model_config.parameters()
                      .at("TRITON_BATCH_STRATEGY_PATH")
                      .string_value();
  bool exists = false;
  RETURN_IF_ERROR(FileExists(batch_libpath, &exists));
  if (!exists) {
    return Status(
        triton::common::Error::Code::NOT_FOUND,
        ("Batching library path not found: " + batch_libpath).c_str());
  }
}

واللافت للانتباه غياب أي استدعاء لـ IsChildPathEscapingParentPath، الذي طبّقه Triton بالفعل على مسارات التسميات ومسارات مكتبات الواجهة الخلفية في أماكن أخرى من الملف نفسه.

src/backend_model.cc — تمرّر SetBatchingStrategy القيمة:

root@kitploit:~
Status TritonModel::SetBatchingStrategy(const std::string& batch_libpath)
{
  std::unique_ptr<SharedLibrary> slib;
  RETURN_IF_ERROR(SharedLibrary::Acquire(&slib));
  RETURN_IF_ERROR(slib->OpenLibraryHandle(batch_libpath, &batch_dlhandle_));

src/shared_library.cc — المصب (sink):

root@kitploit:~
*handle = dlopen(path.c_str(), RTLD_NOW | RTLD_LOCAL);

سبل الوصول

ثلاثة مسارات عملية للتحكم في model_config.parameters():

  1. مستودع نماذج متعدد المستأجرين. يستطيع المستأجر الذي يملك config.pbtxt لنموذجه زرع ملف .so في دليله الخاص وتوجيه المعلمة إليه. تعمل الحمولة بصلاحيات الخادم، مما يتيح الوصول إلى أوزان وأسرار وGPU الخاصة بكل مستأجر آخر.
  2. واجهة برمجة تجاوز الملف (File-override API). تتيح TRITONSERVER_ServerLoadModelWithParameters مع بادئة المعاملات الموثقة file:<rel-path> للمتصل الذي يملك صلاحيات تحميل النماذج إرسال config.pbtxt و.so في طلب واحد وتشغيل التحميل فورًا. لا حاجة لأي وصول إلى نظام الملفات خارج الواجهة.
  3. مرآة مخزن نماذج مخترقة. مرايا S3 أو GCS أو Azure Blob أو NGC التي تُعامل كمصدر موثوق لقطع النماذج. من يتحكم في المرآة يسلّم الملفين معًا؛ يجلبها Triton ثم يستدعي dlopen عند الطلب.

إثبات المفهوم

يحتوي poc/ على بدائية الاستغلال (primitive) المختزلة إلى ما يفعله OpenLibraryHandle. ملفات مصدر فقط — ابنِها بنفسك:

root@kitploit:~
$ cd poc && ./build.sh
$ gcc -O0 -o test_dlopen test_dlopen.c -ldl
$ ./test_dlopen ./evil.so
dlopen OK, handle=0x55d1779652c0
$ cat /tmp/triton_dlopen_rce_proof.log
[triton-dlopen-rce] constructor fired @ Fri May  1 09:56:56 2026
  pid=240157  uid=1000  euid=1000  cwd=/opt/poc

الحمولة خاملة: تضيف سطرًا واحدًا يسجّل pid وuid وeuid وcwd. تم التحقق على Debian 13 مع GCC 14.2 وبنية x86_64.

للتشغيل من جهة Triton، ضع ملف evil.so المبني بجوار poc/config.pbtxt في مستودع النماذج ثم حمّل النموذج — عبر التحميل التلقائي، أو --load-model، أو POST /v2/repository/models/evil_model/load. في الإصدارات المتأثرة، يعمل المُنشئ أثناء SetBatchingStrategy، قبل أي بحث عن رموز الواجهة الخلفية.

الاكتشاف

يسجّل Triton نفسه التحميل بمستوى INFO:

root@kitploit:~
Loading custom batching strategy library <path> for model <name>

في بناء مُصلَح، تظهر محاولة مرفوضة كرسالة Batching library path escapes model repository.

أي قيمة TRITON_BATCH_STRATEGY_PATH تكون مطلقة، أو تحتوي على ..، أو تشير إلى خارج دليل النموذج تستحق إطلاق تنبيه بشأنها بغض النظر عن الإصدار. توجد قاعدة Sigma تغطي سطر السجل ومعلمة الإعداد معًا في detection/.

إشارات مكمّلة:

  • ملفات config.pbtxt التي تحمل معلمة TRITON_BATCH_STRATEGY_PATH من الأساس — الميزة نادرة عمليًا، لذا فإن وجودها وحده يُعد مرشحًا مفيدًا.
  • كائنات مشتركة تظهر داخل مستودع النماذج وليست من مكونات الواجهة الخلفية.
  • استدعاء openat/mmap لملف .so خارج جذر النموذج من قِبل عملية tritonserver (عبر auditd أو eBPF أو Falco).

التخفيف

قم بالترقية إلى Triton Inference Server 26.06 أو أحدث. يضيف الإصلاح فحص الاحتواء الذي كان مفقودًا في المحمّل:

root@kitploit:~
bool escapes{true};
RETURN_IF_ERROR(IsChildPathEscapingParentPath(
    batch_libpath, localized_model_dir->Path(), &escapes));
if (escapes) {
  return Status(
      Status::Code::INVALID_ARG,
      "Batching library path escapes model repository.");
}

حيثما لا يمكن الترقية فورًا، ضوابط تعويضية:

  • ارفض أو أزل TRITON_BATCH_STRATEGY_PATH من كل config.pbtxt قبل وصوله إلى مستودع النماذج.
  • عامل مستودع النماذج كحدود ثقة: لا يكتب فيه أي طرف غير موثوق، وتُتحقق المرايا البعيدة من التكامل قبل المزامنة.
  • عطّل مسار التحميل عبر تجاوز الملف (عيّن --model-control-mode على قيمة غير explicit، أو فرض تفويضًا على نقاط نهاية المستودع) ما لم يكن مطلوبًا.
  • شغّل tritonserver كمستخدم غير مميز مع تركيب مستودع النماذج للقراءة فقط، بحيث يكون نصف قطر الانفجار أصغر ما يمكن عند نجاح التحميل.
  • تحقق من تجزئة أو توقيع قطع النماذج قبل التحميل.

الربط: MITRE ATT&CK T1574.006 اختطاف تدفق التنفيذ: اختطاف الرابط الديناميكي وT1129 الوحدات المشتركة؛ NIST SP 800-53r5 SI-7, CM-5, SC-18؛ CIS Controls v8 §2, §4.

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

المراجع

  • نشرة NVIDIA الأمنية 5865 — https://github.com/NVIDIA/product-security/blob/main/2026/5865/5865.md
  • سجل CVE — https://github.com/NVIDIA/product-security/blob/main/2026/5865/CVE-2026-47630.json
  • triton-inference-server/core — https://github.com/triton-inference-server/core
  • أمن منتجات NVIDIA — https://www.nvidia.com/security/

الترخيص

MIT — انظر LICENSE.

تنزيل الأداة
CVECVE-2026-47630
نشرة NVIDIA5865 (2026-08-18)
CWECWE-36 (اجتياز المسار المطلق)؛ أُبلغ عنها أيضًا كـ CWE-114 / CWE-829
CVSS v3.1 (NVIDIA)5.5 متوسط — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
المتأثرTriton Inference Server 0.0 – 26.05 (لينكس)
أُصلح في26.06
أبلغ بهs1ko (github.com/s1ko، [email protected])
تتبع البائعتذكرة NVIDIA PSIRT 6139742
التاريخالحدث
2026-04-25الإبلاغ عن الاكتشاف الأساسي المتعلق بمعالجة المسارات في Triton؛ تفتح NVIDIA PSIRT التذكرة 6128799
2026-05-01تأكيد هذا الاكتشاف الثانوي والإبلاغ عنه؛ تفتح PSIRT التذكرة 6139742
2026-05-28الاتفاق على إيقاع الكشف المنسق مع PSIRT
2026-06يصدر الإصلاح في Triton Inference Server 26.06
2026-08-18تنشر NVIDIA النشرة 5865، وتخصص CVE-2026-47630 وتنسب الفضل إلى s1ko
2026-08-22نشر هذا التقرير