
Second CVE still Remote Code Execution
CVE-2026-35196 · Chamilo LMS · OS 명령 삽입 → RCE
연구자: K
공개 유형: 책임 있는 공개
상태: 패치됨
영향받는 제품: Chamilo LMS< 2.0(v1.11.32에서 확인됨)
Chamilo LMS v1.11.32의 main/inc/ajax/gradebook.ajax.php에 있는 export_all_certificates 액션에 심각한 OS 명령 삽입 취약점이 존재합니다.
애플리케이션은 api_get_course_id()를 통해 과정 코드를 검색하며, 이는 $_SESSION['_cid']에서 직접 읽어옵니다. 이 세션에서 파생된 값은 정제되지 않은 채 shell_exec() 호출에 연결됩니다 — escapeshellarg()나 화이트리스트 검증, 타입 강제가 없습니다.
세션의 _cid 변수를 조작하거나 오염시킬 수 있는 공격자(세션 오염, IDOR 체이닝 또는 기타 세션 조작 프리미티브를 통해)는 임의의 셸 메타 문자를 삽입하고 웹 서버 사용자(www-data)로 완전한 원격 코드 실행을 달성할 수 있습니다.
취약한 파일: main/inc/ajax/gradebook.ajax.php
취약한 함수: export_all_certificates
사용자가 export_all_certificates 액션을 트리거하면, 스크립트는 인증서 처리를 위해 백그라운드 프로세스를 실행하려고 시도합니다:
$courseCode = api_get_course_id(); // Retrieves the value from $_SESSION['_cid']
$sessionId = api_get_session_id();
// ...
$commandScript = api_get_path(SYS_CODE_PATH).'gradebook/cli/export_all_certificates.php';
$userList = implode(',', $userList);
// Flaw: Variables like $courseCode are passed directly to the shell without escapeshellarg()
shell_exec("php $commandScript $courseCode $sessionId $categoryId $userList > /dev/null &");
애플리케이션이 세션 변수의 내용을 암묵적으로 신뢰하고 시스템 셸로 보내기 전에 적절히 이스케이프하지 못하기 때문에, 조작된 세션을 가진 공격자는 악의적인 명령을 추가하여 실행할 수 있습니다. 예를 들어, _cid에 "; touch /tmp/remote_code_by_k; #"가 포함되어 있으면, bash/sh 셸이 해석하는 명령은 다음과 같습니다:
php /var/www/chamilo/main/gradebook/cli/export_all_certificates.php ; touch /tmp/remote_code_by_k; # ... > /dev/null &
셸은 CLI 스크립트를 실행한 후, 주입된 페이로드를 실행하고 의도된 명령 문자열의 나머지 부분은 무시합니다.
$_SESSION['_cid'] 변수에 영향을 주어야 합니다. 이는 세션 오염 취약점과 결합하거나, 애플리케이션의 다른 곳에서 IDOR 또는 안전하지 않은 매개변수 처리를 통해 과정 코드 값을 조작하여 세션 컨텍스트를 업데이트함으로써 달성할 수 있습니다._cid 세션 변수를 다음과 같이 설정: "; [MALICIOUS_COMMAND]; #"/main/inc/ajax/gradebook.ajax.php?a=export_all_certificates&cat_id=1로 GET 요청을 보냅니다.www-data)의 권한으로 주입된 명령을 맹목적으로 실행합니다.escapeshellarg() 적용: $courseCode, $sessionId, $userList와 같은 모든 사용자 유래 변수를 shell_exec()에 전달하기 전에 PHP의 escapeshellarg()로 감싸서 임의의 OS 메타 문자를 무력화하십시오.$_SESSION['_cid'])가 엄격하게 타입이 지정되고 정제되어 잠재적인 "세션 오염" 또는 IDOR 체이닝 공격이 진입점에서 차단되도록 하십시오.www-data)에 제한적인 파일 시스템 쓰기 권한을 설정하고, 애플리케이션이 필수 Linux 셸 바이너리에만 접근할 수 있도록 제한하여 사후 악용 능력을 완화하십시오.핸들 : K
GitHub : https://github.com/kx00007
초점 : 서버 측 취약점 RCE, CVE 사냥, 취약점 연구, 익스플로잇 개발
이전 : CVE-2026-29041 (Chamilo LMS — 파일 업로드를 통한 인증된 RCE)
⚡Try Harder.
| 필드 | 세부 사항 |
|---|
| 제품 | Chamilo LMS |
| 영향받는 버전 | < 2.0 (v1.11.32에서 확인됨) |
| 취약점 | OS 명령 삽입 |
| CWE | CWE-78 — OS 명령에 사용되는 특수 요소의 부적절한 중립화 |
| CVSSv3.1 점수 | 8.8 (높음) |
| 벡터 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 인증 필요 | 예 (세션이 오염된 모든 인증된 사용자) |
| 익스플로잇 유형 | 인증된 원격 코드 실행 |
| 취약한 파일 | main/inc/ajax/gradebook.ajax.php |
| 차원 |
|---|
| 영향 |
|---|
| 기밀성 | 전체 읽기 액세스 — 소스 코드, 설정 파일, DB 자격 증명, /etc/passwd |
| 무결성 | 임의 파일 쓰기, 웹쉘 배포, 데이터베이스 조작 |
| 가용성 | 서비스 중단, 파일 시스템 파괴, 랜섬웨어 배포 |
| 범위 | 웹 서버 프로세스(www-data); 자격 증명 노출을 통한 수평 이동 가능성 |
| 구성 요소 | 세부 사항 |
|---|
| OS | Ubuntu Server (Docker) |
| 웹 서버 | Apache / Nginx |
| PHP | 7.x / 8.x |
| 앱 | Chamilo LMS v1.11.32-v2.0 |
| 셸 | /bin/sh → bash |