Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

GDPR 쿠키 동의 플러그인 보안 취약점 경고 — 권한 상승 및 XSS 공격 위험, 지금 1.8.3으로 업데이트

사용자가 손쉽게 GDPR 규정을 준수하도록 도와주는 워드프레스 GDPR 쿠키 동의(GDPR Cookie Consent) 플러그인에서 부적절한 접근 제어(Improper Access Control) 취약점이 발견되었습니다. 이 취약점은 권한 상승(Privilege Escalation)과 저장형 XSS(Stored XSS)와 같은 심각한 보안 문제로 이어질 수 있습니다. 이 글을 작성하는 시점 기준으로 해당 플러그인은 70만 개가 넘는 워드프레스 사이트에서 활발하게 사용되고 있습니다.

GDPR 쿠키 동의 플러그인 보안 취약점 경고 — 권한 상승 및 XSS 공격 위험, 지금 1.8.3으로 업데이트

취약점 타임라인

  • 취약점 신고일 – 2020년 2월 4일
  • 패치 완료일 – 2020년 2월 10일
  • 영향받는 버전 – 1.8.2 이하 전체 버전
  • 패치된 버전 – 1.8.3

취약점은 먼저 wordpress.org에 보고되었으며, 이후 해당 플러그인은 워드프레스 저장소에서 일시적으로 제거되었습니다. 2월 10일 패치가 배포되자마자 워드프레스는 플러그인에 대한 제한을 해제했습니다.

1.8.2 이하 버전을 사용 중이라면 해킹당할 위험에 노출되어 있습니다. 최대한 빨리 패치된 버전 1.8.3으로 업데이트하시기 바랍니다.

GDPR 플러그인 취약점 상세 분석

취약점은 __construct 메서드 내부의 cli_policy_generator에 존재합니다. 워드프레스 AJAX API를 통해 실행되는 ajax_policy_generator에는 필수적인 권한 검증(capability check)이 누락되어 있습니다. 그 결과 AJAX 요청과 함께 논스(nonce) 코드가 전송되더라도 PHP 프레임워크 전반에서 이 값이 검증되지 않습니다.

ajax_policy_generator는 세 가지 작업을 처리할 수 있습니다: autosave_contant_data, save_contentdata, get_policy_pageid.

이 중 autosave_contant_datasave_contentdata 두 가지 작업이 공격에 취약합니다. autosave_contant_data는 권한 상승으로 이어질 수 있으며, save_contentdata는 저장형 XSS를 유발할 수 있습니다.

save_contentdata 취약점

cli_policy_generatorsave_contentdata 함수는 GDPR 쿠키 정책을 페이지(page) 포스트 타입으로 저장하는 기능을 담당합니다. 이를 악용하면 구독자(Subscriber) 수준의 낮은 권한만 가진 로그인 사용자도 게시물 상태를 변경할 수 있습니다. 즉, 누구나 게시물을 발행하거나 이미 발행된 게시물을 초안으로 되돌릴 수 있습니다. 더 심각한 경우, 웹사이트의 전체 페이지를 초안 상태로 변경해 사이트 자체를 마비시킬 수도 있습니다.

public function save_contentdata()
{
   $out=array(
      'response'=>true,
      'er'=>''
   );
   $content_data=isset($_POST['content_data']) ? $_POST['content_data'] : array();
   $page_id=(int) isset($_POST['page_id']) ? $_POST['page_id']*1 : 0;
   $enable_webtofee_powered_by=(int) isset($_POST['enable_webtofee_powered_by']) ? $_POST['enable_webtofee_powered_by']*1 : 0;
   $id=wp_insert_post(
      array(
         'ID'=>$page_id, //if ID is zero it will create new page otherwise update
         'post_title'=>'Cookie Policy',
         'post_type'=>'page',
         'post_content'=>Cookie_Law_Info_Cli_Policy_Generator::generate_page_content($enable_webtofee_powered_by,$content_data,0),
         'post_status' => 'draft', //default is draft
      )
   );
   if(is_wp_error($id))
   {
      $out=array(
         'response'=>false,
         'er'=>__('Error','cookie-law-info'),
         //'er'=>$id->get_error_message(),
      );
   }else
   {
      Cookie_Law_Info_Cli_Policy_Generator::set_cookie_policy_pageid($id);
      $out['url']=get_edit_post_link($id);
   }
   return $out;
}

autosave_contant_data 취약점

autosave_contant_data는 관리자가 편집 중일 때 GDPR 쿠키 데이터를 cli_pg_content_data 옵션에 임시 저장합니다.

그런데 cli_pg_content_data에 대한 입력값 검증이 누락되어 있어, GDPR Cookie Consent 플러그인이 설치된 웹사이트에서는 로그인 권한만 있는 사용자라면 누구나 악성 자바스크립트 코드를 삽입할 수 있습니다.

public function autosave_contant_data()
{
   global $wpdb;
   $scan_table=$wpdb->prefix.$this->main_tb;
   $out=array(
      'response'=>true,
      'er'=>''
   );
   $content_data=isset($_POST['content_data']) ? $_POST['content_data'] : array();
   $page_id=isset($_POST['page_id']) ? $_POST['page_id'] : '';
   $enable_webtofee_powered_by=(int) isset($_POST['enable_webtofee_powered_by']) ? $_POST['enable_webtofee_powered_by']*1 : 0;
   if(is_array($content_data))
   {
      $content_html=Cookie_Law_Info_Cli_Policy_Generator::generate_page_content($enable_webtofee_powered_by,$content_data);
      update_option('cli_pg_content_data',$content_html);
   }else
   {
      $out=array(
         'response'=>false,
         'er'=>__('Error','cookie-law-info')
      );
   }
   return $out;
}

패치 출시! 지금 바로 업데이트하세요

최신 버전 1.8.3으로 업데이트하고, 방화벽으로 웹사이트를 한층 더 안전하게 보호하세요.

Astra 방화벽은 XSS, SQLi, CSRF, LFI, RFI, 스팸, 악성 봇, OWASP Top 10 등 다양한 공격으로부터 웹사이트를 보호합니다. Astra 시작 방법은 매우 간단합니다.

  • 요금제를 선택하고 가입합니다.
  • 몇 가지 셀프 서비스 단계에 따라 Astra를 설치합니다 (5분 미만 소요).

설정은 이것으로 끝입니다. Astra 방화벽이 잠재적인 모든 공격으로부터 웹사이트를 실시간으로 보호합니다. 이제 Astra 대시보드에서 웹사이트 상태를 모니터링할 수 있습니다.

GDPR 쿠키 동의 플러그인 보안 취약점 경고 — 권한 상승 및 XSS 공격 위험, 지금 1.8.3으로 업데이트

아직 확신이 서지 않으신가요? 여기에서 Astra 데모를 신청해 보세요.

궁금한 점이 있다면 아래에 댓글을 남기거나 메시지를 보내주세요. 성심껏 답변해 드리겠습니다 :)