脆弱性の仕組み
ソフトウェアは人が作るものなので、どれだけ注意しても不備が紛れ込みます。そのうち、本来はできないはずの操作を外部の人ができてしまうものを、脆弱性と呼びます。
たとえるなら、戸締まりをしたつもりの家に、鍵の壊れた窓が一つ残っているような状態です。住人が気づいていなくても、窓を一つずつ確かめて回る泥棒には見つかってしまいます。
攻撃者は、公開された脆弱性の情報をもとに、その弱点を抱えたサイトを自動のプログラムで探し回ります。有名なサイトかどうかは関係なく、条件に当てはまれば機械的に狙われます。
WordPressサイトでの例
WordPressの脆弱性は、本体よりもプラグインやテーマで見つかることが多くあります。よく見られる種類は次のとおりです。
- SQLインジェクション:入力欄などから不正な命令を送り込み、データベースの中身を盗み見たり書き換えたりできる
- クロスサイトスクリプティング:ページに不正なスクリプトを埋め込み、閲覧した人のブラウザで実行させられる
- ファイルアップロードの不備:画像の代わりにPHPファイルを送り込み、Webシェルを設置できる
- 権限チェックの不備:ログインしていない人や一般のユーザーが、管理者だけに許された操作を実行できる
脆弱性が見つかったプラグインでも、修正版が出ていれば、更新するだけで弱点を塞げます。問題になるのは、更新されずに放置されたサイトや、開発が止まって修正版が出ないプラグインを使い続けているサイトです。
見つけ方・確認方法
- 管理画面の ダッシュボード > 更新 で、本体・テーマ・プラグインに未適用の更新がないか確認する
- 使っているプラグインが長いあいだ更新されていないか、公式ディレクトリのページで「最終更新」を確認する
- 使っているプラグインの名前で、脆弱性の情報(CVE番号など)が公開されていないか調べる
- ツール > サイトヘルス で、古いバージョンのPHPを使っていないかなどの指摘を確認する
対策
- WordPress本体・テーマ・プラグインは、更新が出たら早めに適用する(パッチの適用)
- 使っていないプラグインやテーマは、停止するだけでなく削除する。停止中でも、ファイルがサーバーに残っていれば攻撃に使われることがあります
- 開発が止まったプラグインは、代わりのものに乗り換える
- 修正版が出る前の攻撃(ゼロデイ攻撃)に備えて、WAFで不正なアクセスを遮断する
脆弱性をゼロにすることはできません。「早く塞ぐ」「入口を減らす」「攻撃を手前で止める」を組み合わせて、悪用される機会を減らすことが大切です。

