
これは、Wordpressにおけるcve-2019-9787の再現と、ハッシュベースの防御です。
これは Sijia Zhang(https://github.com/sijiahi) と Bowen Zhou(https://github.com/KonjakZhou) によるプロジェクトです。
- http://localhost/wp-admin/ で Wordpress5.0 を設定・インストールします。
- 管理者として Wordpress にログインし、少なくとも1つの記事を投稿します。
- mal.html(別のドメイン名で設定、場合によってはブラウザでファイルとして直接開く)を開き、submit リクエストをクリックします。
- これが機能すると、"cilick me" コメントがある記事ページにリダイレクトされ、マウスをその上に移動すると、攻撃成功を示すプロンプトウィンドウが表示されます。
- /wp-includes 内のファイルを置き換え、/wp-includes/js に JS スクリプトを追加します。
- モック投稿ファイルを WP 領域内に移動し、モック投稿ページを開いて PINGBACK/TRACEBACK 機能をテストします。
- これが機能すると、"legal anchor" コメントがある記事ページにリダイレクトされます。
- 別のドメイン名から mal.com を開き、CSRF 攻撃をテストします。
Wordpress を CVE-2019-9787 から防御するために、doggyNonce と呼ばれる新しいフィールドが導入されます。 管理者が PINGBACK 機能を採用しようとし、_wp_unfiltered_html を提供できない場合、管理者には、アップロードしたタグ属性の属性に自分の Cookie で署名することを求めます。これにより、CSRF 攻撃を防御し、アップロードされたタグ属性の整合性を確保できます。
Wordpress は、正しい CSRF トークンを含まないコメントを PINGBACK および TRACEBACK リクエストとして自動的に受け入れ、そのコメントをホワイトリストフィルタでフィルタリングし、href フィールドを抽出して "a タグ" を再構築します。 この脆弱性を防御するために、次の2つの重要な点が考慮されます。 1. サーバーは、不正な CSRF リクエストと正当な PINGBACK/TRACEBACK リクエストを区別できません。 2. CSRF 攻撃者は "a タグ" の href フィールドにコードを注入し、フィルタリング後にタグ属性が変更されます。 doggyNonce は *cookie(wp-setting-time-$uid) と *uploaded href 属性に依存するハッシュ値です: doggyNonce=Hash(*uploaded href attrbute,*cookie) doggyNonce がアップロードされた href 属性に対する管理者の署名の役割を果たすことに注意してください。
1. 'mal.html' は CSRF 攻撃を模擬するものであり、Wordpress 以外のドメインに配置することを想定しています。
2. 'post.html' は PINGBACK/TRACEBACK 機能を模擬するものであり、WP と同じドメインに配置することを想定しています。