현재 약 20만개 이상의 웹사이트에 설치되어있는 WordPress의 Ad Inserter Plugin 2.4.21 이하 버전에서 인증된 공격자에 의한 원격 php코드 실행 가능 취약점이 발견되었다.
※취약점 정보 | |
취약점 정보 | 인증된 원격 코드 실행 취약점 |
영향을 받는 플러그인 | Ad Inserter |
영향을 받는 버전 | 2.4.21 이하 |
CVSS Score | 9.9(Critical) |
CVSS Vector | CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
Ad Inserter는 WordPress의 광고관리 Plugin으로 다양한 광고 배너에서 최적화된 광고를 표시해주는 Plugin이다. 현재 다수의 WordPress기반 웹사이트에서 사용중인 이 Plugin은 광고 미리보기 기능을 통하여 관리자에 의해 광고가 사용자에게 표시되기 전 광고의 내용에 악의적인 내용이 있는지 확인할 수 있다.
해당 취약점은 WordPress 웹사이트에서 CSRF (Cross-site request forgery)공격을 막기 위한 인증에 사용되는 check_admin_referer() 함수를 악용하는 취약점으로, 만료되거나 반복되는 request를 막기 위한 one-time token인 Nonce 사용하는 방식을 통해 동작하게 된다.
[그림 1] ajax_backed 관련 소스코드(출처: www.wordfence.com)
Ad Inserter의 CSRF 방지기능은 Ajax의 ai_ajax_backend 기능을 통해 접근하게 된다. 기본적으로 Ajax 작업은 로그인 한 사용자만이 액세스 할 수 있으며 이 작업의 구현 방식은 "check_admin_referer()" 함수의 코드 내에 추가적인 보안 컨트롤을 통해 수행되게 된다.
해당 함수의 추가적인 보안 컨트롤의 역할을 수행하는 것이 Nonce라고 하는 임의의 숫자와 문자로 이루어진 Hash값으로 check_admin_referer() 함수가 Request에 Nonce 값이 존재하는지 여부를 확인하는 것을 통해 악의적인 접근을 차단하게 된다.
[그림 2] ai_ajax_backend() 함수 (출처: www.wordfence.com)
하지만, 해당 Plugin에서는 Nonce값이 접근 통제의 수단으로 사용되고 있어 Nonce값을 보유중인 인증된 사용자의 경우 디버깅 기능 또한 사용이 가능하다. Subscriber Level이상의 Nonce를 보유한 사용자는 admin-ajax.php에 악성 페이로드를 포함하는 php코드를 전송하여 실행시키는 것이 가능하다.
[그림 3] 악성 페이로드 실행 결과 (출처: www.wordfence.com)
WordPress Ad Inserter Plugin의 해당 취약점을 보완한 2.4.22 패치가 7월 13일 업데이트 되었으므로 해당 Plugin을 사용하고 있는 경우 업데이트 할 것을 권고한다.
[출처]
https://www.wordfence.com/blog/2019/07/critical-vulnerability-patched-in-ad-inserter-plugin/
보안관제센터 MIR Team