본문 바로가기
One-day 취약점 분석

[CVE-2024-38687] One-day 취약점 분석

by jh117jh 2024. 11. 23.
728x90

1. CVE-2024-38687이란?

CVE ID: CVE-2024-38687

CVSS 심각도 점수: 6.4 

영향을 받는 버전: ≤ 2.5.5

 

CVE-2024-38687은 "Sky Addons for Elementor" WordPress 플러그인에서 확인된 저장된 XSS 취약점으로, 2.5.5 이하 버전에 영향을 미친다. 웹 페이지를 렌더링 할 때 사용자 입력을 적절하게 중화하지 않아 문제가 발생하며, 이를 통해 글을 포스팅하는 최소한의 권한(ex: contributor)을 가진 공격자가 악성 JavaScript를 웹 페이지에 삽입할 수 있다. 이는 관리자와 같은 다른 사용자가 해당 페이지를 볼 때 실행된다.

 

2. 환경구축

XAMPP 3.3.0, Wordpress 6.6.2, Sky Addons for Elementor 2.5.4, Elementor 3.25.10

 

https://wordpress.org/plugins/sky-elementor-addons/

 

Sky Addons for Elementor (Free Templates Library, Live Copy, Animations, Post Grid, Post Carousel, Particles, Sliders, Chart, Bl

On-Demand Elementor Best Addons. Power to create stunning websites with one-click. Create beautiful, mobile-ready sites in minutes.

wordpress.org

 

해당 플러그인을 사용하면 글 작성시 다양한 기능들이 추가되어 사용할 수 있다.

 

 

3. 분석

해당 플러그인의 2.5.6버전 패치로그를 확인해 보면 momentum-slider.php에서 패치가 이뤄진 걸 확인할 수 있다.

코드를 살펴보면 2.5.5 버전에서는 $settings['button_icon']['value']값에 대한 이스케이프 처리가 되어있지 않는 것을 확인했다.

 

if (!empty($settings['button_icon']['value'])) {
            $link_icon = '<i class="' . $settings['button_icon']['value'] . ' ' . $icon_position . '"></i>';
        }

 

 

4. POC

글 작성이 가능한 contributors 이상의 권한을 가진 계정으로 글을 작성할 때 Sky addons 플러그인의 Momentum Slider라는 위젯을 추가한 후, Button/Link 옵션에서 아이콘을 추가해 준다.

 

그 후, 포스팅을 패킷을 잡아보면 action파라미터가 Json형식으로 옵션들을 나타내고 있는 것을 확인할 수 있다.

 

 

많은 값들 중 취약점이 발생하는 부분은 ['button_icon']['value'] 값이므로

 

"button_icon":{"value":"far fa-address-book","library":"fa-regular"} →

"button_icon":{"value":"" style="display: inline-block; width: 200px !important; height: 200px !important; background-color: red;" onmouseover="alert('XSS')\”","library":"fa-regular"}

 

(Momentum Slider 위젯의 아이콘 기능을 추가해도 해당 페이지에서 아이콘의 크기가 0으로 되어 노출되지 않아, style옵션으로 생성)

해당 부분과 같이 패킷을 변경하여 보내주면

 

 

빨간 박스에 마우스를 올리는 순간 XSS 취약점이 발생된다.

 

5. 패치

2.5.6 버전부터 esc_attr 함수로 이스케이프 처리되었다.

if (!empty($settings['button_icon']['value'])) {
            $link_icon = '<i class="' . esc_attr($settings['button_icon']['value']) . ' ' . $icon_position . '"></i>';
        }
728x90