WordPress 5.5のアップデートには、悪質なプラグインの自動更新をブロックする、セキュリティ面において未発表の機能があります。この機能により悪質なプラグインがWordPressで構築されたウェブサイトを乗っ取ることを未然に防ぐことができます。WordPressは使用しているプラグインが悪質かどうかを確認し、フラグが立てられている場合は自動更新をブロックします。

プラグインの更新を許可するかブロックするかを決定するコード

この機能は発表されておらず、WordPressの何百ものコード更新の中に隠されていました。悪質なWordPressプラグインはマルバタイジング、バックドア、悪質リンクなどの様々な方法でWordPressサイトを攻撃しています。プラグインの自動更新を有効にすると、悪意のあるプラグインがそのプラグインを使用する全てのWordPressサイトを危険に晒す恐れがあります。こういった場合に、WordPressは不正なプラグインにフラグを付け、不正なプラグインの自動更新機能をリモートで無効にする方法を構築しました。

WordPressが悪質なプラグインの自動更新を阻止する方法

WordPress 5.5には、プラグインに問題がある場合にプラグインの自動更新を無効にする方法が組み込まれました。WordPressのTicket #50824によると、

プラグインに対し予期しない動作が発生した場合に完全に自動更新を無効にすることでWordPressユーザーを保護します。

#50824

とあります。disable_autoupdateというフラグがあり、WordPressサイトと通信して更新すべきではない特定のプラグインの更新の停止します。このフラグはどのプラグインの更新を停止するかを決定するゲートキーパー的な役割を果たします。

// If the `disable_autoupdate` flag is set, override any user-choice, but allow filters.
if ( ! empty( $item->disable_autoupdate ) ) {
  $update = $item->disable_autoupdate;
}

上記のコードがAllow the API to remotely disable autoupdates #444に追加されています。プラグインの更新を許可するかブロックするかを決定するために、yesまたはnoの回答を求めます。

ちなみにこの自動更新機能は1日2回、WordPressサイトのwp-cronによってトリガーされます。WordPressサイト所有者が特定のテーマまたはプラグインに対して自動更新を有効にしている場合、WordPressサイトはリポジトリを調べてテーマやプラグインの更新を確認します。リポジトリのテーマとプラグインの開発者は、プラグインのバージョン更新を自分で配信しています。WordPressコアチームとレポマネージャーはそのコードを監査したりチェックしたりしていません。つまり、アップデートされたプラグインやテーマのコードは全て、自動更新が有効になっているWordPressサイトに自動でダウンロードされてしまいます。

このdisable_autoupdateでの制御は、問題が発生した場合にそのコードがWordPressサイトの自動更新に適用されるのを防ぐように設計されています。この機能により攻撃者が悪意のあるコードをリポジトリに登録するという攻撃の一部を防ぐことができます。WordPressサイトが更新のためにリポジトリに対して通信すると、リポジトリはdisable_autoupdatetrueまたはfalseのフラグで応答し、問題のあるプラグインやテーマが自動的に更新されないようにします。

この機能は公式には発表されていませんが、WordPressサイトが悪意あるプラグインに乗っ取られることを防ぐためには重要な機能です。

参考

Hidden WordPress 5.5 Feature Blocks Rogue Plugins