4. WordPress 4.7.1 REST API Vulnerability
どんな脆弱性?
認証/認可を回避しREST API 経由でコンテンツを更新されてしまう
攻撃容易性は?
非常に容易
原因は?
プログラム上の不備
4.7 から REST API が Core に取り込まれたため、プラグインとは違い自
動で有効になってしまった
5. WordPress 4.7.1 REST API Vulnerability
Sucuri のレポートブログ
Content Injection Vulnerability in WordPress
https://blog.sucuri.net/2017/02/content-injection-vulnerability-wordpress-rest-
api.html
徳丸氏の解説記事
WordPress 4.7.1 の権限昇格脆弱性について検証した
https://blog.tokumaru.org/2017/02/wordpress-4.7.1-Privilege-Escalation.html
6. WordPress 4.7.1 REST API Vulnerability
攻撃手法
POST /wp-****/**/api/1/?id=1abc
{ ‘xxxxx’ : ‘’, ‘yyyyy’ : ‘Hacked by …..’ }
REST API のエンドポイント /wp-****/**/api/1/?id=1abcに対して POST
する。成功した場合、 id=1 のコンテンツが書き換えられてしまう。
id=1abc を指定しているのに。。
7. WordPress 4.7.1 REST API Vulnerability
REST API エンドポイントの呼び出し手順を理解する
① エンドポイント(URI と ロジックのハンドラ)を登録する
② アクセスされたURIに対応するハンドラを呼び出す
③ ハンドラに設定されている permission_callback でエンドポイント
の処理権限を確認する
④ ハンドラに設定されている callback を呼び出し実際の処理を実行
する
8. WordPress 4.7.1 REST API Vulnerability
wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
① REST API エンドポイントの登録
method が WP_REST_Server::EDITABLE( ‘POST, PUT, PATCH‘) のいずれかで
URI が namespace/rest_base/?p<id>[d]+ の場合
権限チェックとして、update_item_permissions_check が呼び出され
権限があった場合に update_item が呼び出される
9. WordPress 4.7.1 REST API Vulnerability
② path にマッチするハンドラを取得
③ ハンドラの permission_callback を呼び出し権限チェック
④ 権限がOKであれば、ハンドラの callback を呼び出し処理を実行