
드롭인 WordPress 플러그인으로, FunnelForms Pro의 취약한 데모 가져오기 핸들러를 차단하여 원격 코드 실행(CVE-2026-39440)을 완화합니다.
취약한 FunnelForms Pro ≤ 3.8.1의 Demo Import 핸들러를 차단하여 원격 코드 실행(CVE-2026-39440, CVSS 9.9) 위험을 완화하는 드롭인 WordPress 플러그인입니다.
| 필드 | 값 |
|---|---|
| CVE ID | CVE-2026-39440 |
| CVSS 점수 | 9.9 (치명적) |
| 영향 범위 | FunnelForms Pro ≤ 3.8.1 |
| 권한 수준 | 낮음 (구독자 수준) |
| 유형 | 코드 주입 → 원격 코드 포함 → RCE |
| 패치 여부 | 공식 공급업체 패치 아직 없음 |
| 발견자 | 3ele / Sebastian Weiss |
| 공개일 | 2026년 4월 21일 (Patchstack) |
af2_demoimport AJAX 핸들러(admin/menu_ajax_functions/demoimport.php)에는 두 가지 치명적인 결함이 있습니다:
unserialize() 사용$jsonFile = file_get_contents( $imp_exp_tmp_path . 'af2_export.txt' );
$toImport = unserialize( urldecode( $jsonFile ) );
악성 af2_export.txt가 포함된 조작된 ZIP 파일은 역직렬화 시 PHP 객체 주입을 유발하여 완전한 원격 코드 실행으로 이어집니다.
$_POST['filename']을 통한 경로 탐색$filename = $_POST['filename'];
$file = pathinfo( AF2_PLUGIN_DIR . '/demos/' . $locale . '/' . $filename . '.zip' );
basename()도, 화이트리스트도 없습니다. 공격자는 ../../../uploads/evil을 제공하여 demos/ 디렉터리 외부에서 임의의 ZIP 파일을 가져올 수 있습니다.
최소(구독자) 권한을 가진 인증된 사용자가 이 체인을 악용할 수 있습니다.
cve-2026-39440-funnelforms-fix 폴더를 wp-content/plugins/에 업로드합니다cve-2026-39440-fix.php를 wp-content/mu-plugins/에 직접 복사합니다. 활성화가 필요 없습니다 — MU-플러그인은 자동으로 로드됩니다.
| 작업 | 후크 | 우선순위 |
|---|---|---|
| AJAX 핸들러 차단 | wp_ajax_af2_demoimport | 1 |
| 관리자 하위 메뉴 제거 |
취약한 코드 경로는 절대 실행되지 않습니다. wp_send_json_error()는 내부적으로 wp_die()를 호출하므로 플러그인의 핸들러에 도달하지 않습니다.
활성화 후:
admin-ajax.php?action=af2_demoimport에 대한 모든 요청은 다음을 반환합니다:
{
"success": false,
"data": { "message": "Demo import is temporarily disabled for security reasons (CVE-2026-39440)." }
}
FunnelForms Pro가 다음 조건을 충족하는 공식 패치 버전(> 3.8.1)을 출시하면 이 플러그인을 비활성화하고 삭제할 수 있습니다:
unserialize()를 json_decode()로 대체하거나 엄격한 허용 목록 구현filename 매개변수 검증(basename(), 알려진 데모의 허용 목록)admin_menu |
| 999 |
| demoimport JS/CSS 대기열 제거 | admin_enqueue_scripts | 20 |