
إثبات مفهوم يوضح سرقة ملفات تعريف الارتباط عبر CVE-2022-0155 عن طريق إعادة التوجيه HTTP في حزمة npm follow-redirects، بما في ذلك خادم Express ونصوص برمجية للعميل لاختبار هجمات التبعية غير المباشرة.
يحتوي هذا المستودع على عرض توضيحي للثغرة الأمنية CVE-2022-0155. تم اكتشاف الثغرة بواسطة ranjit-git وهي موصوفة بالتفصيل هنا. الغرض من هذا الإثبات هو إظهار أن الثغرة لا تنطبق فقط على السيناريوهات التي يتم فيها استخدام follow-redirects كاعتماد مباشر، بل أيضًا عند استخدام follow-redirects كاعتماد غير مباشر/متعدٍ عبر axios.
تؤثر الثغرة على حزمة npm follow-redirects قبل الإصدار 1.14.7. تعمل follow-redirects على توسيع وحدة HTTP المدمجة بإمكانية متابعة عمليات إعادة التوجيه.
لتوضيح الثغرة، ضع في اعتبارك السيناريو التالي:
تقع الثغرة في الخطوة 3، حيث تقوم الإصدارات الضعيفة من follow-redirects بتضمين نفس رؤوس Cookie مثل الطلب في الخطوة 1.
وهذا يسمح لـ https://attackers-webserver.com بسرقة، على سبيل المثال، معرف جلسة المستخدم على https://example.com والوصول إلى بيانات المستخدم.
يعتمد الهجوم على قدرة المهاجم على التحكم في إعادة التوجيه إلى https://attackers-webserver.com.
في الإثبات، يتم استخدام خادم Express لمحاكاة سلوك https://example.com.
يحتوي الخادم على نقطة نهاية واحدة لواجهة برمجة التطبيقات من نوع GET وهي '/redirect'، والتي تعيد توجيه العميل إلى عنوان URL المقدم كمعامل.
هذا يحاكي سيناريو حيث يمكن للمهاجم التحكم في عنوان URL الذي يعاد توجيه العميل إليه.
npm install
node express-server.js
nc -l -v 8182 # or nc -lnvp 8182 on non-mac systems
node client.js
يجب أن ترى في الطرفية التي تحتوي على nc الطباعة التالية:
GET / HTTP/1.1
Accept: application/json, text/plain, */*
Cookie: session=some-secret-value
User-Agent: axios/0.21.4
Host: localhost:8182
Connection: keep-alive
توضح الثغرة بوجود رأس Cookie في طرفية nc، حيث يُستخدم خادم nc (Netcat) لتمثيل خادم الويب الخاص بالمهاجم.