Menu
Menu
Blog
ブログ
About Site
サイトについて
Profile
プロフィール
Activity
活動
Works
制作
Contact
お問い合わせ
音ゲー好きなエンジニアの個人事務所。気ままにブログを更新しています。
Otogeworks
  • Blogブログ
  • About Siteサイトについて
  • Profileプロフィール
  • Activity活動
  • Works制作
  • Contactお問い合わせ

WordPress REST APIのセキュリティが脆弱という誤解

2022 7/31
Web
WordPress
2023年1月5日

REST APIはWordPress内のデータをJSON形式で取得できる機能です。
歴史的な経緯から危険な印象があり、無効化を推奨する記事も多いです。

しかしほとんどの場合、REST APIを無効化すべきではありません。

目次

REST APIは開発者のための機能

WordPressで構築されたサイトなら「ドメイン名/wp-json/wp/v2/」でREST APIにアクセス可能です。
※このサイトなら「https://otogeworks.com/wp-json/wp/v2/」

他のURL(REST APIではエンドポイントと呼びます)も用意されており、様々なデータを取得できます。
例えば以下のようなデータです。

  • 登録されているユーザーの情報
  • 投稿された記事の情報
  • 登録されているカテゴリやタグの情報
  • アップロードした画像やファイルの情報

ユーザーのパスワードなど、重要なデータは取得できません。
取得できるデータはWordPressで公開情報とされているデータのみです。

REST APIの魅力は、プログラムが扱いやすいJSON形式でデータを取得できることです。
一部のテーマやプラグインはこれに依存した作りになっています。
ユーザーのための機能ではなく、開発者のための機能なのです。

REST APIなんて使ってないし……と思っていても、知らず知らずのうちに使っているかもしれません

過去に深刻な脆弱性があった

WordPress 4.7.0から4.7.1には、REST APIの脆弱性がありました。

あわせて読みたい
WordPress の脆弱性対策について:IPA 独立行政法人 情報処理推進機構 情報セキュリティ関連情報のユーザー、管理者、技術者に向けた発信、その前提となる情報収集、調査分析、研究開発、技術評価等の実施

REST APIは4.7.0で登場した新機能でした。
しかし、この機能には不幸な出生秘話があります。
REST APIを介して第三者がサイトの改変を可能にする、深刻な脆弱性が存在したのです。

この脆弱性を修正した4.7.2がリリースされ、利用者にはアップデートが呼びかけられました。
悪用を防ぐため、リリース直後は公式からのアップデート内容も伏せられていました。

しかしこれらの努力むなしく、少なくとも155万のサイトが改ざん被害に遭ってしまったのです。

INTERNET Watch
155万サイトが改ざん被害、WordPressのREST API脆弱性を20のグループが攻撃、米Feedjit報告   WordPress向けのセキュリティプラグイン「Wordfence Security」を提供している米Feedjitは、WordPressのREST APIの処理に起因する脆弱性を突いた攻撃により改ざんされた...

セキュリティに関する被害の中でも大きな部類です。
Webにおけるセキュリティの歴史という大きな枠組みに、悪い意味で名を連ねたことでしょう。

この衝撃的な出来事がきっかけで「REST APIは危険な機能である」という認知が世間一般に広まりました。
中には「WordPressは危険なソフトウェアである」と感じた方もいるでしょう。
上長からWordPress関連の調査指示を受けた方もいるのでは?

WordPressのメジャーなセキュリティ系プラグインにもREST APIを無効化・制限できる機能があります。
それはこのような歴史的事情があるからです。

現在はもう危険ではない

前述の出来事は2017年の話です。
現在のREST APIにそのような脆弱性は存在しません。

もしかするとまだ発見されていない脆弱性があるかもしれません。
これから実装される機能に伴って脆弱性が増えてしまうこともあり得るでしょう。
しかし、それは全ての機能に対して言えることです。

現在のREST APIが危険ではないことが分かります。

また、WordPressの開発陣は二度とそのようなことが起こらないように尽力しているはずです。

あわせて読みたい
Historical yearly trends in the usage statistics of content management systems, March 2023 Yearly changes in the usage of content management systems

WordPressのシェアは年々増加を続けています。
2017年の時点ではWeb上の27.3%のサイトがWordPressを使っていますが、2022年の時点では43%まで上がっています。
また同じような事故が起こると、当時よりも事態が深刻になるのです。
開発陣の意識が低いなどということはないでしょう。

とはいえ、残念ながらどれだけ気を付けていても脆弱性が生まれてしまうことはあります。
WordPressは基本的には有志が集って開発しているものですし、責められるものでもありません。

無効化・制限するデメリット

前述の通り、テーマやプラグインの中にはREST APIに依存した作りのものがあります。
有名どころではContact Form 7、Caldera Form、Yoast SEO、Jetpackなどです。

これらのプラグインを使っていた場合、プラグインを生かしつつ制限する必要があります。
むやみに制限すると知らず知らずのうちに不具合に悩まされるわけです。

