PHP 취약점 계층 구조에서, 종속성 주입(DI) 컨테이너 주입 탐지하기는 매우 복잡하고, 악용하기는 우아하며, 파괴적인 영향을 미치는 최상위에 위치합니다.
공개 CVE-2025-32432 타겟팅 Craft CMS (그리고 더 나아가 Yii2 프레임워크)는 사용자 입력이 클래스 인스턴스화를 제어하면 애플리케이션이 공격자의 소유가 된다는 사실을 잔인하게 상기시켜 줍니다.
많은 보안 스캐너가 이를 '구성 문제'로 표시하지만, 엘리트 보안 엔지니어는 이를 실제 문제로 인식하고 있습니다: 원격 코드 실행(RCE) 안전하지 않은 객체 역직렬화를 통해. 이 글에서는 취약점에 대한 기술적 부검을 수행하여 가젯 체인을 재구성하고 AI 기반 분석이 이러한 논리 결함을 대규모로 포착할 수 있는 유일한 방법임을 설명합니다.
실패의 아키텍처: Yii2 컨테이너 내부
CVE-2025-32432를 이해하려면 Yii2의 핵심을 이해해야 합니다. yii\\di\\Container.
Craft CMS는 클래스 종속성을 관리하기 위해 Yii2의 DI 컨테이너를 사용합니다. 개발자는 이 컨테이너를 통해 배열을 사용하여 객체를 구성할 수 있습니다. 예를 들어
PHP
// 합법적인 사용법 $object = Yii::createObject([ 'class' => 'app\\models\\User', 'name' => 'Admin', ]);
이 취약점은 공격자가 이 구성 배열에 영향을 미칠 수 있을 때 발생합니다. 컨트롤러 동작이 원시 JSON 입력을 받아 맹목적으로 Yii::createObject() 또는 Yii::$container->set()공격자는 애플리케이션을 강제로 인스턴스화할 수 있습니다. 모든 클래스 자동 로드 경로에서 사용할 수 있으며 모든 속성 값입니다.
공격 표면
이 결함은 일반적으로 입력 살균이 로직(클래스 정의)이 아닌 XSS(HTML 태그)에 중점을 두는 API 요청 또는 플러그인 구성을 처리하는 Craft CMS 컨트롤러에 존재합니다.
- 출처: 사용자 제공 JSON(예:,
POST /actions/취약 플러그인/save-config). - 싱크:
Yii::createObject($userInput).

