워드프레스 뉴스페이퍼 테마: wp-zexit 관련 멀웨어 감염 주의 - 치료와 예방

Last Updated: 2023년 10월 07일 | | 2개 댓글

최근 워드프레스 뉴스페이퍼 테마를 사용하는 사이트에서 wp-zexit 플러그인이 설치되면서 사이트에 접속 시 이상한 사이트로 리디렉션되는 문제를 호소하는 사용자들이 늘어났습니다. 해외 커뮤니티에 의하면 이 문제는 tagDiv Composer 플러그인에 보안 취약점이 있어서 발생한다고 합니다.

Newspaper 테마를 사용하는 경우 백업을 철저히 하시고, wp-zexit 플러그인이 설치되어 있지만 않은지, 그리고 이상한 사이트로 리디렉션되지 않는지 확인하시기 바랍니다.

wp-zexit 플러그인이 설치되어 있거나 이상한 사이트로 리디렉션되는 경우 아래의 글을 참고하여 조치를 취하시기 바랍니다.

2023년 10월 7일 업데이트: tagDiv Composer 4.2 미만 버전에서 Unauthenticated Stored XSS 발견

최근 뉴스페이퍼 테마를 사용하는 워드프레스 사이트가 wp-zexit 관련 멀웨어에 감염되는 사례가 증가했습니다. 이 보안 취약점은 tagDiv Composer 4.2에서 수정되었다고 합니다. 2023년 10월 7일 현재 tagDiv Composer 버전은 4.4입니다.

뉴스페이퍼 테마를 사용하는 경우 wp-zexit 플러그인이 설치되어 있지 않은지, 이상한 사용자가 추가되어 있지 않은지, 그리고 리다이렉트 등 이상 증상이 발생하지 않는지 꼼꼼히 체크해보시기 바랍니다.

이상이 없다면 다음 코드를 wp-config.php 파일에 추가하여 알림판을 통해 파일을 수정할 수 없도록 테마 편집기를 비활성화하면 도움이 됩니다. 물론 테마가 최신 버전이 아닌 경우 최신 버전으로 업데이트하도록 합니다.

define('DISALLOW_FILE_EDIT', true);

워드프레스 뉴스페이퍼 테마: wp-zexit 관련 멀웨어 감염 시 대처 방법

방문자들이 뉴스페이퍼 테마로 만든 사이트에 접속하면 아래와 같은 이상한 사이트로 리디렉션되는 현상이 발생하는 경우가 최근 빈번해지고 있습니다. 사이트에 접속 시 아래와 같은 이상한 페이지로 이동한다고 네이버 카페를 통해 뉴스페이퍼 사용자들이 알려왔습니다. 또한, 이 문제는 해외 커뮤니티에서도 많은 사용자들에 의해 제기되고 있는 것 같습니다.

워드프레스 뉴스페이퍼 테마: wp-zexit 관련 멀웨어 감염 주의

테마를 떠나서 워드프레스 사이트나 다른 사이트에 접속 시 이상한 페이지로 이동한다면 멀웨어(악성코드)에 감염되었을 가능성이 큽니다.

뉴스페이퍼 테마가 설치된 사이트에서 이상한 페이지로 리디렉션된다면, 우선 백업본이 있는지 살펴보시고 멀웨어에 감염되기 이전 상태로 되돌릴 수 있다면 되돌린 후에 보안 조치를 해주면 해결됩니다.

카페24의 경우 지난 7일간 백업본이 제공됩니다. 클라우드웨이즈(Cloudways)를 사용한다면 사이트를 자동 복원하는 것이 가능합니다(참고).

뉴스페이퍼 테마를 사용하는 경우 다음 사항을 확인하여 멀웨어 감염 여부를 판단할 수 있습니다.

  1. 사이트 접속 시 이상한 사이트로 이동한다.
  2. wp-zexit 또는 wp-swamp 등의 이상한 플러그인을 설치되어 있다.
  3. greeceman이라는 이상한 사용자가 생성되어 있다. (멀웨어에 감염될 경우 이상한 사이트가 생성되어 있는 경우가 많습니다.)
  4. 악성코드 스캔 시 트로이 목마(trojan) 악성코드 감지됨

