最近几天,我注意到Wordpress WPForms插件中的CVE-2024-11205(CVSS 8.5)漏洞引起了很多关注。主要有3个原因:
最初的 Wordfence 帖子已经很好地解释了该漏洞及其后果。因此,我的目标是不同的:理论上解释这样一个奇怪的简单漏洞如何在最常用的 Wordpress 插件之一中保持开放状态超过一年。
回顾原始帖子中的信息。该插件使用 ajax_single_ payment_refund() 和 ajax_single_ payment_cancel() 函数来处理 Stripe 付款操作。然而,没有验证登录用户是否有权执行此类操作⚰️。最重要的是,这些功能受到 wpforms_is_admin_ajax 方法的“保护”,该方法根本不检查用户是否是管理员,正如某些人可能认为的那样。
从漏洞缓解开始,官方修复更新至1.9.2.2版本。在此版本的代码中,ajax_single_ payment_refund 和 ajax_single_ payment_cancel 这两个功能添加了授权验证。然而,wpforms_is_admin_ajax 保持原样?.
第一个易受攻击的版本是 2023 年 11 月 28 日发布的 WPForms 1.8.4。该版本引入了“新的 Stripe 支付工具”,其中包括“同步 Stripe 仪表板”和“定期付款逻辑”。
此次更新带来了 15 个新文件的添加、64 个文件的删除以及 425 个文件的编辑。听起来像是一个非常适合手动审核的版本 ☠️。
为了回答这个问题,我测试了 SAST Semgrep(我非常喜欢使用)和 Gepeto(又名 ChatGPT)。
我运行了 semgrep 。整个项目他都无法检测到这个漏洞?.
结果符合预期。官方将授权失败漏洞视为业务逻辑漏洞。这意味着自动化工具很难检测到它们。
常见弱点枚举 CWE-862 缺少授权似乎同意。
我问 ChatGPT 他是否可以发现过去代码中的任何问题。我只向他发送了 ajax_single_ payment_refund 和 wpforms_is_admin_ajax 方法(因为我不想用完当天的免费 ChatGPT?)。
令人难以置信的是,他成功地识别了该漏洞并指出了解决方案(与真正的修复非常相似?),以及此代码中的其他“可能的漏洞”,例如无速率限制或日志记录。
“啊,但是你在整个项目上运行 SAST,同时指导 AI”生活真的就是这样吗? ?♂️
可见,传统的安全工具很难检测到授权漏洞。
根据CWE-862 Missing Authorization,可以通过代码审查、渗透测试和威胁建模等手动分析来检测此漏洞。而且效果也只是“中等”?.
其他谈论授权漏洞的材料强调这是一类处理复杂且在现实世界中常见的漏洞,例如 OWASP Top 10 API Security 2019 和 2023 将授权漏洞列为第一和第三位置。
另一点是,之前用作验证的方法(wpforms_is_admin_ajax)有一个非常糟糕的名称,旨在迷惑开发人员和代码审查人员,因为该函数不会检查登录用户是否是管理员。
所以,我的理论是,这个漏洞存在是因为 1)如果没有人工分析,几乎不可能检测到; 2) wpforms_is_admin_ajax 方法会让许多分析代码的审阅者感到困惑。
我希望将来能带来其他类似的分析。如果您喜欢,请分享给阿姨和奶奶。疑问?我总是使用 Bluesky、Threads 和 Twitter。
以上是为什么会存在这个漏洞? CVE-WP 表格)的详细内容。更多信息请关注PHP中文网其他相关文章!