用于测试 SaltStack 漏洞 CVE-2020-11651 与 CVE-2020-11652 的扫描工具。
这些漏洞允许能够连接到“请求服务器”(request server)端口的攻击者绕过所有身份验证 和授权控制,发布任意控制消息,在“主服务器”(master)文件系统的任意位置读写文件, 并窃取用于以 root 身份向主服务器进行身份验证的密钥。其影响是在主服务器及所有连接到它的 从服务器(minions)上实现完全的远程命令执行(以 root 身份)。
该工具需要 Python 2.7 或 Python 3。外部依赖可使用 pip 或 easy_install 安装。 例如:
sudo pip install -r requirements.txt
工具包含 2 种检测方法:
令牌泄露 (-t)
此方法使用 -t 选项调用,通过利用该漏洞尝试读取 Salt 根令牌。 虽然此方法是自包含的,但它仅适用于较新版本,某些较旧版本不受支持。
远程命令执行至带外(DNS) (-c)
此方法通过执行 nslookup 命令来利用该漏洞,触发对 Appcheck Sentinel 服务器的 DNS 查询。扫描器随后查询 AppCheck DNS 服务器以确定其是否已执行。为实现 此功能,该工具需要连接到 https://ptst.io/
注意:有关 Sentinel 的更多信息,请参见下文第 [4] 节
推荐命令行:salt_rce_scanner.py -r cidr_ip_range -t -c
[命令行选项]
/ _ \ / __ \ | | |
/ /\ _ __ _ __ | / / |__ ___ | | __
| _ | ' | ' | | | ' \ / _ / __| |/ /
| | | | |) | |) | _/\ | | | / (| <
_| |/ ./| ./ _/| ||_|___||_
| | | |
|| |_|
SaltStack 扫描器(CVE-2020-11651 与 CVE-2020-11652)
作者: Gary O'Leary-Steele
版本: 0.1 Alpha
使用 -h 查看使用选项
optional arguments: -h, --help show this help message and exit -r CIDR_RANGE Target Host or CIDR Range to scan -p PORT Target Port (4506 by default) -c Enable remote command injection test (out-of-band DNS to AppCheck Sentinel) -t Enable root token disclosure check -T THREADS Maximum Threads (default is 50) -o OUTPUT_FILE Output file
[4] AppCheck Sentinel
= 背景 =
传统上,Web 应用程序安全漏洞是通过修改客户端提供的输入以尝试触发服务器的特定响应来检测的。 例如,SQL 注入漏洞通常通过提交能够使数据库服务器返回签名的载荷来检测;在其他情况下,载荷被设计为触发 可测量的特定时间延迟,从而检测漏洞。在每种情况下,这些方法都使用带内(in-band)技术,即攻击和响应 与常规网站流量走同一条路径,并能够立即确认漏洞。
= 带外检测 =
然而,在某些情况下带内技术并不有效。例如,考虑一个电子商务网站,它收集订单,随后由后端订单处理 系统进行审查。虽然 AppCheck 在常规扫描期间会检测电子商务网站内的(带内)漏洞,但后端订单处理 系统中的漏洞可能要到稍后(被其他用户或进程)访问时才会触发。
其他常见情况出现在触发漏洞无法提供可靠的带内机制来确认漏洞时。例如,如果服务器正常响应时间 不稳定,那么测量服务器响应时间可能不可靠。在其他情况下,无论漏洞是否被成功利用,它都可能不会 影响服务器的响应方式。
为了克服这些限制,AppCheck 实现了一个名为 Sentinel 的带外检测系统。
Sentinel 是一个基于云的监控系统,托管专门设计的 DNS、SMTP、HTTP(s) 和 SMB 服务, 这些服务会拦截由 AppCheck 攻击载荷触发而产生的带外连接。
在扫描期间,AppCheck 会提交特制载荷,这些载荷在成功执行时旨在触发带外连接。 Sentinel 随后检测到这种执行并相应更新扫描结果。最常见的技术之一是在载荷中嵌入 DNS 令牌。 根据设计,DNS 查询会被转发到给定域的权威 DNS 服务器以进行解析。因此,即使易受攻击的系统 不允许访问互联网,只要它能够解析 DNS 名称,它就可以与 Sentinel 通信。