情報セキュリティの豆知識~WordPress 4.7.1での脆弱性~

少しネタは古いですが、最近行っている仕事でタイトルの内容について触れることがあったため、備忘録のような形で脆弱性の内容について記録を残しておきたいと思います。

WordPressとは

WordPressはいわゆる「CMS(Contents Management System)」といわれる、Webページを作るうえで必要な言語(HTML、CSSなど)を知らなくても、ホームページを構築して運用管理できるソフトウェアになります。
専門的な知識がなくてもホームページが作れることもあり、現在では多くの方がWordpressを利用してホームページを作成されています。

WordPress 4.7.1 脆弱性の概要

WordPressはとても便利なソフトウェアではあるのですが、IPAに投稿されている通り( https://www.ipa.go.jp/security/ciadr/vul/20170206-wordpress.html )2017年に管理者権限がなくても投稿記事の内容を書き換えることができてしまうという脆弱性が発見されました。
その時のWordpressのバージョンが4.7, 4.7.1でした。

これはとある細工したリクエストを送ることでバージョン4.7から実装されたREST APIの処理が本来想定された動きと違う動きをしてしまうという脆弱性でした。

実践

それでは実際に脆弱性をついて、投稿の内容を書き換えてみようと思います。
今回の検証を行うために、以下の環境を用意しました。

・Windows 10
・XAMPP 7.3.10
・Wordpress 4.7

環境構築の方法は割愛させていただきます。

WordPressの設定を終えるとデフォルトでテストページが作成されます。

今回はこのテストページの投稿内容を変更していきます。

脆弱性をつくためにはPOSTリクエストをする必要があります。
今回はPOSTリクエストを作るために Google Chromeのプラグインである「Advanced REST client」を使用しました。
https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?hl=ja )

「Advanced REST client」 を起動し、以下のようなPOSTリクエストを送ります。

POST XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/1?id=1A HTTP/1.1
HOST: localhost
content–type: application/x–www–form–urlencoded
content–length: 23
 
content=aaaaaaaaa

URLの大部分は「xxxxxxxxxxxxx」で伏字にしています。
伏字の部分が気になる方は以下のURLを参考にしてください。

https://blog.sucuri.net/2017/02/content-injection-vulnerability-wordpress-rest-api.html

リクエストを送ると以下のようなレスポンスが返ってきました。

date:Wed, 30 Oct 2019 06:29:27 GMT
server:Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.3.10
x–powered–by:PHP/7.3.10
x–robots–tag:noindex
link:<xxxxxxxxxxxxxxxxxx>; rel=“https://api.w.org/”
x–content–type–options:nosniff
access–control–expose–headers:X–WP–Total, X–WP–TotalPages
access–control–allow–headers:Authorization, Content–Type
allow:POST, PUT, PATCH, DELETE
content–length:1727
content–type:application/json; charset=UTF–8

その後、テストページを確認してみると

このように「test」と書かれていた場所が「aaaaaaaaa」と書き換わってしまいました。

なぜこのようなことが起きるのかは以下のページに詳細が記載されています。

https://blog.tokumaru.org/2017/02/wordpress-4.7.1-Privilege-Escalation.html

簡単に記載してしまうとURLの後ろに「?id=[投稿ID番号][適当な文字列]」を入れてPOSTリクエストをすると管理者権限がなくても投稿の内容について変更の権限が与えられてしまうという脆弱性になります。

バージョン4.7.2からこの脆弱性はなくなっています。そのため4.7.1のバージョンを使用している人は早急にバージョンを上げる必要があります。
(使用している人はもういないと思いますが…)

まとめ

今回は過去にあったWordpressの脆弱性について検証しました。
WordPressに限らず、どんなソフトウェアでも何かしら脆弱性は見つかるものです。
ソフトウェアのアップデートがあった際はできる限り早めに更新したほうが良いでしょう。

この記事の著者

, 」カテゴリの記事