Post

[CVE-2024-6408] 취약점 분석 보고서

Slider by 10Web에서 발생하는 Stored XSS 취약점

1. 취약점 개요

Slider by 10Web은 웹사이트의 페이지, 게시물, 테마 헤더에 빠르게 로딩되어 사용자 친화적인 슬라이더를 추가할 수 있게 하는 플러그인이다. 슬라이드에 이미지와 비디오를 모두 지원하며, 다양한 효과로 슬라이드를 더욱 생동감 있게 꾸밀 수 있다.

사용자에게 입력 받은 슬라이더의 제목을 이스케이프하지 않으므로 편집자 이상의 권한이 높은 사용자가 unfiltered_html이 허용되지 않더라도 XSS 공격을 수행할 수 있다.

2. 영향을 받는 버전

  • Slider by 10Web < 1.2.57

3. 취약점 테스트

슬라이더 제목에 아래와 같이 마우스 이벤트를 삽입하고 Publish로 저장한다.

1
Test" onmouseover=alert(/XSS/)//

image.png

생성된 슬라이더 썸네일의 마우스를 올리면 alert가 동작하게 된다.

image.png

해당 취약점은 슬라이더를 추가하거나 편집할 때 모두 동작한다.

4. 취약점 상세 분석

슬라이더의 이름은 $this->form() 메서드에서 <input> 태그로 입력 받아 처리되며 이 데이터는 $row->name 변수에 저장된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// slider-wd/admin/views/Sliders.php

public function display( $params = array() ) {
	ob_start();
	echo $this->body($params);
	$form_attr = array(
	  'id' => WDS()->prefix . '_sliders_form',
	  'name' => WDS()->prefix . '_sliders',
	  'class' => WDS()->prefix . '_sliders wd-form',
	  'action' => add_query_arg(array( 'page' => 'sliders_' . WDS()->prefix ), 'admin.php'),
	);
	echo $this->form(ob_get_clean(), $form_attr);
}

$row->name 값은 그대로 <img> 태그의 title 속성에 들어가며, 이 값은 브라우저에서 이미지 위에 마우스를 올릴 때 툴팁으로 표시된다.

1
2
3
<!-- slider-wd/admin/views/Sliders.php -->

<img class="preview-image" title="<?php echo $row->name; ?>" src="<?php echo $preview_image; ?>" width="60" height="60" />

5. 패치

https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&new=3114483%40slider-wd&old=3103665%40slider-wd&sfp_email=&sfph_mail=

패치에서는 사용자 입력값 $row->name 을 HTML로 출력하기 전에 이스케이프 처리하여 스크립트 삽입을 방지하였다.

image.png

This post is licensed under CC BY 4.0 by the author.