
Apache Tomcat 11.0.27 - عالي - عن بُعد - DoS - RewriteValve [NS] تثبيت العامل
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · tomcat-rewrite-ns-loop
التصنيف: حجب الخدمة (DoS) الوصول: عن بُعد
Apache Tomcat 11.0.27 (52f3b364) - tomcat.apache.org
RewriteValve.parseRuleFlag يطابق البادئة. بعد NC/NE، أي علم متبقٍّ يبدأ بـ startsWith("N") يُفعِّل التالي. العلمان المنسوخان من httpd وهما [NS] (nosubreq) و[NV] (novary) يصبحان [N]. الاستبدال - يترك substitution بقيمة null؛ عندها يُعيد RewriteRule.evaluate عنوان URL الأصلي. isNext() مع newtest غير فارغ يضبط i = -1 دون حد أقصى للدورات، لذا فإن طلب GET واحد غير مُصادَق يطابق القاعدة يُثبِّت خيط موصل HTTP حتى يقطع العميل الاتصال أو تُعاد تشغيل العملية. [N] الصريح و[S=-1] هما نفس التثبيت. [L,NS] آمن لأن isLast() يقطع أولاً.
CVE-2026-65927 (مهم، 11.0.25) أصلح إعادة تشغيل [N] عند القاعدة الثانية. هذا التثبيت لا يزال بلا حد أقصى للدورات. أضاف main في نفس اليوم بعد 11.0.27 قيمة MAX_REWRITE_ROUNDS=1000 ومطابقة دقيقة للأعلام (2da9fddb، 8992dbdd) دون إشعار أمني.
| المعرّف | لا يوجد CVE بعد |
| التصنيف | حجب الخدمة (DoS) |
| الوصول | عن بُعد (HTTP غير مُصادَق) |
| CWE | CWE-835 |
| CVSS | مرتفع: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| المنتج | Apache Tomcat |
| المتأثر | 11.0.27 (52f3b364e5882a5dbcfc42cb8313a7c2ae532c64) RewriteValve |
| المصادقة | HTTP غير مُصادَق |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
ثبّتُّ الوسم 11.0.27 وقرأت RewriteValve.invoke. الصمام ليس في conf/server.xml الافتراضي. مسار Host الافتراضي هو conf/Catalina/localhost/rewrite.config. المختبر هو HTTP عبر loopback على 127.0.0.1:18910. حزمة 11.0.27 الرسمية. ليس RCE.
| الطريقة | المآل | الصلاحية |
|---|---|---|
GET /loop غير مُصادَق يطابق Host rewrite.config RewriteRule ^/loop$ - [NS] | RewriteValve.invoke i = -1 لأن startsWith("N") على الرمز NS | التوافر (مُثبَت مختبرياً): تثبيت خيط موصل HTTP واحد حتى يقطع العميل الاتصال أو تُعاد تشغيل العملية. المختبر: انتهت مهلة /loop عند 4.002s. |
GET /next غير مُصادَق مع [N] صريح | نفس إعادة تشغيل isNext() | التوافر (مُثبَت مختبرياً): نفس التثبيت. المختبر: انتهت مهلة /next عند 4.003s. |
GET /skip غير مُصادَق مع [S=-1] | i += -1 ثم زيادة حلقة for | التوافر (مُثبَت مختبرياً): نفس التثبيت. المختبر: انتهت مهلة /skip عند 4.002s. |
| طلب مطابق واحد لكل عامل | نفس المآل، maxThreads من عناوين URL المطابقة المتزامنة | التوافر (مُستنتَج): ملء مجموعة الموصلات (استخدم المختبر 32؛ الافتراضي الأصلي هو 200). عندها تُصطف الطلبات الجديدة أو تُرفض. لا يزال /ok الشقيق يُجيب بينما كان /loop واحد قيد التنفيذ. |
التعليق مقابل 404 في 13ms على /ok | توقيت next/skip مقابل [L] | الاستطلاع (مُثبَت مختبرياً): معرفة أن قاعدة next/skip قد طابقت. المختبر: تعليق 4.002s مقابل 404 في 0.013s. |
مُثبَت مختبرياً مقابل مُستنتَج: تعليق /loop [NS]، تعليق /next [N]، تعليق /skip [S=-1]، /ok [L] 404 في 13ms، /safe [L,NS] 404 في 5ms، و/ok الشقيق 404 بينما /loop قيد التنفيذ كلها مُثبَتة مختبرياً. استنفاد المجموعة مُستنتَج من تثبيت خيط واحد مع maxThreads.
يتطلب: RewriteValve على Host أو Context وقاعدة rewrite.config مطابقة. الصمام اختياري، من نفس فئة AJP المُعلَّق. [NS] المنسوخ من httpd هو قاعدة مطابقة، وليس حلقة [N] لا نهائية مقصودة.
| السطح | المختبر |
|---|---|
[L,NS] (httpd last+nosubreq) | /safe 404 في 5ms (L-ns-safe=yes) |
| طلبات أخرى قيد التنفيذ بينما خيط واحد مثبَّت | /ok 404 في 13ms أثناء /loop (sibling-alive=yes) |
server.xml الأصلي بدون RewriteValve | الصمام غائب؛ لا يُفعَّل المتبقي |
| RCE / قراءة WEB-INF / تجاوز قيود CVE-2026-65927 | [N] الآن يُعيد التشغيل عند القاعدة 0؛ هذا المتبقي للتوافر فقط |
| Manager / JMX / AJP / DefaultServlet PUT | دون تغيير؛ PUT لا يزال readonly |
لا تنفيذ كود بصلاحية مستخدم Tomcat. لا قراءة لـ conf/ أو WEB-INF. لا سرقة جلسة. لا نشر عبر Manager. تبقى JVM قائمة؛ لا يزال العمال الآخرون يُجيبون حتى تمتلئ المجموعة.
cd lab
./run.sh
Loopback 127.0.0.1:18910 يربط حاوية 8080. مشروع Compose tomcat-rewrite-ns-loop. وسم الصورة tomcat-rewrite-ns-loop:11.0.27. apache-tomcat-11.0.27.tar.gz الرسمي SHA512 a617896307cada4884b24f80c4e977ddad8b3e0f88ce0e2a6eea29d5f332498e276ae5976c227a9c8daecf05c7c90def684a3766dd5a81f47a56d8b1adf43dc3. الشاهد TOMCAT-REWRITE-NS-LOOP-WITNESS. السطر الأخير:
SUCCESS TOMCAT-REWRITE-NS-LOOP control-ok=yes ns-hang=yes L-ns-safe=yes n-hang=yes skip-hang=yes sibling-alive=yes TOMCAT-REWRITE-NS-LOOP-WITNESS
rewrite.config في المختبر:
RewriteRule ^/loop$ - [NS]
RewriteRule ^/next$ - [N]
RewriteRule ^/skip$ - [S=-1]
RewriteRule ^/ok$ - [L]
RewriteRule ^/safe$ - [L,NS]
حدِّد سقفاً لدورات إعادة الكتابة (MAX_REWRITE_ROUNDS=1000 على main بعد هذا الوسم، الالتزام 2da9fddb). مطابقة دقيقة للأعلام بحيث يفشل تحليل [NS] (الالتزام 8992dbdd). ارفض skip < 0. حتى تصل هذه إلى إصدار: تجنّب [NS]/[NV]/[N]/[S=-1] على القواعد المطابقة، أو أزل RewriteValve.
52f3b364e5882a5dbcfc42cb8313a7c2ae532c64)RewriteValve.java إعادة تشغيل isNext() وstartsWith("N")RewriteRule.java الاستبدال - يُعيد عنوان URL الأصلي