针对 CVE-2025-56015 的概念验证漏洞利用代码,该漏洞是 GenieACS 中的一个严重沙箱逃逸和代码注入漏洞,允许在配置上下文中执行任意 JavaScript。通过利用 declare.constructor.constructor 原型链,攻击者可以逃逸受限的 JavaScript 环境,访问底层 Node.js 的 child_process 和 net 模块,并实现完整的远程代码执行(RCE)。
利用类型: 远程
认证要求: 需要能够访问 GenieACS 的 NBI(端口 7557)和 ACS(端口 7547)
影响: 完全控制服务器、执行反向 shell、网络横向移动
NBI 端点(端口 7557)允许未经身份验证的访问以检索敏感数据。示例 API 端点包括:
获取用户数据:
$ curl 'http://myhost:7557/users/'
响应包含敏感信息,例如密码哈希和盐值。
获取文件列表:
$ curl 'http://myhost:7557/files/'
获取配置详情:
$ curl 'http://myhost:7557/provisions/'
此外,可以直接从文件服务器(端口 7567)下载文件,无需身份验证:
wget 'http://myhost:7567/SCR-20250623-qjoi.png'
沙箱内的测试调试端点限制了对 Node.js process 对象的直接访问。但是,可以通过对象遍历来绕过此限制,特别是使用构造函数链(例如 constructor.constructor)。
通过对可用对象(如 declare)调用此链,攻击者可以逃逸沙箱上下文并获得对全局 process 对象的访问权限。这允许读取环境变量和执行任意命令。
后认证 RCE:
可以通过 API 端点 /api/devices/{device_id}/tasks 直接执行配置脚本以获得 shell。仅通过 NBI 发送的请求会被排队,但不会立即执行。
预认证 RCE(未授权 RCE): 使用 NBI API,攻击者可以在无需身份验证的情况下创建配置和预设。预设的作用是当设备通过 CWMP 接口发送事件时自动运行配置脚本。
利用步骤:
PUT /provisions/{provision_name} 创建一个恶意配置。PUT /presets/{preset_name} 创建一个预设映射到该配置(将其链接到类似 "Periodic" 的事件)。declare.constructor.constructor 实现可靠的 Node.js 沙箱逃逸在运行漏洞利用之前,请直接在 exploit.py 中更新 ACS_URL、NBI_URL、LHOST 和 LPORT 配置,以匹配您的环境和攻击者机器设置。
# 在攻击者机器上启动监听器
nc -lvnp 4444
# 运行漏洞利用
python3 exploit.py

requests 库(pip install requests)此代码仅供教育目的和授权安全测试使用。
未经授权对不属于您或未经您明确许可的系统使用此代码是非法且不道德的。
漏洞发现及漏洞利用由以下人员开发:
来自 Datafarm Co., Ltd.
由 DF 渗透测试团队开发 • 泰国