🇰🇷 한글 설명
WordPress 플러그인 'Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets'의 Display Logic 기능이 사용자 입력 표현식에 eval()을 사용하며, 허용/차단 목록이 불충분해 array_map과 문자열 연결로 우회 가능합니다. 4.2.2 이하 모든 버전에 영향을 미치며, 기여자(Contributor) 이상 권한의 인증된 공격자가 서버에서 임의 코드를 실행할 수 있습니다. 4.2.0 버전에서 부분적으로 패치되었습니다.
💡 쉬운 설명
이 플러그인은 위젯 표시 조건을 입력받을 때 악성 코드를 걸러내는 장치가 부실합니다. 글 작성 권한이 있는 사용자가 이를 우회해 웹사이트 서버를 마음대로 조작할 수 있습니다.
🇺🇸 원문 (English)
The Widget Options – Advanced Conditional Visibility for Gutenberg Blocks & Classic Widgets plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 4.2.2 via the Display Logic feature. This is due to the plugin using eval() on user-supplied Display Logic expressions with an insufficient blocklist/allowlist that can be bypassed using array_map with string concatenation, combined with a lack of authorization enforcement on the extended_widget_opts_block attribute. This makes it possible for authenticated attackers, with Contributor-level access and above, to execute code on the server. The vulnerability was partially patched in version 4.2.0.
📍 영향받는 시스템
WordPress 플러그인 Widget Options (Advanced Conditional Visibility) 4.2.2 이하 버전
⚔️ 공격 벡터
기여자 이상 권한의 인증된 사용자가 Display Logic 입력에 array_map과 문자열 연결을 이용한 필터 우회 페이로드를 넣어 eval()로 서버 코드를 실행
🛡️ 대응 방법
플러그인을 4.2.2 초과(최신) 버전으로 업데이트하고, 불필요한 기여자 계정을 점검하며, 업데이트가 어려우면 플러그인을 비활성화
🔧 검증 코드
출력된 version 값이 4.2.2 이하이면 취약하므로 즉시 업데이트가 필요하며, 4.2.2 초과이면 패치된 버전입니다 (명령 결과가 없으면 플러그인 경로를 직접 확인).
wp plugin list --name=widget-options --fields=name,version,status 2>/dev/null || grep -r "Version:" wp-content/plugins/*widget-options*/*.php 2>/dev/null | head -1