最近几天,我注意到Wordpress WPForms插件中的CVE-2024-11205(CVSS 8.5)漏洞引起了很多关注。主要有3个原因:
- WPForms 是一个广泛使用的插件,拥有超过 600 万活跃安装量(使用它的网站)
- 这是一个高危漏洞
- 非常容易理解
最初的 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中文网其他相关文章!

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

stickysessensureuserRequestSarerOutedTothesMeServerForsessionDataConsisterency.1)sessionIdentificeAssificationAssigeaSsignAssignSignSuserServerServerSustersusiseCookiesorUrlModifications.2)一致的ententRoutingDirectSsssssubsequeSssubsequeSubsequestrequestSameSameserver.3)loadBellankingDisteributesNebutesneNewuserEreNevuseRe.3)

phpoffersvarioussessionsionsavehandlers:1)文件:默认,简单的ButMayBottLeneckonHigh-trafficsites.2)Memcached:高性能,Idealforsforspeed-Criticalapplications.3)REDIS:redis:similartomemememememcached,withddeddeddedpassistence.4)withddeddedpassistence.4)databases:gelifforcontrati forforcontrati,有用

PHP中的session是用于在服务器端保存用户数据以在多个请求之间保持状态的机制。具体来说,1)session通过session_start()函数启动,并通过$_SESSION超级全局数组存储和读取数据;2)session数据默认存储在服务器的临时文件中,但可通过数据库或内存存储优化;3)使用session可以实现用户登录状态跟踪和购物车管理等功能;4)需要注意session的安全传输和性能优化,以确保应用的安全性和效率。

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

绝对会话超时从会话创建时开始计时,闲置会话超时则从用户无操作时开始计时。绝对会话超时适用于需要严格控制会话生命周期的场景,如金融应用;闲置会话超时适合希望用户长时间保持会话活跃的应用,如社交媒体。

服务器会话失效可以通过以下步骤解决:1.检查服务器配置,确保会话设置正确。2.验证客户端cookies,确认浏览器支持并正确发送。3.检查会话存储服务,如Redis,确保其正常运行。4.审查应用代码,确保会话逻辑正确。通过这些步骤,可以有效诊断和修复会话问题,提升用户体验。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

禅工作室 13.0.1
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能