こんにちは。ワラゴンです。
2020年1月14日Woedfenceから、InfiniteWP というプラグインに重大な脆弱性があるよ、というメールを受け取ったので、少し書いてみます。
InfiniteWP とは
まず、InfiniteWP というプラグインについて少し紹介しておきます。
これは、複数のWordpressのサイトを管理できるプラグインで、推定30万ものワードプレスサイトで利用されています。
大元となるサイトにInfiniteWP Serverプラグインを入れ、その他のサイトにはInfiniteWP Clientを入れ、Server側からClientサイトたちを管理する、というもののようです。
これがあると、複数のサイトのWordpress本体やプラグインの一括アップデートができたりして、とっても便利なんだそうです。
クライアント側のサイトに無断でログインされる!
今回の脆弱性でどんな被害が出るかと言うと、クライアント側のサイトに勝手にログインされてしまいます。
ただ、攻撃者はサイトのユーザー名だけは知っておく必要があります。
今どきWordpressの管理者ユーザー名を"admin"なんてしている人はいないと思うので、実際に侵入が成功するには少し壁があります。
どのように?
侵入される方法はかなり簡単で、対象サイトに以下のようなパラメータを付与してアクセスするだけです。
{"iwp_action":"add_site","params":{"username":"admin"}}
※実際にはbase64でエンコードなど必要と思います。
これでユーザー名さえ合っていれば、やすやすとログインすることができるようです。
対策は?
対策は2つあります。
1. クライアント側のプラグインであるInfiniteWP Clientのバージョンを1.9.4.5に上げる
2. Wordfenceを入れているなら、そのバージョンを7.4.3以上にする
まあ、InfiniteWPもWordfenceも入っていて、Wordfenceだけをバージョンアップするなんてシチュエーションは皆無だと思いますが、それでもWordfenceがこういうセキュリティインシデントを防ごうとしてくれている姿勢には感服します。
Wordfenceブログによると、通常のWAF(Web Application Firewall)ルールでは対応できないので、Wordfenceのプログラムコードに変更を加えて特別対応したとのことです。
こんなセキュリティプラグインが無料だなんて、まじすごいです。
Cloud WAFの場合は気を付けて
そしてさらにWordfenceは忠告も付け加えてくれています。
というのも、攻撃の特性上、本物のアクセスと悪意のあるアクセスの区別がつかないため、WAFのルールで防ぐのは著しく困難なんだそうで。
普通にInfiniteWPのサーバー側のサイトがクライアント側にアクセスする際も、全く同じリクエストになるためです。
なので、通常WAFが行うHTTPリクエストの解析では対応ができません。
それでは、Wordfenceはどのように防いでくれているかというと、WordfenceはInfiniteWPのクライアント側がサーバー側と事前の鍵交換をしているかどうかを見て判別しているようです。
WordPressのプラグインならではの防御法ですね。
私はこれまでウェブサイトの最強のセキュリティはWAF(いわゆるCloud WAF)だと思っていたので、考え方を改めないといけないかもしれません。
まとめ
いかがでしたでしょうか。
攻撃が成功する条件は限られていますが、ユーザー名さえ分かっていれば攻撃が成功するので、もしInfiniteWPを使っている人がいたらすぐに更新するようにしましょう。
それにしても、今回の件で、改めてWordpressの最強セキュリティプラグインはWordfenceだなと実感しました。
元ネタ:Critical Authentication Bypass Vulnerability in InfiniteWP Client Plugin