wp-zexit 플러그인이 설치되어 있고 이상한 사이트로 리디렉션되는 경우 reddit 포럼에서 이 문제를 다루고 있으므로 참고하여 멀웨어를 제거할 수 있습니다. 이 레딧 포럼에 올라온 멀웨어 제거 방법 중 하나를 소개하면 다음과 같습니다. 데이터와 디비를 백업한 후에 진행하세요.

  1. 뉴스페이퍼 테마를 비활성화하고 폴더를 삭제합니다. tagDiv Composer를 비롯하여 뉴스페이퍼 테마와 관련된 모든 플러그인을 비활성화하고 삭제합니다.
  2. wp-content/plugins로 이동하여 wp-zexit 또는 wp-swamp를 찾아서 폴더를 삭제합니다.
  3. 이제 새로 워드프레스 사이트를 설치하려고 합니다. wp-content 폴더를 백업합니다(중요!!) wp-config.php 및 기타 중요한 파일들을 백업합니다. wp-content 폴더를 제거하고 데이터베이스를 백업합니다.
  4. 사이트 폴더 내의 모든 파일을 삭제합니다.
  5. wordpress.org/latest.zip에서 최신 워드프레스 설치 파일을 다운로드하여 압축을 해제하여 업로드합니다. 본래 워드프레스가 설치된 서버의 루트 폴더로 업로드합니다.
  6. 백업한 wp-config.php 파일과 wp-content 폴더를 복원합니다.
  7. 이제 데이터베이스(Database)가 감염되었는지 체크합니다. 워드프레스 DB에서 wp_users테 테이블로 이동하여 생성하지 않은 이상한 사용자가 있는지 확인합니다. 아마도 "greeceman"이라는 사용자가 생성되어 있을 것입니다. select * from wp_users; 쿼리를 사용하여 검색할 수 있습니다.
  8. 해당 사용자를 제거합니다. 예를 들어, 만약 해커 사용자의 ID가 19라면 delete from wp_users where ID=19; 쿼리를 실행하여 해당 사이트를 삭제할 수 있습니다. (where 조건문 없이 SQL 명령을 실행하면 모든 사용자가 삭제되므로 조심하세요. DB 작업을 할 때에는 백업을 반드시 하시기 바랍니다.)
  9. select option_value from wp_options where option_name = 'td_live_css_local_storage'; 쿼리를 사용하여 td_live_css_local_storage에 이상한 것이 없는지 체크합니다. 아마도 난독화된 sh1t가 많이 발견될 것입니다.
  10. UPDATE wp_options SET option_value = '' WHERE option_name = 'td_live_css_local_storage'; 쿼리를 실행하여 삭제합니다.
  11. 이것으로 멀웨어가 모두 제거되었습니다. 이제 다른 테마를 사용하는 것이 안전합니다. 뉴스페이퍼 대신 이 블로그에 설치된 GeneratePress와 같은 테마도 하나의 옵션으로 고려할 수 있습니다. 이 블로그에서는 Newspaper 테마를 한 동안 사용하다 GP 테마로 바꾸었습니다. 뉴스페이퍼 테마는 화려하게 꾸미기에는 좋지만 트래픽을 많이 차지하고 속도면에서도 느릴 수 있습니다.

위의 방법으로도 완벽하게 멀웨어가 제거되지 않았을 수도 있습니다. 이후에 wp-content 폴더(uploads 폴더 포함)를 체크하여 이상한 파일들이 없는지도 확인해보시기 바랍니다.

또한, 다음과 같은 조치를 취하시기 바랍니다.

  1. 워드프레스, 테마, 플러그인을 모두 최신 버전으로 업데이트합니다.
  2. 보안 플러그인을 설치합니다. (멀웨어가 감염된 상태에서 보안 플러그인을 설치하는 경우가 있는데, 이 경우 멀웨어를 제대로 제거하지 못하므로 반드시 악성코드 제거 후에 설치해 주세요.)
  3. 정기적으로 백업합니다.

멀웨어를 모두 제거했다면 웹호스팅 업체에 연락하여 악성코드 스캔을 요청할 수 있습니다. 패스트코멧이나 SiteGround 등에서는 멀웨어를 제거해야 사이트 차단을 풀어줄 것입니다.

