
بروميثيوس v3.15.0 - عالي - عن بُعد - تسريب بيانات الاعتماد - remote_write google_iam/azuread يمرر Bearer عبر مضيفين مختلفين عند 3xx
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · prometheus-bearer-redirect
الفئة: تسريب بيانات اعتماد الوصول: عن بُعد
Prometheus v3.15.0 (5241a27) - CNCF / Prometheus
يقوم prometheus/common v0.71.0 بالفعل بإزالة بيانات اعتماد scrape / HTTPClientConfig عند عمليات إعادة التوجيه عبر المضيفين (isCrossHostRedirect، #901). يقوم NewWriteClient ببناء هذا العميل أولاً، ثم يغلّف azuread.NewAzureADRoundTripper أو googleiam.NewRoundTripper خارج طبقة الإزالة. لا يزال follow_redirects افتراضيًا true.
إذا كان عنوان URL المُهيَّأ لـ remote_write يعيد 301/302/307 إلى مضيف آخر، فإن Prometheus يرسل Authorization: Bearer بالإضافة إلى رمز Azure AD أو GCP monitoring.write إلى ذلك المضيف. لقد أسقط Go بالفعل الترويسة المنسوخة. لكن هذه الـ RoundTrippers تعيد تعيينها مرة أخرى.
ليست CVE-2026-42151 (تسريب client_secret على /-/config). لا يحتوي prometheus.yml الافتراضي على remote_write. هذا مشروط بوجود azuread: أو google_iam:.
| المعرّف | لا يوجد CVE بعد |
| الفئة | تسريب بيانات اعتماد (remote_write Bearer عند 3xx عبر المضيفين) |
| الوصول | عن بُعد (صادر من Prometheus إلى هدف 3xx) |
| CWE | CWE-201 |
| CVSS | مرتفع: 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| المنتج | Prometheus |
| المتأثر | v3.15.0 (5241a27fe3c6983549fccc32f6e65917408c63cd)، الصورة prom/prometheus:v3.15.0 |
| المصادقة | remote_write مشروط بالإعداد مع azuread: أو google_iam: |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط |
لدى المشغّل remote_write مع azuread: أو google_iam:. عنوان URL الخاص بـ RW، أو قفزة يعيد التوجيه إليها بـ 3xx، هو مضيف يتحكم به المهاجم.
| الصلاحية | الطريقة / الهدف | مُثبت مختبريًا أو مُستنتج |
|---|---|---|
قراءة رمز GCP monitoring.write Bearer الحيّ عند 3xx عبر المضيفين | google_iam remote_write POST، 307 إلى مضيف آخر | مُثبت مختبريًا. استقبل oracle POST /write القيمة Authorization: Bearer lab-gcp-PROMETHEUS-BEARER-REDIRECT-WITNESS |
نفس التسريب لـ azuread | azureADRoundTripper.RoundTrip دائمًا Header.Set("Authorization", "Bearer "+token) بدون isCrossHostRedirect | مُستنتج من الكود المثبّت. نفس موقع التغليف في NewWriteClient. استخدم المختبر google_iam لذا لم يستدعِ Azure |
| إعادة تشغيل ذلك الرمز ضد Azure Monitor / GCP Monitoring بهوية ذلك الحساب | الرمز هو بيانات اعتماد سحابية حقيقية عند تهيئة كتل المصادقة تلك | مُستنتج. أنشأ المختبر رمزًا وهميًا؛ لم يستدعِ Azure أو GCP |
| scrape / oauth2 / basic / bearer على نفس الإصدار المثبّت | HTTPClientConfig RoundTrippers من common v0.71.0 | مُثبت مختبريًا كمغلق. تبع oauth2 scrape GET إعادة توجيه 302 إلى نفس الـ oracle بدون Authorization |
| OSS الافتراضي | remote_write فارغ | مغلق |
remote_write.headers مع تعيين Authorization | مرفوض | مغلق |
/-/config الذي يسرّب client_secret | CVE-2026-42151؛ الحقل مُعرّف كـ Secret على هذا الإصدار المثبّت | مغلق |
| Prometheus admin / دورة الحياة | الأعلام معطّلة افتراضيًا | مغلق |
| RCE / shell | ليس هذه البقايا | مغلق |
ثبّتُ وسم prometheus/prometheus v3.15.0 بعد موجة تنقيح الأسرار في 3.11/3.12 وموجة snappy-cap. تسعة عشر عملية بحث. OSS الافتراضي: admin API، وlifecycle HTTP، وremote-write receiver، وOTLP receiver معطّلة. common #901 موجود في v0.71.0. البقايا هي غلافا remote_write اللذان يقعان خارج ذلك العميل.
func (rt *azureADRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
accessToken, err := rt.tokenProvider.getAccessToken(req.Context())
// ...
req.Header.Set("Authorization", bearerAccessToken)
return rt.next.RoundTrip(req)
}
googleiam.NewRoundTripper هو google.golang.org/api/transport/http -> oauth2.Transport، الذي يقوم بـ SetAuthHeader في كل قفزة.
المنعطفات الخاطئة المسجّلة مسبقًا: إعادة تقديم CVE-2026-42151؛ اعتبار scrape oauth2 لا يزال يسرّب (وهو ليس كذلك)؛ وصف هذا بأنه High في التثبيت الافتراضي (وهو ليس كذلك - remote_write فارغ حتى تقوم بتشغيله). مسرحية: reverse shell. الـ oracle هو Bearer على POST المُعاد توجيهه.
python3 prometheus-bearer-redirect-Abraxas-Labs.py
أو
cd lab
./run.sh
loopback فقط: Prometheus http://127.0.0.1:19380، oracle http://127.0.0.1:19381. الصورة prom/prometheus:v3.15.0. يكتب run.sh ملف gcp-sa.json مختبريًا مع token_uri: http://hop:8080/token بحيث لا يتحدث google_iam أبدًا إلى Google.
SUCCESS prometheus-bearer-redirect how=live rw-method=POST rw-bearer=yes token-has-witness=yes scrape-method=GET scrape-bearer=no PROMETHEUS-BEARER-REDIRECT-WITNESS
تخطَّ إرفاق Azure AD / Google IAM Bearer عند isCrossHostRedirect(req)، تمامًا كما في common #901. لا تُعِد تعيين Authorization بعد أن أسقطه Go عند 3xx عبر المضيفين.
5241a27fe3c6983549fccc32f6e65917408c63cd)storage/remote/client.go · storage/remote/azuread/azuread.go · storage/remote/googleiam/googleiam.goGNU Affero GPL v3.0. انظر LICENSE. مختبر loopback فقط. بدون ضمان.