
Profile Builder < 4.0.1의 PHP 객체 주입
연구자: Vivien Lebas
영향받는 플러그인: Profile Builder (WordPress)
영향받는 버전: < 4.0.1
수정된 버전: 4.0.1
유형: PHP 객체 주입 (안전하지 않은 역직렬화)
CWE: CWE-502
OWASP: A8 – 안전하지 않은 역직렬화
CVSS 3.1: 6.6 (중간) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: 검증된 권고문
Profile Builder의 Import/Export 애드온은 구성 파일을 가져올 때 역직렬화되는 데이터의 유형을 검증하지 않습니다. 따라서 높은 권한을 가진 사용자 (관리자)가 조작된 JSON 파일을 가져와 PHP 객체 주입을 유발할 수 있습니다.
이 애드온은 무료 확장 기능으로 기본적으로 비활성화되어 있으며, Profile Builder 자체에는 사용 가능한 POP(Property-Oriented Programming) 체인이 포함되어 있지 않습니다. 따라서 구체적인 영향을 미치려면 다른 설치된 플러그인이나 테마에서 적절한 가젯이 필요합니다.
취약점은 가져오기 기능에 있습니다:
/wp-admin/admin.php?page=pbie-import-export&tab=import
가져온 파일 내부의 값이 유형 검사 없이 WordPress의 maybe_unserialize()로
전달됩니다. 값이 직렬화된 객체 문자열인 경우, PHP는 해당 클래스를 인스턴스화하고
가져오기 요청 중에 매직 메서드(__wakeup, __destruct)를 실행합니다.
manage_options)이 필요합니다. 멀티사이트에서는 가져오기가
manage_network로 제한되므로 네트워크/슈퍼 관리자가 필요하며, 하위 사이트
관리자는 거부됩니다.Evil을 사용합니다. https://victim.example/wp-admin/admin.php?page=pbie-import-export&tab=import
payload.json으로 저장합니다: {
"options": {},
"posts": {
"wppb-rf-cpt": [
{
"post_title": "POC",
"post_name": "poc",
"post_type": "post",
"post_status": "publish",
"postmeta": {
"poc": ["O:4:\"Evil\":0:{}"]
}
}
]
}
}
payload.json을 선택하고 Import를 누릅니다.postmeta 값 내부의 문자열이 maybe_unserialize()로 전달되므로, 가져오기
요청 중에 해당 클래스가 인스턴스화되고 매직 메서드가 실행됩니다.
wppb-ul-cpt, wppb-rf-cpt 또는 wppb-epf-cpt 중 하나여야 하지만,
실제로 생성되는 게시물 유형은 각 게시물의 post_type 필드에서 가져오므로
Pro 라이선스 없이도 해당 경로에 접근할 수 있습니다.PHP 객체 주입. 다른 설치된 플러그인이나 테마의 적절한 가젯 체인과 결합하면 파일 작업과 같은 동작이나, 사용 가능한 가젯에 따라 원격 코드 실행으로 이어질 수 있습니다.
Profile Builder를 4.0.1 이상으로 업데이트하십시오.
이 취약점은 벤더에게 책임 있게 공개되었으며, 교육 및 방어 목적으로 수정 사항이 제공된 후 게시됩니다.