また、WordPressそのものにもREST APIに依存した機能があります。
具体的には以下です。

  • アプリケーションパスワード
  • WordPressのモバイルアプリ

アプリケーションパスワードは外部アプリケーションとWordPressを認証する仕組みで、WordPressのモバイルアプリはスマートフォンなどからWordPressを使うためのアプリです。

REST APIを制限すると、これらが使えなくなる恐れがあります。
この先、バージョンアップに伴って実装される新機能でもREST APIが必要になるかもしれません。

危険なこともある?

「REST APIは必ず有効にするべきだ」というわけでもありません。
無効化・制限すべきパターンもあります。

ユーザー名の流出

仮に以下の要件のサイトがあったとしましょう。

  • 従業員を100人以上抱えた企業のポータルサイト
  • ポータルサイトはWordPressで構築している
  • ポータルサイトには全従業員がログイン可能である
  • 社内連絡のほか、従業員同士で連絡を取ることができる
  • 社外からも閲覧できるようにするため、インターネットからアクセス可能である

さらに、以下の運用を行っていたとします。

  • ポータルサイトには全従業員に対する登録を義務付けている
  • 他の従業員から分かるようにするため、ユーザー名は従業員の個人名とする

この条件で運用していた場合、対策しなければ全社員の個人名が流出します。

REST APIを使えば、WordPressに登録している全てのユーザーに関するデータを取得できます。
このデータにユーザー名も含まれているので、ユーザー名に個人名を使っているとアウトです。

このケースに該当する場合はREST APIを制限しましょう。

未公開情報の意図しない公開

REST APIは「アップロードしたファイルのURL一覧」が取得可能です。
画像やPDFなど、管理画面からアップロードしたすべてのファイルが対象です。
WordPressではこれを公開情報としているので、ログイン状態にかかわらず取得可能です。

限られた人にのみURLを教えてファイルをダウンロードしてもらうように運用している方もいるでしょう。
このようなパターンではREST APIを無効化・制限するべきです。

つまり、URLを知っている人だけが閲覧できるようにしているファイルがある場合は対策が必要です。

REST APIは無効化すべきではない

ほとんどの場合は無効化・制限すべきではありません。
制限することにデメリットがある以上、明確な理由がなければ制限せずにそのまま使うべきです。

前述した通り、以下のパターンに当てはまる場合は制限することをおすすめします。

  • ユーザー名に個人を特定できる名称をつけている
  • 特定の人だけが閲覧できるファイルがある

あとがき

2022年現在、「WordPress REST API セキュリティ」辺りで検索すると「REST APIは無効化すべき」「制限すべき」という趣旨の記事がたくさん出てきます。
それが間違っているというわけではないので、否定はしません。

しかし、私は無効化や制限すべきではないと考えています。

  • なぜそのような設定をしなければならないのか?
  • デメリットは何なのか?

そこまで解説している記事は少ないように感じました。
理由なしに設定すべきではないので、少しでも検索に引っかかるようにするために本記事を書きました。

ちなみに、本記事の内容は以下の記事でも解説しています。興味があればどうぞ。

あわせて読みたい
実はやらなくてもいい6つのWordPressセキュリティ対策 セキュリティ対策は、やった方がいいことを全てやることではない。 誤解されがちなWordPressのセキュリティ対策について解説します。 この記事の分類分け 「やらなくて...
SWELL
圧倒的な使い心地を追求する国産WordPressテーマ『SWELL』の公式販売サイト
Web
WordPress
ushui
宮城県生まれのエンジニアです。
都内でフリーランスを営んでいます。

カレー、技術、音楽、音ゲーが好き。
音楽面に関しては、特にBMSとVOCALOIDから生まれた同人音楽家たちに強く影響を受けました。
新着記事
  • crossbeats 電脳少女は歌姫の夢を見るか?
    架空のボカロ「重音テト」で騙した側が10年後に騙される話
    2023年4月1日
    音楽
  • S3のバックアップ履歴
    WordPressでS3に自動バックアップ 最小権限運用
    2023年3月31日
    Web
  • Audacityで録音
    現代では変換できない古い音声ファイルをwavやmp3に変換してみる
    2023年2月27日
    音楽
  • 世界最古のボカロ曲(2003年)
    最古のボカロ曲を初音ミク誕生前の2003年から遡ってみる
    2023年2月26日
    音楽
  • WP Cerber Securityをアップデートサーバーを変更
    WP Cerber Securityのインストールと簡易的な設定
    2023年1月4日
    Web
ジャンル
  • テクノロジー全般
    • Web
    • アプリ
    • ゲーム開発
    • ハードウェア
  • インターネット考古学
  • ゲーム
  • 音楽
  • WordPress
  • REVIVE USB
  • その他
アーカイブ
  • 2023 (6)
  • 2022 (24)
  • 2021 (7)
  • 2017 (7)
  • 2016 (5)
目次
  1. Top
  2. テクノロジー全般
  3. Web
  4. WordPress REST APIのセキュリティが脆弱という誤解
目次