
استغلال إثبات المفهوم لـ CVE-2026-55168 يوضح كتابة ملف عشوائية مصادق عليها عبر زرع الروابط الرمزية أثناء استعادة النسخ الاحتياطي في Runtipi.
يحتوي هذا المستودع على PoC بسيط لثغرة CVE-2026-55168 في Runtipi.
المشكلة هي كتابة ملفات تعسفية بعد التحقق من الهوية (authenticated arbitrary file write) يمكن الوصول إليها عبر تدفق استعادة النسخ الاحتياطي. يمكن لأرشيف نسخ احتياطي مُعدّ بعناية أن يزرع رابطًا رمزيًا (symlink) داخل بيانات التطبيق المستعادة، ومن ثم فإن تحديث إعدادات عادي لاحق يتبع هذا الرابط الرمزي ويكتب محتوى يتحكم فيه المهاجم خارج الدليل المقصود.
الإشعار المرجعي:
الإصدارات المتأثرة:
<= 4.10.0يقوم الـ PoC بتسجيل الدخول إلى Runtipi، وينشئ أرشيف نسخ احتياطي خبيث في الذاكرة، ويرفعه، ويطلق عملية الاستعادة، ثم يرسل طلب تحديث user-config عادي.
حمولة الاستعادة تزرع هذا الرابط الرمزي:
user-config/app.env -> /data/state/proof.txt
بعد ذلك، يتسبب طلب تحديث إعدادات التطبيق العادي في قيام Runtipi بكتابة المحتوى المُرسَل إلى:
/data/state/proof.txt
إذن الجزء المهم ليس فقط استمرار الرابط الرمزي أثناء الاستعادة، بل حقيقة أن عملية كتابة شرعية لاحقة تتبع الرابط الرمزي المزروع.
poc.py — PoC شامل بلغة Pythonpython poc.py \
--base-url http://127.0.0.1:3001 \
--username YOUR_USERNAME \
--password YOUR_PASSWORD \
--app-urn demoapp3:_user \
--target-path /data/state/proof.txt \
--write-content PWNED_FROM_USERCFG_WRITE
إذا أردت، يمكنك أيضًا حفظ الأرشيف المُنشأ محليًا:
python poc.py \
--base-url http://127.0.0.1:3001 \
--username YOUR_USERNAME \
--password YOUR_PASSWORD \
--output payload.tar.gz
إذا كان الهدف عرضة للثغرة، يكتمل السكربت بنجاح ويطبع نتيجة JSON صغيرة تتضمن status: "ok".
تم توفير هذا الـ PoC لأغراض البحث وإعادة إنتاج الثغرة.