
Apache Traffic Server 10.2.0 - عالية - عن بُعد - بقايا صلاحيات - فشل إضمار ACL في realip PLUGIN
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-realip-plugin-acl
الفئة: صلاحية متبقية الوصول: عن بُعد
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
وحدة realip التجريبية مع acl.subjects: PLUGIN الموثّقة تفتح إعادة تعيين @src_ip عند الفشل (fail-open). إذا لم تستدعِ realip الدالة TSHttpTxnVerifiedAddrSet، يبقى _verified_addr بقيمة AF_UNSPEC. موضوع PLUGIN لا يكون nullptr أبدًا، لذا لا يُنفَّذ أبدًا الرجوع الاحتياطي إلى PEER. تكون ats_is_ip خاطئة، ويُتخطّى @src_ip، وتبقى ip_matches صحيحة. فتطابق قائمة السماح في إعادة التعيين العميل غير الموثوق.
القيمة الافتراضية لـ acl.subjects هي PEER. وrealip ليست في plugin.config القياسي. ولا يقرأ ip_allow.yaml الخاص بالجلسة PLUGIN أبدًا. أما نمط X-Forwarded-For الكلاسيكي من أي طرف فمغلق (يلزم trustedAddress؛ ويجب أن يكون الترويسة عنوانًا واحدًا صالحًا لـ inet_pton).
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية (فتح عند الفشل في ACL إعادة التعيين) |
| الوصول | عن بُعد (HTTP غير مصادَق من خارج trustedAddress) |
| CWE | CWE-863 |
| CVSS | عالٍ: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| المنتج | Apache Traffic Server |
| المتأثر | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) realip التجريبية + موضوعات PLUGIN |
| المصادقة | لا شيء. العميل ليس ضمن trustedAddress. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18770 فقط |
ثبّتُّ وسم الإصدار العام 10.2.0 وكشف الالتزام b1df7334. المختبر عبارة عن وكيل عكسي ats-10.2.0-lab:local مبني من المصدر على واجهة الاسترجاع (loopback). CONTROL PEER يعيد 403. PLUGIN يعيد 200. ولا يزال PURGE للجلسة يعيد 403.
الوصول إلى ATS مع تحميل realip.so التجريبية وضبط proxy.config.acl.subjects: PLUGIN (أو PLUGIN,PEER). وإعادة تعيين السماح @src_ip=10.0.0.0/8. والاتصال من عنوان خارج trustedAddress.
| الطريقة | المخرج | الصلاحية |
|---|---|---|
HTTP من 172.x خارج trustedAddress إلى إعادة تعيين @src_ip=10.0.0.0/8 | realip تتخطى TSHttpTxnVerifiedAddrSet (address_setter.cc:29-38)؛ موضوع PLUGIN حاضر دائمًا (UrlRewrite.cc:462-473)؛ تخطّي @src_ip عندما !ats_is_ip (:495-514) | السلامة (مُثبتة مختبريًا): ACL إعادة التعيين يطابق. الأصل يعيد 200 مع ATS-REALIP-PLUGIN-ACL-WITNESS. أما CONTROL مع acl.subjects=PEER فيعيد 403. |
المثل مع Client-IP: 10.1.2.3 من النظير غير الموثوق | simple.cc verify خاطئة؛ تُتجاهل الترويسة | السلامة (مُثبتة مختبريًا): لا يزال الفتح عند الفشل يعيد 200. وليس انتحالًا للعنوان المُتحقَّق منه. |
PURGE من العميل نفسه | ip_allow.yaml للجلسة PEER | مغلق (مُثبت مختبريًا): 403. لا تعيد PLUGIN كتابة ACL الاتصال أبدًا. |
مضيف بدون @src_ip | الخريطة الافتراضية | مغلق (مُثبت مختبريًا): النص DENIED، بلا شاهد. |
مُثبت مختبريًا مقابل مُستنتَج: PLUGIN 200، وPEER 403، وPURGE 403، والخريطة المرفوضة، والفتح عند الفشل مع الترويسة غير الموثوقة كلها مختبريًا. أما ما يمنحه الأصل بعد ذلك فهو مُستنتَج من إعادة التعيين التي كان يُفترض أن تكون لـ 10/8 فقط.
يتطلب: realip.so التجريبي بالإضافة إلى acl.subjects=PLUGIN (أو PLUGIN,PEER). إعادة تعيين قائمة السماح @src_ip. ليس افتراضيًا.
| السطح | المختبر |
|---|---|
CONTROL acl.subjects=PEER | 403 على نفس خريطة @src_ip |
الجلسة ip_allow.yaml | PURGE من المهاجم 403 |
خريطة بدون @src_ip | DENIED |
trustedAddress فارغ | لا يتحقق أبدًا؛ لا يزال fail-open فقط عندما تكون subjects هي PLUGIN |
| XFF الكلاسيكي من أي مصدر | مغلق. يجب أن يكون الترويسة عنوان inet_pton واحدًا من نظير موثوق |
SNI ip_allow | PEER/PROXY فقط؛ المصافحة تحدث قبل ترويسات HTTP |
subjects الافتراضية PEER | المتبقي لا ينطبق |
ليس المتبقي الكلاسيكي "ثق بـ X-Forwarded-For من أي مصدر". المتبقي هو مسار ACL لإعادة تعيين PLUGIN الموثّق.
python3 ats-realip-plugin-acl-Abraxas-Labs.py
أو
cd lab
./run.sh
Loopback 127.0.0.1:18770 (الأصل 18771). مشروع Compose ats-realip-plugin-acl. الصورة ats-10.2.0-lab:local. الحاوية الجانبية للمهاجم 172.x. الشاهد ATS-REALIP-PLUGIN-ACL-WITNESS. السطر الأخير:
SUCCESS ats-realip-plugin-acl control-http=403 poc-http=200 purge-http=403 denied-http=200 spoof-http=200 trusted-http=200 ATS-REALIP-PLUGIN-ACL-WITNESS
تعامل مع PLUGIN على أنه غير متاح عندما تكون get_verified_client_addr مساوية لـ AF_UNSPEC (أو اجعل الدالة الجالبة تُرجع nullptr، بما يطابق TSHttpTxnVerifiedAddrGet). عندها يعمل الرجوع الاحتياطي إلى PEER. لا تتخطَّ @src_ip عندما يكون مؤشر subject غير فارغ لكنه ليس عنوان IP. افشل بشكل مغلق (fail closed) عند استخدام قائمة سماح.
حتى ذلك الحين، اترك acl.subjects على PEER إذا كنت تُحمّل realip لأغراض التسجيل فقط. لا تضبط PLUGIN إلا إذا كان كل عميل يمكنه الوصول إلى إعادة التعيين (remap) هو بالفعل وكيل موثوق.
b1df7334b39a878971c376da849e8da4984918b6)plugins/experimental/realip/address_setter.ccsrc/proxy/http/remap/UrlRewrite.cc PerformACLFilteringinclude/proxy/ProxyTransaction.h get_verified_client_addr