CVE-2026-71294 in Cotonti
요약
\~에 의해 VulDB • 2026. 08. 06.
Cotonti CMS의 Comments 플러그인은 인스턴스화될 수 있는 클래스를 제한하지 않은 채 사용자 제공 데이터를 역직렬화합니다. `plugins/comments/controllers/actions/CreateAction.php`에서, `cot_import('ci', 'P', 'TXT')`(trim-only sanitization)를 통해 얻은 `ci` POST 파라미터는 `allowed_classes` 제한 없이 `unserialize(base64_decode($ci))`에 전달되며, 댓글 작성 권한이 있는 모든 구성원(플러그인 설정 파일(`plugins/comments/comments.setup.php`)의 기본값인 `Auth_members => 'RW'` 설정)에게 접근 가능합니다. 또한 `plugins/comments/controllers/actions/EditAction.php`에서는 `prepareComeBack()` 메서드 내에서 `cb` 파라미터가 동일하게 `unserialize(base64_decode($this->comeback))`를 통해 역직렬화되며, 이는 자신의 댓글을 편집하는 모든 구성원이 접근할 수 있습니다. `allowed_classes` 없이 `unserialize()`가 호출되므로 공격자는 Cotonti에 로드된 임의 클래스의 직렬화된 PHP 객체를 생성할 수 있습니다(PHP Object Injection 원시 기술). 이 취약점은 실제로 Cotonti 자체의 MySQL_cache 클래스를 사용하여 입증되었습니다: 조작된 직렬화된 MySQL_cache 객체가 역직렬화되고 이후 가비지 컬렉션될 때 `__destruct()->flush()` 체인이 트리거되어 공격자가 제어하는 값으로 `cot_cache` 테이블에 INSERT INTO가 발생하며, 이는 genuine POP-chain(객체 그래프 기반 악용)의 성공적인 실행을 확인해 줍니다. 추가 영향력(RCE 포함 가능성 등)은 해당 Cotonti 설치 환경에 로드된 클래스에서 이용 가능한 다른 지렛대(gadget) 체인에 달려 있습니다. `DeleteAction.php`에는 동일한 `unserialize()` 패턴을 가진 세 번째 싱크가 존재하지만, 이는 관리자 전용 권한 확인 뒤에 위치하므로 일반 구성원에게는 접근 불가능합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.