WordPress脆弱性: 世界で最も狙われるCMSを守る
これは何?
WordPressは世界で最も普及しているCMS(コンテンツ管理システム)で、全Webサイトの43%以上で使用されています。この圧倒的なシェアゆえに、攻撃者にとって最も魅力的なターゲットとなっており、日々新たな脆弱性が発見されています。
WordPress本体、プラグイン、テーマのいずれにも脆弱性が存在する可能性があり、特にプラグインは個人開発者によるものも多く、セキュリティレビューが不十分なケースが少なくありません。2023年には15,000件以上のWordPress関連の脆弱性が報告されています。
脆弱性の種類は多岐にわたり、SQL Injection、XSS(クロスサイトスクリプティング)、CSRF(クロスサイトリクエストフォージェリ)、任意ファイルアップロード、権限昇格などが代表的です。これらを放置すると、サイト改ざん、データ漏洩、マルウェア配信、SEOスパムなどの被害に遭います。
なぜ重要なのか
WordPress脆弱性を放置すると、以下のような深刻な被害が発生します:
サイト全体の乗っ取り: 管理者権限を奪取され、サイトのコンテンツが完全に改ざんされたり、削除されたりします。バックアップがない場合、復旧は極めて困難です。
顧客データの漏洩: ECサイトやメンバーシップサイトの場合、顧客の個人情報、メールアドレス、購入履歴などが盗まれ、GDPR違反や賠償問題に発展します。
SEOスパムの踏み台: サイトに気づかれないよう大量のスパムリンクを埋め込まれ、検索エンジンからペナルティを受け、検索順位が急落します。
マルウェア配信の拠点: 訪問者のブラウザに自動的にマルウェアをダウンロードさせる仕組みが仕込まれ、訪問者を感染させます。信頼を失い、ブラックリストに登録される可能性があります。
DDoS攻撃への加担: 脆弱なWordPressサイトがボットネットの一部となり、他のサイトへのDDoS攻撃に加担させられます。ホスティング会社から警告を受け、最悪の場合アカウント停止になります。
攻撃の仕組み
WordPress脆弱性を悪用した典型的な攻撃フロー:
- 偵察フェーズ: 攻撃者はスキャンツールで以下を調査します
# WordPressバージョンの特定
curl -s https://target.com/ | grep 'generator'
# <meta name="generator" content="WordPress 5.8" />
# インストール済みプラグインの列挙
curl -s https://target.com/ | grep 'wp-content/plugins'
# 既知の脆弱なパスへのアクセス
curl https://target.com/wp-content/plugins/vulnerable-plugin/readme.txt
- 脆弱性データベースとの照合:
- WPScan Vulnerability Database
- CVE(Common Vulnerabilities and Exposures)
- Exploit-DB
攻撃者は特定したプラグイン名とバージョンから、既知の脆弱性を検索します。
- エクスプロイトの実行:
例: Contact Form 7 の SQL Injection 脆弱性(CVE-2022-XXXX)
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=cf7_save&id=1' UNION SELECT user_login,user_pass FROM wp_users--
例: プラグインの任意ファイルアップロード
POST /wp-content/plugins/vulnerable/upload.php HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: application/x-php
<?php system($_GET['cmd']); ?>
------WebKitFormBoundary--
-
バックドアの設置: 侵入に成功すると、攻撃者は管理者権限を持つユーザーを作成したり、テーマファイルにバックドアを仕込んだりします。
-
横展開と永続化: 同じサーバー上の他のサイトへの侵入を試みたり、定期的にバックドアをチェックして削除されても復活するようにします。
実際の被害事例
WooCommerce決済プラグインの脆弱性(2023年): WooCommerce Paymentsプラグインに権限昇格の脆弱性が発見され、攻撃者が認証なしで管理者アカウントを作成できる問題が発生。600,000以上のサイトが影響を受けました。緊急パッチがリリースされるまでの数日間で、数千のサイトが侵害されたと推定されています。
LiteSpeed Cacheプラグインのハッシュ盗難(2023年): 500万以上のサイトで使われているLiteSpeed Cacheプラグインに、管理者パスワードハッシュを窃取できる脆弱性が発見されました。攻撃者はこのハッシュをクラッキングし、管理画面へのログインを試みました。
Elementor ProのRCE脆弱性(2023年): 人気のページビルダーElementor Proに、リモートコード実行(RCE)の脆弱性が発見されました。認証済みユーザー(Contributor権限以上)が任意のPHPコードを実行できる問題で、サイトの完全な制御権を奪われる可能性がありました。
WP Fastest Cacheの改ざん(2022年): WP Fastest Cacheプラグインに任意のファイル削除とSQL Injectionの脆弱性が発見されました。攻撃者はwp-config.phpを削除してサイトを初期化し、自分が管理者となって再インストールする攻撃を実行しました。
Ultimate Member の権限昇格(2022年): 会員サイト構築プラグインUltimate Memberに、未認証ユーザーが管理者権限を取得できる重大な脆弱性が発見されました。100,000以上のサイトに影響し、多くのサイトでデータ漏洩が発生しました。
Nyambushでの検出内容
Nyambushのスキャンでは、WordPress関連のセキュリティリスクを多角的にチェックします:
バージョン検出
- WordPress本体のバージョン(古いバージョンは脆弱性データベースと照合)
- インストール済みプラグインのリスト
- 使用中のテーマ
情報露出のチェック
readme.html、license.txtの公開状態- プラグインの
readme.txtからバージョン情報の漏洩 wp-config.phpのバックアップファイル(wp-config.php.bakなど)- デバッグモードの有効化(
WP_DEBUG)
既知の脆弱性との照合
- 検出したプラグイン・バージョンをWPScan Vulnerability Databaseと照合
- CVSSスコア(深刻度)に基づいて優先度を判定
- 修正パッチの有無を確認
セキュリティベストプラクティス
- ディレクトリリスティングの無効化
- XML-RPC の状態(DDoS攻撃に悪用されやすい)
- 管理画面のBasic認証設定
- ログインページへの総当たり攻撃対策
スキャン結果では、各脆弱性の深刻度、影響範囲、対策方法を具体的に表示します。
対策方法
1. 常に最新バージョンを維持
// wp-config.php で自動更新を有効化
define('WP_AUTO_UPDATE_CORE', true); // WordPress本体
add_filter('auto_update_plugin', '__return_true'); // 全プラグイン
add_filter('auto_update_theme', '__return_true'); // 全テーマ
ただし、自動更新は互換性問題を引き起こす可能性があるため、ステージング環境でのテストを推奨します。
2. 不要なプラグイン・テーマの削除
使っていないプラグインやテーマは、無効化ではなく完全に削除してください:
# WP-CLIでの削除
wp plugin delete plugin-name
wp theme delete theme-name
3. セキュリティプラグインの導入
推奨プラグイン:
- Wordfence Security(ファイアウォール、マルウェアスキャン)
- iThemes Security(ブルートフォース対策、2FA)
- Sucuri Security(監査ログ、整合性チェック)
4. バージョン情報の隠蔽
// functions.php に追加
// WordPressバージョンの削除
remove_action('wp_head', 'wp_generator');
// プラグイン・テーマのバージョン削除
function remove_version_from_style_js($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'remove_version_from_style_js', 9999);
add_filter('script_loader_src', 'remove_version_from_style_js', 9999);
5. ファイル・ディレクトリの保護
# .htaccess: wp-config.php の直接アクセスを禁止
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>
# readme.html, license.txt へのアクセス禁止
<FilesMatch "^(readme|license)\.(html|txt)$">
Order allow,deny
Deny from all
</FilesMatch>
# ディレクトリリスティング無効化
Options -Indexes
6. ログイン保護
// functions.php: ログイン試行回数制限
function check_attempted_login($user, $username, $password) {
$max_attempts = 5;
$lockout_duration = 30 * 60; // 30分
// 実装は省略(プラグイン推奨)
}
add_filter('authenticate', 'check_attempted_login', 30, 3);
または、Login LockDownなどのプラグインを使用します。
7. XML-RPCの無効化
// functions.php
add_filter('xmlrpc_enabled', '__return_false');
# .htaccess
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
8. データベース接頭辞の変更
デフォルトのwp_から変更することで、SQL Injection攻撃の成功率を下げられます:
// wp-config.php
$table_prefix = 'xyz_random_'; // ランダムな文字列に変更
注意: 既存サイトでの変更は慎重に行ってください。プラグインで対応可能です。
9. WAF(Web Application Firewall)の導入
- Cloudflareの無料プラン
- Sucuri Firewall
- WordfenceのWAF機能
10. 定期的なバックアップ
推奨バックアッププラグイン:
- UpdraftPlus(無料、クラウドストレージ対応)
- BackWPup(無料、スケジュール実行)
- VaultPress(Jetpack、有料)
サーバーレベルでのバックアップも併用してください。
11. セキュリティスキャンの定期実行
# WPScan(コマンドラインツール)
wpscan --url https://your-site.com --api-token YOUR_TOKEN
# または Nyambush で定期スキャン(有料プラン)
12. PHPバージョンの更新
古いPHP(7.4以前)はサポート終了しており、既知の脆弱性があります。PHP 8.1以上への更新を推奨します。
まとめ
WordPressは便利で強力なCMSですが、そのシェアの大きさゆえに攻撃者の標的になりやすいという宿命を背負っています。脆弱性は日々発見されるため、「設定して終わり」ではなく、継続的な監視と更新が不可欠です。
最低限実施すべき対策:
- WordPress本体・プラグイン・テーマを常に最新に保つ
- 不要なプラグイン・テーマを削除
- セキュリティプラグインの導入
- 定期的なバックアップ
- ログイン保護(2FAまたはIP制限)
追加の推奨対策: 6. WAFの導入 7. バージョン情報の隠蔽 8. XML-RPCの無効化 9. 定期的なセキュリティスキャン(Nyambush等) 10. セキュリティ更新情報の購読
Nyambushの定期スキャンを設定すれば、新たな脆弱性が発見された際に即座に通知を受け取ることができます。手遅れになる前に、今すぐWordPressのセキュリティ対策を見直しましょう。