🇰🇷 한글 설명
Chamilo LMS 2.0.1 이전 버전에서 career.lib.php와 import_csv.php가 user_career.extra_data를 allowed_classes: false 옵션 없이 unserialize()로 처리합니다. 공격자가 해당 컬럼에 조작된 직렬화 PHP 객체를 기록하면 Symfony, Doctrine, Monolog 구성요소의 POP 가젯 체인을 통해 웹 서버 권한으로 임의 OS 명령을 실행할 수 있습니다.
💡 쉬운 설명
Chamilo 학습관리시스템이 데이터베이스에 저장된 데이터를 안전하지 않은 방식으로 해석합니다. 공격자가 이 데이터를 조작하면 서버를 장악할 수 있습니다.
🇺🇸 원문 (English)
Chamilo LMS is an open-source learning management system. Prior to 2.0.1, `public/main/inc/lib/career.lib.php` and `public/main/cron/import_csv.php` call PHP's native `unserialize()` on `user_career.extra_data` retrieved from the database without the `allowed_classes: false` safety option. An attacker able to write crafted serialized PHP objects to that column, for example through a separate SQL injection, a compromised admin CSV import, or a lower-privilege admin panel, can instantiate arbitrary PHP objects and trigger POP gadget chains in autoloaded `Symfony`, `Doctrine`, or `Monolog` components. This permits arbitrary OS commands as the web server user, compromising server confidentiality, integrity, and availability. This issue is fixed in version 2.0.1.
📍 영향받는 시스템
Chamilo LMS 2.0.1 미만 버전
⚔️ 공격 벡터
SQL 인젝션, 손상된 관리자 CSV 가져오기, 또는 낮은 권한 관리자 계정을 통해 user_career.extra_data 컬럼에 조작된 직렬화 객체를 삽입
🛡️ 대응 방법
Chamilo LMS를 2.0.1 이상으로 업그레이드
🔧 검증 코드
출력이 있으면 allowed_classes 옵션 없이 unserialize가 사용되어 취약한 상태이며, 출력이 없거나 파일이 없으면 패치되었거나 설치되지 않은 것입니다.
grep -rn "unserialize(" $(find / -path '*/chamilo*' -name 'career.lib.php' 2>/dev/null | head -1) 2>/dev/null | grep -v allowed_classes
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
Multi-Domain Security Management Server