1. CVE-2024-8236란?
CVE ID: CVE-2024-8236
CVSS 심각도 점수: 6.4
영향을 받는 버전: ≤ 3.25.7
WordPress용 Elementor Website Builder 플러그인은 3.25.7 이전 모든 버전에서 아이콘 위젯의 'url' 매개변수를 통한 Stored XSS에 취약하다. 이는 입력 살균 및 출력 이스케이핑이 충분하지 않기 때문으로, 이를 통해 Contributor 수준 이상의 액세스 권한이 있는 인증된 공격자가 사용자가 삽입된 페이지에 액세스 할 때마다 실행되는 임의의 웹 스크립트를 페이지에 삽입할 수 있다.
2. 환경구축
XAMPP 3.3.0, Wordpress 6.6.2, Elementor 3.25.7
Elemetor을 사용하면 icon 위젯을 사용할 수 있다
3. 분석
해당 버전의 상위버전인 3.25.8 버전의 패치 내역을 보면 link 초기화 부분의 차이를 볼 수 있다.
// 3.25.7
const link = settings.link.url ? 'href="' + elementor.helpers.sanitizeUrl( settings.link.url ) + '"' : '',
3.25.7 버전의 link의 href는 단순 문자열로 추가된다.
이는 3.25.7 버전의 코드가 sanitizeUrl함수로 검증을 하지만 단순히 문자열로 연결하기 때문에 필터링되지 않은 값으로 문자열 조작 공격에 취약하다.
protected function content_template() {
?>
<#
if ( '' === settings.selected_icon.value ) {
return;
}
const link = settings.link.url ? 'href="' + elementor.helpers.sanitizeUrl( settings.link.url ) + '"' : '',
iconHTML = elementor.helpers.renderIcon( view, settings.selected_icon, { 'aria-hidden': true }, 'i' , 'object' ),
migrated = elementor.helpers.isIconMigrated( settings, 'selected_icon' ),
iconTag = link ? 'a' : 'div';
#>
<div class="elementor-icon-wrapper">
<{{{ iconTag }}} class="elementor-icon elementor-animation-{{ settings.hover_animation }}" {{{ link }}}>
<# if ( iconHTML && iconHTML.rendered && ( ! settings.icon || migrated ) ) { #>
{{{ iconHTML.value }}}
<# } else { #>
<i class="{{ settings.icon }}" aria-hidden="true"></i>
<# } #>
</{{{ iconTag }}}>
</div>
<?php
}
해당 코드를 포함하는 content_template 함수는 글을 편집할 때 icon 위젯의 속성 값이 변경되면 호출된다.
그 후, {{{ link }}}는 초기화된 link값을 동적으로 보여주는 부분으로 값이 변경될 때마다 호출된다.
4. POC
icon을 생성한 뒤 링크 속성에 " onmouseover=alert(0) style=” 값을 넣어준 뒤 공개 처리해 준다.
그러면 해당 게시물을 확인해 보면 아래와 같은 a태그로 작성되어 XSS가 발생되지 않는다.
이는 해당 a태그를 게시글에서 랜더링 하는 코드를 보면 add_link_attributes함수로 필터링되어 게시물에서는 안전하다.
if ( ! empty( $settings['link']['url'] ) ) {
$this->add_link_attributes( 'icon-wrapper', $settings['link'] );
$icon_tag = 'a';
}
하지만 그 후 다른 상위 권한을 가진 사용자가 해당 글을 편집하려고 icon 속성 값을 수정하는 순간
아래와 같은 a태그 속성 값이 {{{ link }}}로 인해 호출되어 아래 사진 1과 같았던 a태그 값이 동적으로 변경되므로 안전하게 필터링되지 않은 link값으로 변경되게 된다.
그러면 해당 icon에 마우스를 올리는 순간 XSS가 발생되게 된다.
5. 패치
// 3.25.8
let link = '';
if ( settings.link.url ) {
view.addRenderAttribute( 'link_url', 'href', elementor.helpers.sanitizeUrl( settings.link.url ) );
link = view.getRenderAttributeString( 'link_url' );
}
3.25.8 버전에서는 addRenderAttribute함수를 통해 link_url의 href 속성을 추가한 후 getRenderAttributeString 매서드로 이 속성 값을 가져와 link 변수에 저장한다.
'One-day 취약점 분석' 카테고리의 다른 글
[CVE-2024-6028] One-day 취약점 분석 (0) | 2024.12.16 |
---|---|
[CVE-2023-4596] One-day 취약점 분석 (0) | 2024.12.07 |
[CVE-2024-38687] One-day 취약점 분석 (0) | 2024.11.23 |
[CVE-2023-3460] One-day 취약점 분석 (0) | 2024.11.14 |
[CVE-2023-4521] One-day 취약점 분석 (0) | 2024.11.08 |