뉴스페이퍼 테마 사이트가 악성코드에 감염되지 않은 경우

이 블로그의 서브 디렉터리에 뉴스페이터 테마가 설치되어 있습니다. 다행히 wp-zexit와 관련된 악성코드에 감염되지 않은 것 같습니다.

저는 혹시 몰라서 다음과 같은 코드를 .htaccess 파일에 추가했습니다.

# Protect specific plugin directories
RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/plugins/wp-zexit/ - [F,L]
RewriteRule ^wp-content/plugins/wp-swamp/ - [F,L]

그리고 차일드 테마의 함수 파일에 다음과 같은 코드도 추가했습니다.

function prevent_wp_zexit_activation() {
    include_once(ABSPATH . 'wp-admin/includes/plugin.php');
    if (is_plugin_active('wp-zexit/wp-zexit.php')) {
        deactivate_plugins('wp-zexit/wp-zexit.php');
        delete_plugins(array('wp-zexit/wp-zexit.php'));
    }
}
add_action('admin_init', 'prevent_wp_zexit_activation');

또한, 다음과 같은 코드도 추가했습니다. 이 코드는 어떤 사용자든 신규 사용자를 생성할 수 없게 합니다.

function remove_create_users_capability_from_all_roles() {
    $roles = array('administrator', 'editor', 'author', 'contributor', 'subscriber'); // Standard WordPress roles

    foreach ($roles as $role_name) {
        $role = get_role($role_name);
        if ($role && $role->has_cap('create_users')) {
            $role->remove_cap('create_users');
        }
    }
}
add_action('init', 'remove_create_users_capability_from_all_roles');

이러한 조치가 효과가 있을지 여부에 대해서는 잘 모르겠습니다. 아마 해외 유저들이 뉴스페이퍼 테마 개발자에게 이 문제에 대하여 보고했을 것이므로 조만간 이 문제를 패치한 업데이트가 나오지 않을까 생각됩니다.

tagDiv Composer 버전 14.2 이상에서 이 문제가 해결되었다고 합니다. 가급적 최신 버전으로 업데이트하시기 바랍니다.

추가: $css_buffer 문제

임시 해결 방법으로 wp-content/plugins/td-composer/css-live/css-live.php 파일의 <style id="tdw-css-placeholder">...</style> 사이의 코드를 삭제하는 것이 제시되어 있습니다.

No, the problem is in the tagdiv composer plugin. I found a quick-fix. This is not a permanent solution, but it works quickly:

wp-content/plugins/td-composer/css-live/css-live.php line: 142 where is <style id="tdw-css-placeholder">. Just delete code between <style id="tdw-css-placeholder"> and ending </style>

하지만 이 부분은 살펴보니 이전 버전의 tagDiv Composer에서 문제가 되었던 것 같습니다. 예를 들어, 이전 버전에서는 이 부분이 다음과 비슷하게 되어 있는 것 같습니다.

add_action( 'wp_head', 'td_live_cs_inject_css', 100000 );
function td_live_cs_inject_css() {
$css_buffer = td_live_cs_inject_css_storage::get( 'css' );

if ( !empty( $css_buffer ) ) {
echo ' <style id="tdw-css-placeholder">' . $css_buffer . '</style>';
}
}

뉴스페이퍼 버전 12.6(tagDiv Composer 버전 4.3)을 살펴보니 이 부분이 다음과 같이 바뀌었네요.

function td_live_css_inject_css() {

			$css_buffer = td_live_css_css_storage::get( 'css' );

            $css_buffer = strip_tags($css_buffer);



			echo '	<style id="tdw-css-placeholder">/* custom css - generated by TagDiv Composer */' . PHP_EOL . $css_buffer . '</style>';

		}

아마도 $css_buffer = strip_tags($css_buffer); 부분에서 strip_tags() 함수가 보안 위험을 감소시키기 위해 사용된 것이 아닌가 생각됩니다.

참고


2 개 댓글

Leave a Comment

    • 최근 뉴스페이퍼 테마를 사용하는 사이트가 악성코드에 감염되었다고 호소하는 사용자들이 많네요. 저는 몇 가지 조치를 취했는데, 아직은 다행히 이상이 없습니다. 빨리 보안 취약점이 해결되었으면 좋겠습니다.

      응답