Component type
WordPress plugin
Component details
Component name: SendPulse Email Marketing Newsletter
Vulnerable version: <=2.1.5
Component slug: sendpulse-email-marketing-newsletter
Component link: https://wordpress.org/plugins/sendpulse-email-marketing-newsletter/
SendPulse Email Marketing Newsletter
Add e-mail subscription form, send marketing newsletters and create autoresponders.
wordpress.org
OWASP 2017: TOP 10
Vulnerability class A3: Injection
Vulnerability type: XSS
Pre-requisite
Contributor+
Vulnerability details
👉 Short description
SendPulse Email Marketing Newsletter 플러그인은 SendPulse를 위한 WordPress 플러그인으로, 웹사이트에 이메일 구독 폼을 추가할 수 있도록 도와준다. 새로운 구독자가 추가되면 자동으로 이메일 리스트에 등록되며, SendPulse 플랫폼을 통해 이메일 캠페인을 생성하고 보낼 수 있다. 해당 플러그인 2.1.5 버전 이하에서는 뉴스 폼을 추가하는 부분에서 Stored XSS 취약점이 발생한다.
👉 How to reproduce (PoC)
1. SendPulse Email Marketing Newsletter 플러그인 2.1.5 이하 버전이 활성화된 워드프레스 사이트를 준비한다.
2. 최소 권한인 contributor 계정으로 로그인하고 플러그인 페이지에서 뉴스 폼 추가 버튼을 클릭한다.
3. textarea에 아래 코드를 넣고 저장한다.
</textarea><script>alert('XSS');</script>
4. 이후 admin 계정으로 변경하고 contributor로 작성한 폼의 Edit 버튼을 클릭한다.
5. 편집 페이지에서 XSS가 트리거 된 것을 확인할 수 있다.
👉 Additional information (optional)
class-senpulse-newsletter-forms.php에서 save_meta 메서드에서 사용자 입력값인 save_meta 메서드에서 사용자 입력값인 $_POST['sp_form_code']가 검증 없이 그대로 데이터베이스에 저장되고 있다. 다음으로, 편집 페이지인 code_metabox_output 메서드에서, 데이터베이스에서 가져온 값 $code를 필터링 없이 그대로 출력하고 있기 때문에 저장된 스크립트가 브라우저에서 실행된다.
// sendpulse-email-marketing-newsletter/inc/class-senpulse-newsletter-forms.php
public function code_metabox_output( $post ) {
$code = get_post_meta( $post->ID, '_sp_form_code', true );
?>
<textarea rows="20" cols="40" name="sp_form_code" id="sp_form_code"
placeholder="<?php _e( 'Paste code here', 'sendpulse-email-marketing-newsletter' ); ?>"><?php echo $code; ?></textarea>
<p><?php echo sprintf( __( 'Code from <a href="%s">Constructor Form</a> (<a class="%s" href="%s" title="Open help page in new tab" target="_blank">Need help?</a>)', 'sendpulse-email-marketing-newsletter' ),
'https://login.sendpulse.com/emailservice/forms/constructor/',
'h-help',
'https://sendpulse.com/ru/blog/subscription-forms?utm_campaign=novinki-za-sentiabr&utm_source=sendpulse&utm_medium=email' ); ?></p>
<?php
}
public function save_meta( $post_id ) {
if ( array_key_exists( 'sp_form_code', $_POST ) ) {
update_post_meta(
$post_id,
'_sp_form_code',
$_POST['sp_form_code']
);
}
}
👉 Attach files (optional)
Reference
'Report > Zero-Day' 카테고리의 다른 글
CVE-2025-26886 (0) | 2025.03.01 |
---|---|
CVE-2025-26971 (0) | 2025.02.28 |