はじめに – 未知の世界を探る: パッチ未適用の WordPress SSRF の表面下
サイバーセキュリティは常に進化していますが、WordPress は広く利用され、プラグインのエコシステムも充実しているため、依然として人気のターゲットです。WordPress コアは一般的に安全ですが、サードパーティのプラグインやテーマから脆弱性が発生することがよくあります。注目を集めている脆弱性の 1 つが、サーバー側リクエスト フォージェリ (SSRF) の脆弱性です。このブログ記事では、パッチが適用されていない WordPress SSRF 脆弱性の詳細、その影響、そして WP-Firewall が WordPress サイトをこのような脅威から保護する方法について詳しく説明します。
## 根本原因: wp_http_validate_url()
2022年9月、SonarSourceはパッチ未適用のWordPress Core Unauthenticated Blind SSRFに関するアドバイザリを公開しました。この脆弱性の根本的な原因は、DNSリバインディング攻撃の影響を受けやすい`wp_http_validate_url()`関数にあります。WordPressコア自体は直接影響を受けませんが、この脆弱な機能を利用するプラグインは危険にさらされています。
wp_http_validate_url() を理解する
`wp_http_validate_url()` 関数は、リダイレクトやリクエストフォージェリ攻撃を防ぐために URL を検証するように設計されています。ただし、DNS 再バインディング攻撃に対する保護が不十分で、SSRF 脆弱性の潜在的なベクトルとなります。この関数は、`wp_remote_get()` や、より安全な代替手段である `wp_safe_remote_get()` と組み合わせて使用されることがよくあります。
明らかな部分: wp_remote_get() と wp_safe_remote_get()
`wp_remote_get()` 関数は、サーバーを介してリモート ホストを要求するためによく使用されます。ただし、ユーザー入力 URL をこの関数に渡すと、SSRF 脆弱性につながる可能性があることはよく知られています。このリスクを軽減するために、WordPress は `wp_safe_remote_get()` を導入しました。これには、SSRF 攻撃を防ぐための追加の検証が含まれています。
wp_safe_remote_get() はどれくらい安全ですか?
`wp_safe_remote_get()` 関数は、`wp_remote_get()` のより安全な代替として設計されています。公式の WordPress ドキュメントによると、次のようになります。
「この機能は、HTTP リクエストが任意の URL に対して行われる場合に最適です。リダイレクトやリクエスト偽造攻撃を回避するために URL が検証されます。」
ただし、この関数の安全性は、基盤となる `wp_http_validate_url()` 関数によって制限されており、前述のように、この関数は DNS 再バインディング攻撃に対して脆弱です。
機能の詳細
`wp_safe_remote_get()` のソースコードは次のとおりです。
php
関数wp_safe_remote_get($url,$args = array()) {
$args['reject_unsafe_urls'] = true;
$http = _wp_http_get_object();
$http->get( $url, $args ) を返します。
}
2 行目では、`$args['reject_unsafe_urls']` パラメータが `true` に設定されており、URL を要求する前にユーザー入力が `wp_http_validate_url()` 関数に渡されます。`wp_http_validate_url()` は DNS 再バインディング攻撃に対して脆弱であるため、検証にこの関数のみに依存する関数もすべて脆弱です。
脆弱性の制限
これは本格的な SSRF ではありませんが、`wp_http_validate_url()` 関数によって制限が設定されます。
– プロトコルは `http://` または `https://` のいずれかである必要があります
– ポートは80、443、8080のいずれかになります
これらの制限にもかかわらず、この SSRF を通じてこれらの境界内の内部ホストを要求することは可能です。
脆弱なプラグインコード
脆弱なプラグイン コードの例をいくつか示します。
非盲検SSRF
php
<?php
一度require('wp-load.php');
$url = $_GET['url'];
$response = wp_safe_remote_get( $url );
$response = wp_remote_retrieve_body( $response );
$responseをエコーします。
?>
プラグインがユーザー入力を受け取り、それを `wp_safe_remote_get()` 関数に渡して応答を表示する場合、非ブラインド制限 SSRF に対して脆弱です。
ブラインドSSRF
php
<?php
一度require('wp-load.php');
$url = $_GET['url'];
$response = wp_safe_remote_get( $url );
$response_code = wp_remote_retrieve_response_code( $response );
($response_code == 200)の場合{
echo "稼働中";
} それ以外 {
echo "ダウンしているか見つかりません!";
}
?>
プラグインがユーザー入力を `wp_safe_remote_get()` に渡しても、応答コード/ステータスのみを返す場合、ブラインド SSRF に対して脆弱であり、影響は内部ホストのポート 80、443、または 8080 のポートスキャンに限定されます。
攻撃デモンストレーション
この脆弱性を実証するために、ポート 80 で WordPress を実行している Apache サーバーと、localhost:8080 で実行されている PHP サーバーに対して、秘密情報を使用して攻撃を実行しました。脆弱なコードは、プラグイン ディレクトリ `/wp-content/plugins/vulnerable-plugin/index.php` に挿入されました。
GitHub リポジトリ
脆弱なDockerインスタンスと、この脆弱性を悪用するためのエクスプロイトスクリプトは、こちらで見つけることができます。 GitHub リポジトリクレジット: アナンダ・ダカル
## より脆弱な関数
検証に `wp_http_validate_url()` を使用する他の関数にも同じ脆弱性が適用されます。
– `wp_safe_remote_request()`
– `wp_safe_remote_post()`
– `wp_safe_remote_head()`
さらに、いくつかの関数は `wp_safe_remote_get()` のラッパーとして機能し、ある程度脆弱です。
– `WP_REST_URL_Details_Controller::get_remote_url()`
– `download_url()`
– `wp_remote_fopen()`
– `WP_oEmbed::discover()`
結論
安全であると考えられ、SSRF 脆弱性から保護するように設計された関数が、完全に安全ではないことは明らかです。DNS 再バインディング攻撃に対して脆弱な `wp_http_validate_url()` に依存すると、WordPress サイトが潜在的な SSRF 攻撃にさらされることになります。WordPress コア チームにこの問題に対処し、プラットフォームのセキュリティを強化するパッチをリリースするよう強く求めます。
WP-Firewallがどのように役立つか
WP-Firewall では、WordPress サイトを新たな脅威から保護することの重要性を理解しています。当社の包括的なセキュリティ ソリューションは、SSRF 攻撃を含むさまざまな脆弱性に対する強力な保護を提供するように設計されています。WP-Firewall が WordPress サイトを保護する方法は次のとおりです。
リアルタイムの脅威検出
WP-Firewall は、サイトを監視して疑わしいアクティビティや潜在的な脆弱性を検出するリアルタイムの脅威検出機能を提供します。当社の高度なアルゴリズムは SSRF の試みを識別してブロックし、サイトの安全性を確保します。
定期的なセキュリティ監査
弊社のセキュリティ専門家チームは、WordPress サイトとそのプラグインを定期的に監査し、脆弱性を特定して対処します。潜在的な脅威に先手を打つことで、ユーザーにとって安全な環境を維持できるようお手伝いします。
自動パッチ管理
WordPress のコア、テーマ、プラグインを最新の状態に保つことは、セキュリティにとって非常に重要です。WP-Firewall は自動パッチ管理を提供し、サイトのすべてのコンポーネントが最新のセキュリティ パッチで更新されるようにします。
カスタムファイアウォールルール
WP-Firewall を使用すると、特定のニーズに合わせたカスタム ファイアウォール ルールを作成できます。悪意のあるリクエストや不正なアクセス試行をブロックするルールを実装することで、サイトのセキュリティを強化できます。
包括的なレポート
当社の詳細なセキュリティ レポートでは、検出された脅威とサイトを保護するために実行されたアクションについての洞察が提供されます。WP-Firewall を使用すると、WordPress サイトのセキュリティ状態を常に把握できます。
WP-Firewall による SSRF 対策
SSRF の脆弱性に特に対処するために、WP-Firewall は次の機能を提供します。
入力検証
WP-Firewall は、ユーザーが入力した URL が安全で悪意のないものであることを確認するために、厳格な入力検証を実行します。複数のレベルで入力を検証することで、SSRF 攻撃が脆弱な機能を悪用するのを防ぎます。
DNS 再バインディング保護
当社のファイアウォールには、DNS リバインディングの脆弱性を悪用する試みを検出してブロックする DNS リバインディング保護メカニズムが含まれています。これにより、`wp_http_validate_url()` などの基盤となる関数が脆弱な場合でも、サイトの安全性が確保されます。
安全なAPIリクエスト
WP-Firewall は、厳格な検証と認証措置を実施することで API リクエストを保護します。これにより、不正アクセスを防ぎ、API エンドポイントを標的とした SSRF 攻撃のリスクを軽減します。
継続的な監視
当社の継続的な監視機能により、お客様のサイトのトラフィックとアクティビティを注意深く監視します。疑わしい動作があればすぐにフラグが立てられ、対処されるため、SSRF 攻撃が成功する可能性が最小限に抑えられます。
アクションの呼び出し
パッチが適用されていない WordPress SSRF 脆弱性は重大なリスクをもたらしますが、予防的な対策を講じることでその影響を軽減できます。WP-Firewall の包括的なセキュリティ ソリューションを活用することで、WordPress サイトを SSRF 攻撃やその他の新たな脅威から保護できます。WP-Firewall を使用して、潜在的な脆弱性を事前に把握し、ユーザーにとって安全な環境を確保してください。
セキュリティ侵害が起きるまで待たずに、今すぐ WP-Firewall で WordPress サイトを保護しましょう。 無料トライアルを始める 強力なリアルタイム保護がもたらす安心感を体験してください。
WP-FirewallがWordPressサイトのセキュリティにどのように役立つかの詳細については、 Webサイト または、サポート チームにお問い合わせください。
WP-Firewall を使用して、安全とセキュリティを確保し、WordPress サイトを保護してください。
—
毎週のセキュリティアドバイス
最新の WordPress セキュリティ情報をメールで受け取りましょう。 ニュースレターを購読する 最新の脅威と WordPress サイトを保護するためのベスト プラクティスについて最新情報を入手してください。
セキュリティアドバイザリの最新情報
最新のセキュリティ勧告をすべて確認し、WordPress プラグインとテーマに影響する重大な脆弱性に関する最新情報を入手してください。
– 2024年5月19日: WordPress 脆弱性レポート (2024 年 5 月 6 日から 2024 年 5 月 12 日)
– 2024年5月15日: Uncode Core プラグインの優先度の高い脆弱性を修正