킬 체인 구축하기: PoC
익스플로잇을 사용하려면 가젯-라이프사이클 메서드에서 위험한 작업(예: 파일 쓰기 또는 명령 실행)을 수행하는 클래스(__construct, init, __destruct또는 __wakeup).
CVE-2025-32432의 맥락에서, 우리는 다음과 같은 Yii2 에코시스템에서 발견되는 공통 가젯 체인을 활용합니다. yii\\rest\\IndexAction 또는 이와 유사한 콜백이 많은 클래스.
컨셉
PHP 콜백 함수를 실행할 수 있는 클래스를 인스턴스화하려고 합니다( 시스템 또는 exec)를 제공된 인수에 적용합니다.
무기화된 JSON 페이로드
아래는 악성 클래스 정의를 삽입하여 RCE를 트리거하는 방법을 보여주는 개념 증명(PoC)입니다.
JSON
{ "rce_trigger": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "rce", "컨트롤러": { "class": "yii\\\\web\\\\Controller", "id": "더미" }, "modelClass": "yii\\\\base\\\\Model", "run": "id; uname -a" } }
페이로드 분석:
클래스: DI 컨테이너에 인스턴스화하도록 지시합니다.yii\\rest\\IndexAction.checkAccess: 이것은 우리의 위험한 재산입니다. 이 특정 가젯에서는checkAccess프로퍼티는 콜러블을 보유하도록 설계되었습니다. 이를 다음과 같이 설정합니다.시스템.- 실행 트리거: 애플리케이션이 이 객체를 처리할 때 (종종
run()메서드 실행 또는 속성 유효성 검사)에 저장된 콜백을 호출합니다.checkAccess를 컨텍스트(또는 공격자)가 제공한 인수를 사용하여 호출합니다. - 결과: 서버가 다음을 실행합니다.
system('id; uname -a').
참고: 보안이 강화된 환경에서는 공격자가 이 문제를 yii\\캐싱\\파일 캐시 에 PHP 웹 셸을 작성하려면 웹/ 디렉터리로 이동합니다.
기존 스캐너가 이를 놓치는 이유
CVE-2025-32432를 탐지하는 것은 기존 DAST 도구에서 매우 어려운 것으로 악명이 높습니다.
- 서명 없음: 페이로드는 유효한 JSON입니다. SQL 주입 구문을 포함하지 않습니다(
' 또는 1=1) 또는 XSS 태그(). - 컨텍스트에 따라 다릅니다: 취약점은 입력 자체에 있는 것이 아니라 다음과 같은 부분에 있습니다. 어떻게 프레임워크는
클래스키를 입력합니다. 표준 스캐너는 다음을 이해하지 못합니다.클래스에 맵을Yii::createObject.
AI 기반 탐지: 펜리젠트의 이점
여기에서 Penligent.ai 패러다임을 바꿉니다. 펜리전트는 다음을 활용합니다. 컨텍스트 인식 AI 에이전트 프레임워크별 로직을 이해합니다.
- 프레임워크 인식: 펜리전트의 에이전트는 표적이 Craft CMS / Yii2를 실행하고 있음을 식별합니다. 이 프레임워크와 관련된 "위험한 싱크"를 알고 있습니다(예:,
Yii::createObject). - 논리 추론: AI는 맹목적인 퍼징 대신 API 스키마를 분석합니다. 구성과 유사한 매개변수를 수락하는 JSON 객체를 발견하면 다음과 같은 양성 클래스의 인스턴스화를 시도하는 등 지능적으로 '프로빙 페이로드'를 주입합니다.
yii\\helpers\\VarDumper-를 사용하여 컨테이너에 도달할 수 있는지 테스트합니다. - 자동화된 인증: 프로브가 성공하면(예: 애플리케이션이 다르게 동작하거나 클래스 인스턴스화를 나타내는 특정 오류를 반환하는 경우) Penligent는 엔드포인트가 다음에 취약한 것으로 플래그를 지정합니다. 컨테이너 주입 를 호출하고 수정 유효성 검사를 위한 특정 RCE 페이로드를 생성합니다.
치료 및 방어
CVE-2025-32432 및 유사한 DI 공격으로부터 Craft CMS를 보호합니다:
- 엄격한 유형 검사: 원시 사용자 입력 배열을
Yii::createObject. 항상클래스키가 없거나(백엔드에 하드코딩되어 있음) 엄격하게 허용 목록에 있습니다. - Craft CMS를 업데이트합니다: 최신 패치를 즉시 적용하세요. 공급업체에서
액션처리 로직을 사용하여 임의의 클래스 정의를 거부할 수 있습니다. - 위험한 기능 비활성화하기: 귀하의
php.ini사용disable_functions차단하려면시스템,exec,패스스루및proc_open를 사용하여 RCE의 영향을 완화할 수 있습니다.
결론
CVE-2025-32432 는 최신 PHP 프레임워크가 강력하지만 복잡한 공격 표면을 제공한다는 사실을 극명하게 보여줍니다. 컨테이너 인젝션은 "2020년대의 SQL 인젝션"으로, 완전한 제어권을 부여하는 논리 결함입니다.
보안 엔지니어에게 교훈은 분명합니다. 사용자가 개체를 정의하도록 내버려두면 사용자가 파기를 정의하게 된다는 것입니다. 데이터의 "모양"을 검증하는 것만으로는 더 이상 충분하지 않으며, "유형"을 검증해야 합니다.

