Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cotonti-commentswidget-poc — Cotonti CommentsWidget PHP 객체 주입 취약점(CAN-2026-2035973 / CVE-2026-71294)에 대한 안전한 로컬 개념 증명. | Kitploit
도구/GitHubGitHub/harshrajsinghania/cotonti-commentswidget-poc
Vulnerability AnalysisExploitationWeb Application ExploitationLearning & Education
GitHubharshrajsinghania/cotonti-commentswidget-poc

cotonti-commentswidget-poc

Cotonti CommentsWidget PHP 객체 주입 취약점(CAN-2026-2035973 / CVE-2026-71294)에 대한 안전한 로컬 개념 증명.

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
14시간 11분 전아직 검토되지 않음
공유

Cotonti CommentsWidget PHP 객체 주입 PoC

Cotonti의 CommentsWidget 구현에서 확인된 PHP 객체 주입 문제에 대한 안전한 로컬 개념 증명입니다.

취약점

  • 프로젝트: Cotonti
  • 영향받는 구성 요소: plugins/comments/inc/CommentsWidget.php
  • CWE: CWE-502 — 신뢰할 수 없는 데이터의 역직렬화
  • CVE/후보: CAN-2026-2035973 / CVE-2026-71294
  • 연구자: Harsh Raj Singhania

취약한 코드 경로는 ci GET 파라미터를 받아 공격자가 제어하는 데이터를 base64_decode()를 거쳐 PHP의 unserialize()로 전달하며, 어떤 클래스가 인스턴스화될 수 있는지 제한하지 않습니다.

개념적으로 취약한 연산은 다음과 같습니다:

root@kitploit:~
$ci = @unserialize(base64_decode($ci));

직렬화된 객체가 제공되면 PHP는 공격자가 제어하는 클래스를 인스턴스화하고 __wakeup()과 같은 매직 메서드를 호출할 수 있습니다. 더 큰 애플리케이션에서는 적절한 가젯 클래스가 존재할 경우 위험해질 수 있습니다.

제출된 수정 사항은 역직렬화를 다음과 같이 변경합니다:

root@kitploit:~
$ci = @unserialize(base64_decode($ci), ['allowed_classes' => false]);

그리고 결과 값이 사용되기 전에 예상된 배열 구조를 가지는지 검증합니다.

이 PoC가 보여주는 것

poc.php는 세 가지 로컬 테스트를 수행합니다:

  1. 취약한 동작 — 제한 없는 unserialize()가 DangerousGadget을 인스턴스화하고 해당 __wakeup() 메서드를 트리거합니다.
  2. 수정된 동작 — allowed_classes => false가 가젯 클래스의 인스턴스화를 방지하여 __wakeup() 부작용을 차단합니다.
  3. 구조적 검증 — 예상치 못한 형태의 직렬화된 값이 수정 사항에서 사용되는 검증 로직에 의해 거부됩니다.

PoC는 __wakeup()이 실행되었음을 보여주는 무해한 표식으로만 /tmp/pwned_by_cotonti_poc.txt를 사용합니다. 운영 체제 명령을 실행하지는 않습니다. id && whoami 문자열은 가젯의 command 속성에 자리 표시자 값으로만 존재합니다.

요구 사항

  • serialize() / unserialize()를 지원하는 PHP CLI
  • 로컬 테스트 환경

취약한 동작과 수정된 역직렬화 동작이 직접 재현되므로 Cotonti 설치가 필요하지 않습니다.

PoC 실행

저장소 디렉터리에서:

root@kitploit:~
php poc.php

예상 출력은 다음과 유사합니다:

root@kitploit:~
[!] DangerousGadget::__wakeup() triggered
[TEST 1] VULNERABLE: __wakeup() executed during unrestricted unserialize().
[TEST 2] FIXED: object instantiation was blocked; no sentinel was created.
[TEST 3] FIXED: invalid serialized structure rejected by validation.

Summary:
- Vulnerable path allows a serialized attacker-controlled object to be instantiated and invokes __wakeup().
- Fixed path uses allowed_classes=false, preventing the gadget class from being instantiated.
- Structural validation rejects values that do not match the expected array shape.
- No real command execution is performed by this PoC; the command property is only a placeholder.

스크립트는 종료 전에 표식 파일을 제거합니다.

완화 방안

공격자가 제어하는 데이터를 제한 없는 PHP unserialize()로 역직렬화하지 마십시오.

이 코드 경로의 경우, 시연된 완화 방법은 클래스 인스턴스화를 비활성화하는 것입니다:

root@kitploit:~
unserialize($data, ['allowed_classes' => false]);

또한 역직렬화된 값은 내용이 사용되기 전에 애플리케이션이 기대하는 정확한 구조와 일치하는지 검증해야 합니다.

참고 자료

  • 업스트림 보안 이슈: https://github.com/Cotonti/Cotonti/issues/1888
  • 업스트림 수정 풀 리퀘스트: https://github.com/Cotonti/Cotonti/pull/1889
  • Cotonti 프로젝트: https://github.com/Cotonti/Cotonti

책임 있는 사용

이 저장소는 보안 연구, 검증, 방어적 테스트를 목적으로 합니다. 소유하거나 명시적으로 테스트 권한을 받은 환경에서만 PoC를 실행하십시오. 허가 없이 시스템을 대상으로 사용하지 마십시오.

저작자 표시

Harsh Raj Singhania — 취약점 연구, 개념 증명, 공개.

도구 다운로드