WordPress 4.7.0/4.7.1 - Unauthenticated Content Injection 취약점
2017.02.11 23:30
2017.2.2 워드프레스 관련 취약점 Exploit-DB에 공개 되었다.
Poc 코드 공개 이후 해당 취약점을 이용해서 웹 사이트 게시물을 변조 하는 행위가 크게 늘었다.
웹 사이트 위 건수 급증가, 해당 사이트들을 살펴 보던 도중 워드프레스를 사용 하는 것으로 확인 되었고,
이공격으로 인해 해외는 물론 국내의 다수 워드프레스를 사용하는 사이트의 게시물이 변조되었고 그중은 국내 보안 업체인 S사와 대기업인 S 기업 홍보 사이트도 존재하였다.
이번 취약점은 POC공개 이전에 업데이트가 되었으나, 업데이트를 이루어지지 않는 사이트가 많아 단기간에 위변조가 많이 발생했다. Wordpress 엔진에서 기본적으로 제공하는 RestAPI와 관련된 부분이라 피해의 범위가 광범위 했다.
http://www.exploit-db.com/exploits/41223/ poc 코드를 살펴보면 크게 3부분으로 나누어져 있다.
먼저 사이트에서 wordpress 사용 여부 확인 밑 rest api url 획득한다.
워드프레스를 사용할 경우 메인 페이지에서 <link rel='http://api.w.org/' href='http://192.168.1.2/wordpress/wp-json/' /> 확인하여 api baser url을 가져온다.
http://192.168.1.2/wordpress/wp-json/wp/v2/posts의 형태를 이용해 전체 포스팅 목록을 가져 올 수 있다.
원하는 포스팅을 선택하여 post로 데이터를 전생해주면 웹 사이트의 내용이 변조 된다.
코드 실행 후 변조 확인 가능.
취약한 살펴 보면 Class-wp-rest-posts-controller.php 파일은 restapi의 라우팅 정보를 제공한다. 여기서 update_item_permissions_check 함수에 취약점이 존재 한다.
먼저 라우팅에 존재하는 update_item의 함수를 살펴보자 id값이 들어오면 빨간 네모안에 보는듯이 int형으로 변경된다 $id에는 4abc의 비정상 값이 들어와도 4가 나오고 정상적으로 포스팅 내용을 가져 올 수 있다.
위 사진에서도 $post 변수에는 게시물 id를 가져오는데 별도의 처리 없이 바로 권한 체크를 한다. post_id뒤에 abc와 같은 문자열이 있는경구 $post는 존재하지 않는 것으로 인식되고 null이 된다.
첫번쨰 if 구문의 $post && ! $this->check_update_permission( $post )에서 check_update_permission의 값이 False로 결국에는 null && !False로 결과는 False이다. 이것으로 인해 게시물 업데이트를 하기위한 인증을 우회해서 할 수 있다.
원래는 get_post를 wordpress\wp-includes\post.php 를 사용했으나 패치 후에는 Class-wp-rest-posts-contorller.php의 get_post 함수에서 한번 id값을 확인 후 post 내용을 얻어 오도록 변경되었다.
왼쪽은 wordpress 4.7 이고 오른쪽은 4.72버전 id 값에 대한 검증을 하는 것을 확인 할 수 있다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
13 |
Apache struts2 RCE(Remote code execution) CVE-2017-5638, S2-045 취약점
![]() | Leekyu | 2017.03.19 | 2462 |
» |
WordPress 4.7.0/4.7.1 - Unauthenticated Content Injection 취약점
![]() | Leekyu | 2017.02.11 | 12553 |
11 |
Pydio / AjaXplorer 5.0.3 Shell Upload 파일 업로드 취약점
![]() | Leekyu | 2016.08.27 | 1051 |
10 |
V2 Conference Video Conference System SQL injection Vulnerability.
![]() | Leekyu | 2016.07.23 | 958 |
9 | Joomla JCE Remote File Upload file (upgrade version) | Leekyu | 2016.04.04 | 6559 |
8 | Exploit Code for ipTIME firmwares < 9.58 RCE with root privileges against 127 router models [1] | Leekyu | 2016.02.18 | 3641 |
7 |
Remote File Inclusion
![]() | Leekyu | 2014.11.09 | 3420 |
6 | JBoss AS Remote Exploit [1] | Leekyu | 2014.09.23 | 2422 |
5 |
구글봇을 이용한 공격
![]() | Leekyu | 2014.04.20 | 7172 |
4 |
Tomcat web application manager exploit
![]() | Leekyu | 2013.10.13 | 5038 |
3 |
Joomla JCE Remote File Upload
![]() | Leekyu | 2013.09.29 | 14736 |
2 |
HTTP server CONNECT method used to bypass filtering (HTTP_Connect_Proxy_Bypass_SMTP)
![]() | Leekyu | 2013.09.25 | 19177 |
1 |
Dadong's JSXX 0.41 VIP 난독화
![]() | Leekyu | 2013.07.03 | 998 |