🇰🇷 한글 설명
Ninja Forms - Excel Export 플러그인 3.3.6 이하 버전에는 저장형 크로스사이트 스크립팅(XSS) 취약점이 존재합니다. save_filter() AJAX 핸들러가 권한 검사, nonce 검증, 입력값 정제 없이 $_POST['filter']를 옵션에 저장하고, 관리자 Excel Export 화면에서 esc_attr() 없이 HTML 속성에 출력하여 악성 스크립트가 실행될 수 있습니다. 구독자(Subscriber) 이상의 인증된 사용자가 공격에 악용할 수 있습니다.
💡 쉬운 설명
구독자 권한만 있는 사용자가 플러그인의 필터 설정에 악성 스크립트를 숨길 수 있습니다. 관리자가 해당 화면을 열면 스크립트가 실행되어 세션 정보 탈취 등의 피해가 발생할 수 있습니다.
🇺🇸 원문 (English)
The Ninja Forms - Excel Export plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 3.3.6. This is due to the save_filter() AJAX handler storing the raw $_POST['filter'] array into a WordPress option via update_option() without any capability check, nonce verification, or input sanitization, combined with the get_filter_row() method on the admin Excel Export screen concatenating the stored filter values (field_key, condition, value) directly into HTML attributes without esc_attr(). This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.
📍 영향받는 시스템
WordPress용 Ninja Forms - Excel Export 플러그인 3.3.6 이하 버전
⚔️ 공격 벡터
구독자 이상 권한의 공격자가 save_filter AJAX 요청으로 악성 스크립트가 포함된 필터 값을 저장한 뒤, 관리자가 Excel Export 화면을 열면 스크립트가 실행됨
🛡️ 대응 방법
Ninja Forms - Excel Export 플러그인을 3.3.7 이상 버전으로 업데이트하거나, 취약 버전을 비활성화/삭제하고 저장된 필터 옵션을 점검하세요.
🔧 검증 코드
출력 결과가 있으면 버전 3.3.0~3.3.6이 설치된 것이므로 취약하며, 출력이 없으면 취약 버전이 아닐 가능성이 높습니다(플러그인 경로는 환경에 맞게 조정 필요).
grep -rE "Version:\s*3\.3\.[0-6]\b" wp-content/plugins/ninja-forms-excel-export/ 2>/dev/null