Post

[CVE-2025-22811] 취약점 분석 보고서

CVE-2025-22811 WordPress의 MT Addons for Elementor 플러그인에서 잘못된 필터링 함수 사용으로 발생된 Stored XSS

1. CVE-2025-22811이란?

CVE ID: CVE-2025-22811
CVSS 심각도 점수: 6.5
영향을 받는 버전: ≤ 1.0.6

CVE-2025-22811은 Elementor 플러그인용 Modeltheme MT Addons에서 확인된 Stored XSS 취약점으로, 1.0.6 이하 버전에 영향을 미친다. 해당 취약점은 웹 페이지 생성 중 위젯 입력 값을 부적절하게 필터링 하여 발생한다.

CVE-2025-22811

2. 환경 구축

XAMPP 3.3.0, Wordpress 6.6.2, MT Addons for Elementor 1.0.6

image.png

해당 플러그인 1.0.6 버전을 설치 후, 활성화 한다.

3. 분석

1
2
3
4
5
6
7
8
9
10
11
12
13
//contact-card.php

<li class="mt-addons-contact-card-list-item">
	<a class="<?php echo esc_attr($title_visible); ?>" <?php echo wp_kses($this->get_render_attribute_string( 'title_url' ), 'link'); ?>>
		<<?php echo esc_attr($title_tag); ?> class="mt-addons-contact-card-list-title">
	  <?php echo esc_html($title); ?>
  </<?php echo esc_attr($title_tag); ?>>
  </a>
  <a class="mt-addons-contact-card-text-item elementor-repeater-item-<?php echo esc_attr($card['_id'])?>" <?php echo htmlspecialchars($subtitle_url_attribute); ?>>
	  <i class="mt-addons-contact-card-list-icon <?php echo esc_attr($icon_visible); ?> <?php echo esc_attr($icon); ?>" aria-hidden="true"></i>
	  <span class="mt-addons-contact-card-list-text"><?php echo esc_html($subtitle); ?></span>
  </a>
</li>

해당 코드는 contact-card.php의 코드 일부분이다.

겉으로 보면 이스케이프 함수들을 이용해서 필터링이 잘 되어 있어 보이지만

«?php echo esc_attr($title_tag); ?> class=”mt-addons-contact-card-list-title”>

위 코드를 보면 title_tag를 이용해 mt-addons-contact-card-list-title 클래스값을 가진 태그를 생성하고 있다.

해당 기능은 글자 크기를 지정하는 h1,h2,h3….등의 태그가 들어가는 기능으로 구현되어 있다.

하지만 title_tag의 값이 esc_attr함수로 필터링이 되어 있는데

esc_attr함수의 기능은 <, >, &, ” 및 ‘ (더블쿼터, 싱글쿼터)문자를 인코딩한다.

이 기능을 통해 다른 태그를 삽입 하는 것은 방지할 수 있지만 애초에 title_tag가 태그 이름을 지정하는 부분이므로 <,>의 입력 없이 악성 태그를 삽입 할 수 있다.

4. POC

글을 하나 작성하고 contact card 위젯을 추가해준다.

image.png

취약점이 발생한 곳은 title tag 부분이며, 편집 상태에서는 h1~h6까지 선택할 수 있다.

해당 글을 발행 해보면

image.png

h1 태그가 작성된 걸 확인할 수 있다.

글 발행 패킷을 잡아 해당 부분에 img 태그와 이벤트 헨들러를 통해 Stored XSS를 발생 시켜보면

image.png

img 태그로 alert 이벤트가 실행되는 걸 확인할 수 있다.

image.png

image.png

5. 패치

1
2
3
<<?php echo Utils::validate_html_tag( $title_tag ); ?> class="mt-addons-contact-card-list-title">
<?php echo esc_html($title); ?>
</<?php echo Utils::validate_html_tag( $title_tag ); ?>>

해당 부분은 esc_attr대신 validate_html_tag함수로 필터링 되게 패치 되었다.

validate_html_tag함수는 태그 유효성, href, src와 같은 안전하지 않은 속성, 이벤트 헨들러등을 검사하여 이스케이프 처리를 해준다.

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