IPBUF安全漏洞报告
English
CVE-2023-54345 CVSS 8.8 高危

CVE-2023-54345 Frappe Framework沙箱逃逸漏洞

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2023-54345
漏洞类型
沙箱逃逸, 远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Frappe Framework ERPNext

相关标签

沙箱逃逸远程代码执行RCEFrappeERPNextCVE-2023-54345

漏洞概述

Frappe Framework ERPNext 13.4.0版本中存在一处沙箱逃逸安全漏洞。该漏洞由于RestrictedPython未能有效隔离执行环境,具有System Manager权限的攻击者可利用服务器脚本功能,通过访问Python对象的gi_frame属性进行帧内省。利用此特性,攻击者能够遍历调用栈并调用os.popen等危险函数,最终在服务器上执行任意系统代码,严重威胁系统安全。

技术细节

该漏洞的核心在于Frappe Framework在处理服务器脚本时使用了RestrictedPython,但其安全配置未能完全限制对Python内部对象的访问。攻击者利用Python解释器的帧对象特性,在受限代码中通过gi_frame属性获取当前执行帧,进而访问全局命名空间或调用栈中的上层对象。利用此特性,攻击者可以遍历f_back属性,回溯调用栈直至找到包含__builtins__或已导入os模块的上下文环境。一旦定位到os模块,即可调用os.popen或subprocess等函数执行任意系统命令。这种利用方式绕过了沙箱的隔离机制,实现了从受限环境逃逸至宿主操作系统,导致远程代码执行。

攻击链分析

STEP 1
步骤1
攻击者获取具有System Manager角色的合法账户凭证并登录系统。
STEP 2
步骤2
访问/app/server-script端点,准备创建恶意服务器脚本。
STEP 3
步骤3
编写包含帧内省代码的Python脚本,利用gi_frame属性访问调用栈。
STEP 4
步骤4
遍历调用栈(f_back),在全局变量中查找os模块并加载。
STEP 5
步骤5
调用os.popen执行任意系统命令,获取服务器权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2023-54345: Sandbox Escape via Frame Introspection # Place this code in a Server Script in ERPNext def exploit(): # Access the current frame object using gi_frame current_frame = gi_frame # Traverse up the call stack to find a frame with 'os' module while current_frame: if 'os' in current_frame.f_globals: os_module = current_frame.f_globals['os'] # Execute arbitrary system command (e.g., 'id') return os_module.popen('id').read() # Move to the caller's frame current_frame = current_frame.f_back return "Exploit failed: os module not found in stack." # Trigger the exploit exploit()

影响范围

Frappe Framework ERPNext 13.4.0

防御指南

临时缓解措施
建议立即升级至修复版本。若无法立即升级,应严格限制服务器脚本的创建权限,撤销非必要用户的System Manager角色,并部署WAF规则检测针对Scripting API的异常请求,同时密切监控系统进程和文件变动。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表