
CVE-2025-65637: ثغرة رفض الخدمة في Logrus
يحتوي هذا الدليل على كود برهان المفهوم (PoC) وسكربتات اختبار لثغرة حجب الخدمة (DoS) في github.com/sirupsen/logrus، والمسجلة باسم CVE-2025-65637.
معرف CVE: CVE-2025-65637
CWE: CWE-400 (الاستهلاك غير المتحكم فيه للموارد)
CVSS: 7.5 (عالية)
المكتشفون: Christopher Straight, Juan Pablo Mandelbaum
توجد ثغرة حجب خدمة في github.com/sirupsen/logrus عند استخدام Entry.Writer() لتسجيل حمولة سطر واحد أكبر من 64KB بدون أحرف أسطر جديدة.
بسبب القيود في bufio.Scanner الداخلي، تفشل القراءة مع خطأ "token too long" ويُغلق أنبوب الكاتب، مما يجعل Writer() غير قابل للاستخدام ويسبب عدم توفر التطبيق (DoS).
تؤثر هذه الثغرة على الإصدارات < 1.8.3 و1.9.0 و1.9.2. تم إصلاح المشكلة في 1.8.3 و1.9.1 و1.9.3+، حيث يتم تقسيم الإدخال إلى أجزاء ويستمر الكاتب في العمل حتى لو تم تسجيل خطأ.
الإصدارات المتأثرة:
< v1.8.3 (بما في ذلك v1.8.1 وv1.8.2)
v1.9.0
v1.9.2
الإصدارات المُصحَّحة:
v1.8.3
v1.9.1
v1.9.3+
poc_logrus_dos_improved.go - برنامج PoC مستقل يوضح الثغرة
poc_logrus_dos.go - نسخة PoC أبسط
test_versions.ps1 - سكربت PowerShell لاختبار إصدارات متعددة
test_versions.sh - سكربت Bash لاختبار إصدارات متعددة
test_single_version.ps1 - اختبار سريع لإصدار واحد
# PowerShell
.\test_single_version.ps1 v1.8.1
# PowerShell
.\test_versions.ps1
# Bash/Linux
chmod +x test_versions.sh
./test_versions.sh
go mod init poclogrus
go get github.com/sirupsen/[email protected]
go run poc_logrus_dos_improved.go
أكدت الاختبارات الشاملة ما يلي:
تحدث الثغرة عندما يستقبل logrus.Writer() سطرًا واحدًا أكبر من 64KB بدون أسطر جديدة. يمكن أن يحدث هذا عندما تمرر التطبيقات بيانات يتحكم فيها المستخدم (مثل ترويسات HTTP مثل User-Agent أو مخرجات stdout/stderr لعملية فرعية) إلى logrus.Writer().
الإصدارات القابلة للاستغلال: يفشل الماسح الداخلي، ينقطع الأنبوب، ويفقد التطبيق إمكانية التسجيل أو يتعطل (DoS).
الإصدارات المُصحَّحة: يتم تسجيل الخطأ، لكن الكاتب يستمر في العمل بشكل صحيح، مما يمنع حدوث حجب الخدمة.
| الإصدار | الحالة | يوجد خطأ | الكاتب معطوب |
|---|
| v1.8.1 | قابل للاستغلال | True | True |
| v1.8.2 | قابل للاستغلال | True | True |
| v1.8.3 | مُصحَّح | True | False |
| v1.9.0 | قابل للاستغلال | True | True |
| v1.9.1 | مُصحَّح | True | False |
| v1.9.2 | قابل للاستغلال | True | True |
| v1.9.3 | مُصحَّح | True | False |