
Apache Traffic Server 10.2.0 - عالية - محلية - بقايا صلاحيات - مقبس JSON-RPC يونكس بوضع غير مقيّد 0777
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-jsonrpc-unrestricted
الفئة: صلاحية متبقية (استطلاع) الوصول: محلي
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
مقبس JSON-RPC على يونكس يُضبط افتراضيًا على restricted_api بقيمة false. ملف jsonrpc.yaml المرفق يحتوي على تعليقات فقط، لذا يفوز المُهيّئ المكتوب بلغة C++. وضع ربط SO_PEERCRED على لينكس هو 0777. أي uid محلي يستطيع الوصول إلى inode الخاص بـ rundir يتصل دون رمز مميز ويستخرج السجلات الحية (بما في ذلك مسارات مفاتيح SSL) بالإضافة إلى الخماسيات (5-tuples) الخاصة بمتتبع الاتصالات. تبقى عمليات الكتابة خلف SO_PEERCRED (euid == 0 أو euid الخاص بـ ATS). جدول التوثيق يقول true / 0700؛ بينما الكود والمثال المعلّق يقولان false / 0777.
هذه ليست CVE-2026-58159 (ACL الخاصة بمستمع HTTP UDS). لا يوجد JSON-RPC عبر TCP/HTTP. يبقى تحميل الإضافات وكتابة الإعدادات مرفوضًا لـ uid غريب.
| المعرّف | لا يوجد CVE بعد |
| الفئة | صلاحية متبقية (استطلاع) |
| الوصول | محلي (uid غير مميز على مضيف ATS) |
| CWE | CWE-276، CWE-284 |
| CVSS | عالٍ: 7.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| المنتج | Apache Traffic Server |
| المتأثر | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) JSON-RPC الافتراضي على يونكس |
| المصادقة | لا شيء على الطرق غير المقيّدة. الوصول إلى نظام الملفات المحلي لـ rundir. |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18720 فقط. الصورة ats-10.2.0-lab:local. |
ثبّتُّ الوسم 10.2.0، والـ commit b1df7334b39a878971c376da849e8da4984918b6. صورة مبنية من المصدر.
uid محلي على مضيف ATS (ليس root، وليس euid الخاص بـ ATS). RPC مُفعّل. JSON-RPC على يونكس مُفعّل. rundir النموذجي 0755 مملوك لـ ATS. المقبس $RUNTIMEDIR/jsonrpc20.sock.
| الطريقة | الهدف | الصلاحية |
|---|---|---|
admin_lookup_records بصفتها uid 10000 على jsonrpc20.sock بوضع 0777 | JSON-RPC غير مقيّد (RpcAdminPubHandlers.cc) | استطلاع (مُثبت مختبريًا): proxy.config.proxy_name=ATS-JSONRPC-UNRESTRICTED-WITNESS الحي، مسارات مفاتيح SSL etc/trafficserver، proxy.config.admin.user_id=nobody. بايتات المفتاح ليست ضمن السجلات. |
get_connection_tracker_info | نفس المقبس | استطلاع (مُثبت مختبريًا): جداول متتبع الوارد/الصادر (فارغة تحت عدم وجود حمل). |
get_server_status، admin_host_get_status، admin_storage_get_device_status، filemanager.get_files_registry | نفس البتة غير المقيّدة | استطلاع (مُستنتج): حالة التصريف، markdown المضيف، مسارات أقراص التخزين المؤقت، مسارات الإعدادات المطلقة. |
admin_config_set_records بصفتها uid 10000 | SO_PEERCRED مقيّد | السلامة: مغلقة (مُثبت مختبريًا). خطأ JSON-RPC 10 Unauthorized، Denied privileged API access for uid=10000. سجل الشاهد دون تغيير. |
| التصريف / مسح التخزين المؤقت / إخراج التخزين عن الخدمة | طرق مقيّدة | التوافر: مغلق لـ uid غريب (المصدر). |
مُثبت مختبريًا مقابل مُستنتج: مقبس 0777، بحث uid 10000 عن proxy_name / مسارات مفاتيح SSL، جداول المتتبع، رفض الكتابة، غياب JSON-RPC عبر TCP: مختبري. طرق القراءة الأخرى غير المقيّدة: مُستنتجة من نفس البوابة.
يتطلب: uid محلي على مضيف ATS. JSON-RPC على يونكس مُفعّل (افتراضي). SO_PEERCRED على لينكس بحيث يكون الربط غير المقيّد 0777. rundir قابل للوصول (عادةً 0755).
| السطح | المختبر |
|---|---|
admin_config_set_records بمعرّف المستخدم 10000 | غير مصرّح به؛ سجل الشاهد دون تغيير |
| TCP / HTTP JSON-RPC | غير موجود؛ HTTP 8080 / 18080 فقط |
تحميل إضافة .so عبر RPC | SO_PEERCRED |
traffic_ctl بنفس معرّف المستخدم | المسؤول المقصود |
umask+bind الذرّي عندما تكون restricted_api صحيحة | 0700، إصلاح CHANGELOG مُثبَّت |
| ACL لمستمع HTTP UDS في CVE-2026-58159 | ليس هذا المقبس |
RPC مُفعَّل ما لم يكن rpc.enabled: false. لا يوجد سوى CommType::UNIX. ملف jsonrpc.yaml.default المرفق يحتوي على تعليقات فقط. فك ترميز YAML يكتب restrictedAccessApi فقط عندما يكون المفتاح موجودًا. وإلا:
bool restrictedAccessApi{
NON_RESTRICTED_API}; // ... 0700(default) or 0777
NON_RESTRICTED_API هو false (IPCSocketServer.h:128-129). يقول التعليق إن 0700 هو الافتراضي. المُهيّئ هو الثابت غير المقيّد.
Bind (IPCSocketServer.cc:310-342): restricted_api false مع SO_PEERCRED -> الوضع 0777. تقول الجملة الأخيرة في جدول الوثائق إن القيمة الافتراضية هي true. الكود والمثال المعلّق يتبعان false.
المنعطفات الخاطئة: اعتبار true في الوثائق هو الافتراضي؛ ووصف هذا بأنه RCE (الكتابات مرفوضة)؛ واعتبار أن CVE-2026-58159 يغطي mgmt JSON-RPC؛ والبحث عن بقايا TCP من traffic_manager XMLRPC القديم.
المسرح: كتابة بمعرّف المستخدم uid 10000. الأوراكل هو proxy_name مزروع مع سلاسل مسار مفتاح SSL، ثم مجموعة مرفوضة.
python3 ats-jsonrpc-unrestricted-Abraxas-Labs.py
أو
cd lab
./run.sh
Loopback 127.0.0.1:18720. مشروع Compose ats-jsonrpc-unrestricted. الصورة ats-10.2.0-lab:local. معرّف المختبر uid 10000. وضع Socket 0777. الشاهد ATS-JSONRPC-UNRESTRICTED-WITNESS. السطر الأخير:
SUCCESS ats-jsonrpc-unrestricted how=uds-0777-unrestricted-jsonrpc uid=10000 sock-mode=0777 lookup-proxy_name=ATS-JSONRPC-UNRESTRICTED-WITNESS ssl-key-path=etc/trafficserver tracker=ok write=unauthorized tcp-jsonrpc=absent ATS-JSONRPC-UNRESTRICTED-WITNESS
اجعل restricted_api افتراضيًا على true واربط 0700، بما يطابق جدول الوثائق. قم بمحاذاة مثال jsonrpc.yaml المعلّق. أبقِ القراءات غير المقيّدة خلف موافقة صريحة. تتطلب عمليات الكتابة بالفعل SO_PEERCRED؛ لا تفتحها.
b1df7334b39a878971c376da849e8da4984918b6)IPCSocketServer.h restrictedAccessApiIPCSocketServer.cc وضع الربط 0777RpcAdminPubHandlers.ccjsonrpc.yaml.default