発見したセキュリティに関する2点の問題
CSRF(クロスサイトリクエストフォージェリ)
CSRFは送信されたデータの送信元の検証を正しく行わなかった場合に発生します。
例えば以下のような手順で発生します。
- WordPressで記事を書いている人(Aさん)が自身のWordPressサイト(サイトA)にログインしている状態
- 攻撃者が罠サイトにサイトAに不正なデータを送信する仕組みを設置
- 攻撃者がサイトAのコメントなどに罠サイトへのリンクを貼り付け
- Aさんが罠サイトへのリンクを踏む
- サイトAに不正なデータが送信されサイトの内容が書き換えられるなどの攻撃が完了
通常は送信元が正しいかどうかを検証する仕組みを入れて、不正なデータが送信された場合に更新しないようにします。
WordPressにはその仕組みが用意されており、プラグインやテーマ作成者は特にデータ更新を行う仕組みを入れる際には必ず使用する必要があります。
wp_create_nonce
「wp_create_nonce」で生成されたnonceをデータの送信元に埋め込みます。
「wp_nonce_field」を使用するとhiddenなinputを出力してくれます。
wp_verify_nonce
「wp_verify_nonce」で送信されたnonceが送信元で生成されたものかどうかを検証します。
似たものとして「check_admin_referer」「check_ajax_referer」があります。
XSS(クロスサイトスクリプティング)
XSSは送信されたデータを無害化せずに出力すると発生します。
今回は少し特殊な状況(CSRFとの組み合わせ)での発生を確認しました。
セッションIDなどが流出します。
プラグインやテーマ作成者は出力を行う全てのページでデータ検証を正しく行い、出力を無害化する必要があります。
脆弱性の評価
Common Vulnerability Scoring System Version 3.0 Calculator
- 攻撃元区分:ネットワーク
- 攻撃条件の複雑さ:低
- 通常のCSRF攻撃が可能でした
- 攻撃に必要な特権レベル:不要
- 攻撃者は特権を必要としませんでした
- 利用者の関与:要
- 管理者が罠サイト等にアクセスする必要がありました
- 影響の想定範囲:変更あり
- スクリプトの注入が可能でフロントで実行される可能性がありました
- 気密性への影響:低
- XSSを利用していくつかのクッキーが盗まれる可能性がありました
- 完全性への影響:低
- 広告等が攻撃者のものに書き換えられる可能性がありました
- 可用性への影響:低
- 大量にデータが挿入され可用性が低下する可能性がありました
- 攻撃される可能性:攻撃可能
- 罠ページを用意すれば容易に攻撃が可能な状態でした
- 利用可能な対策のレベル:なし
- その時は適用可能なパッチ等は公開されていませんでした
- その他:未評価
共通脆弱性評価システムCVSS v3概説:IPA 独立行政法人 情報処理推進機構
情報セキュリティ関連情報のユーザー、管理者、技術者に向けた発信、その前提となる情報収集、調査分析、研究開発、技術評価等の実施
まとめ
以前クラウドソーシングでお金をとって作成している人のプラグインで今回よりも非常に危険な脆弱性を見つけています。
https://technote.space/security/troublesome
プロを名乗っている人でさえ脆弱性を埋め込む可能性があるため 、少なくとも利用するテーマやプラグインは一度プログラムを確認し、作者が書き並べている機能だけでなくセキュリティやパフォーマンスの観点からもチェックを行うべきだと考えます。
コメント