RCE(Remote Code Execution,远程代码执行)是一种允许攻击者在远程系统或应用程序内执行任意代码的漏洞,对应CWE-94:代码生成控制不当('代码注入')。
PyTorch Lightning是一个基于PyTorch的库,帮助简化深度学习模型的训练管理;DeepDiff则是一个用于比较两个Python对象并分析差异的库。
CVE-2024-5452是Lightning的AI模型权重相关Web应用程序功能中,在利用DeepDiff和Lightning的过程中,通过DeepDiff的脆弱头部验证和Delta属性污染,在反序列化时引发RCE的漏洞。
本文将分析攻击者如何通过注入任意对象或执行远程代码(RCE)来利用该漏洞的代码流程,并探讨应对措施。
在pytorch-lightning中,可以通过污染Web应用程序源码中DeepDiff端点/api/v1/delta的delta属性来发动攻击。
我们将通过示例了解如何污染delta的dunder属性,从而引发对象反序列化漏洞。
第一次请求:客户端攻击示例、污染设置 -> 在Deepdiff的/api/v1/delta中绕过脆弱头部验证 -> 通过污染设置保存状态。
[图1] POC - 端点攻击
[图2] POC - 漏洞注入/完整污染设置内容
[图3] lightning/api/core/api.py / 脆弱头部检查逻辑部分
[图4] lightning/api/core/app.py / 设置部分
[图5] lightning/api/core/app.py / 设置保存部分
第一次请求通过[图1]绕过[图3]中/api/v1/delta的头部验证后,注入经过篡改的污染设置(delta)[图2],并通过[图4]和[图5]保存设置。 现在,我们来看第二次请求中这些篡改的delta设置如何发挥作用。
[图6] lightning/api/core/app.py / 初始路径流程
[图6]是delta设置后的第二次请求流程:run_once() -> maybe_apply_change() -> _collect_deltas_from_ui_and_work_queues()
[图7] isinstance污染案例
[图7]中,通过污染设置绕过_collect_deltas_from_ui_and_work_queues()中的isinstance检查(isinstance(delta, _DeltaRequest) == False),从而进入else分支。
[图8] isinstance污染案例1
[图8]为便于理解,输出了isinstance(delta, _DeltaRequest)、delta、_DeltaRequest(类型)的结果:第一次请求是用于设置的请求,正在设置篡改故正常;后续请求中_DeltaRequest类型被污染为str,从而绕过了条件。 接下来看流程中的下一个目标——_process_requests的示例。
[图9] isinstance污染案例2
从[图9]可以看出,与上述内容相同,_process_requests通过右侧客户端POC代码的设置,使isinstance(request, _APIRequest)检查被污染设置绕过;该污染是一个案例:对OrderSet实例调用isinstance时返回True。目前我们已经看到了两种isinstance污染形式,接下来的情况是通过污染制作能够调用属性的设置。
[图10] isinstance污染案例3
在绕过了[图10]中的isinstance检查和完成了函数设置后,设置[图10]中的"内部状态固定"(_INTERNAL_STATE_VARS: 留空),使得[图11]中无法检查内部设置状态。
[图11_1] /lightning/app/core/flow.py 的 _INTERNAL_STATE_VARS 检查函数
[图11_2] /lightning/app/core/flow.py 的 __setattr__
以[图11]为最后一步,整体污染及设置完成。
[图12] RCE命令
[图13] RCE响应
最终,在[图13]中调用root权限的exec,执行[图12]中的命令而完成攻击。
至此,我们了解了在lightning环境中通过对象反序列化(CVE-2024-5452)执行RCE漏洞的流程。由于这是一种服务器本身被劫持的攻击方式,因此应对措施至关重要。为此,我们提出更新至最新版本的建议。


至此,我们了解了通过Lightning和Deepdiff污染Dunder属性从而引发RCE的漏洞。该漏洞首先源于脆弱的头部验证,其次是通过脆弱的delta属性检查导致的对象反序列化漏洞。
(poc) https://security.snyk.io/vuln/SNYK-PYTHON-PYTORCHLIGHTNING-7218866
(nist) https://nvd.nist.gov/vuln/detail/CVE-2024-5452