夜明けの山々を映す静かな湖面

個人開発の脆弱性対策を、7段階のフローにした

9月の終わりに、ブログを置いているレンタルサーバー(XServer)から、「WordPressの脆弱性に関する注意喚起」というメールが届きました。私のブログは、もうWordPressではありません。それでも「本当に関係ないのか」を、AI(Claude Code)と一緒に確かめました。

確かめてみると、ブログは対象外でした。ただ、調べる途中で、ブログとは別の所に、直したほうがよい所を見つけました。そこで、知らせが来たときだけ慌てて調べるのをやめ、脆弱性対策を毎週回すフローに変えました。自分でサーバーや手元のAIの道具を動かしている方に向けて、この記事では、その経緯と設計、2週間回してみた結果をまとめます。

届いたお知らせの中身

メールにあった脆弱性は、CVE-2026-87902です。CVEは、公開された脆弱性に付く世界共通の番号です。深刻さは、CVSSという共通の物差しを使い、0〜10点で表します。7.0以上が「高(High)」、9.0以上が最も重い「緊急(Critical)」です。

調べると、次のような脆弱性でした。

項目 中身
対象 WordPress 4.7.0〜7.1.1
何が起きるか ログインしなくても、外からサイトを乗っ取られるおそれがある
深刻度 Patchstackの評価で9.2(緊急)。米国の政府機関のデータベース(NVD)では8.1(高)
直った版 7.1.2(古い系列は7.0.6・6.9.9・6.8.10)
状況 修正が出てから数時間で、攻撃が始まっている

出典はPatchstack、The Hacker News、NVDです。なお、メールの中のリンクは開かず、同じ脆弱性を扱っている別の情報源を、自分で検索して確かめています。注意喚起を装った偽のメールもあるためです。

私のブログに関係あるかを、実物で確かめる

このブログは、今年の夏にWordPressからAstro(HTMLを前もって作っておく静的サイトの仕組み)に作り直しました。サーバーの上で、WordPressを動かすPHP(プログラムの言語)は動いていないはずです。

ただ、「はず」のままにせず、外から実際に確かめました。WordPressの入口にあたるURLを7か所(wp-login.php・wp-admin/・xmlrpc.php・wp-json/・readme.html・wp-content/・wp-includes/)開くと、すべて「ページが無い」(404)でした。また、ブログを本番へ反映するたびに、公開用のフォルダを丸ごと置き換える作りになっているので、古いWordPressのファイルは残っていません。

つまり、このブログは対象外です。

調べる途中で、別の穴が見つかった

今回いちばんの学びは、ここからです。

関係あるかを確かめるついでに、「今、外から届く状態になっているものは何か」も一緒に洗い出しました。すると、WordPressとは関係のない所で、直したほうがよい所を2つ見つけました。

  • Macのファイアウォール(外からの接続を止める仕組み)が無効になっていた
  • 手元で動かしているAIの道具の1つが、同じネットワークから認証なしで使える状態になっていた

ファイアウォールは、その場で有効にしました。AIの道具のほうは、Macを家の外へ持ち出さないので急ぎ度を下げ、このあと作ったフローに乗せて直しました(結果は後の節に書きます)。

Macなら、待ち受けているものは lsof -nP -iTCP -sTCP:LISTEN で、ファイアウォールの状態は /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate で確かめられます。

もし届いたメールの1件だけを見て「うちは関係ない」で終えていたら、これらには気づかなかったと思います。待っているだけだと、目に入るのは、たまたま届いた知らせだけです。私が本当に知りたかったのは「自分が動かしているものの中に、危ないものが無いか」のほうでした。

脆弱性対策をフローにする

そこで、Claude Codeと一緒に、脆弱性対策のフローを設計しました。流れは次の7段階です。

  1. 点検:週に1回、自分が動かしているものの版を集め、公開されている脆弱性の情報と突き合わせる
  2. 抽出:自分に当てはまるかどうかを決まった規則で振り分け、急ぎ度を付ける(当てはまらないものは「対象外」として理由と一緒に残す)
  3. 通知:新しく見つかったものだけを、Macの通知で知らせる
  4. 方針:1件ずつ本当に当てはまるかを実物で確かめ、対策案を報告書にする
  5. 承認:私が項目ごとに「やる/保留」を決める
  6. 実施:承認されたものだけを直し、直ったかを確かめる
  7. 記録:判断と対応を台帳に残し、月に1回振り返る

1〜3は、毎週土曜の朝に自動で動きます。自動にするのは、この「読むこと」と「知らせること」だけです。何かを変えるのは、必ず5の承認のあとにします。

設計で決めたこと

動かしているものの一覧を持つ

最初に作ったのは、私が動かしているものの一覧です。ブログ、サーバー、自動化の道具(n8n)、手元のAIの道具、コードが使っている部品、鍵やトークンの期限、そして外から何が届くか(待ち受けているものとファイアウォール)まで入れています。n8nは、決まった時刻や外からの呼び出しで、処理を自動で動かす道具です。

一覧に無いものは、点検されません。そのため、新しい道具を入れたら一覧に足すことを、一覧の先頭と手順書に書いておきました。

急ぎ度を5つに分ける

見つかったものは、次の5つに分けます。

急ぎ度 条件
至急 攻撃が確認されていて、外から届き、自分の版が影響を受ける
要対応 深刻度が「高(High)」以上(CVSSで7.0以上)で、自分の版が影響を受ける
要確認 版が分からない、または設定しだいで当てはまる
参考 深刻度が「中」「低」で、自分の版が影響を受ける(報告書には載せ、通知は件数だけ)
対象外 使っていない、影響する版の範囲の外、または直った版を使っている

開発のときだけ使う部品は、深刻度が高くても「要確認」に下げます。ただし、攻撃に使われたと確認されたものは下げません。

「対象外」にするときも、理由を必ず台帳に書きます。今回のWordPressなら「静的サイトで、入口はすべて404」です。あとから同じ知らせが来ても、なぜ対象外にしたかを辿れます。

新しく払う費用は0円で組む

新しく払う費用は0円にしました。脆弱性の情報は、無料で使えるものだけです。AIは、もともと使っているClaude Codeの範囲で動かします。

  • OSV.dev:Googleが公開している脆弱性のデータベース。コードが使っている部品の名前と版を送ると、当てはまる脆弱性を返してくれる
  • GitHubのセキュリティ勧告:GitHubが集めている勧告のデータベースと、使っている道具の公式リポジトリに出る勧告。コードの部品ではない、手元やサーバーで動かしている道具はここで見る
  • CISA KEV:米国の政府機関が公開している「実際に攻撃に使われた脆弱性」の一覧

また、点検と抽出にAIは使いません。決まった規則で分けるだけにしています。AIが働くのは、私が頼んだときだけです。4の「方針」づくりと、承認したあとの6の「実施」がそれに当たります。

AIに任せる所、人が決める所

方針づくりの手順は、Claude Codeの手順書(Skill)にしました。「このセキュリティのメール、対策が要る?」と聞けば、Claude Codeは次の順に動きます。

  1. 脆弱性の情報を、複数の情報源で確かめる
  2. 自分の環境で実際に測る
  3. 急ぎ度を決める
  4. 対策案と戻し方を報告書にまとめる

一方で、決めることと、管理画面やシステムの設定を触ることは、私の役割です。今回のファイアウォールも、Claude Codeが手順を示し、私が設定し、Claude Codeが有効になったかを確かめました。

手順書には「やってはいけないこと」も書きました。承認の無い変更をしない、メールのリンクを開かない、そして対策が済んでいない穴の詳細を公開の場に書かない、などです。この記事も、その決まりに沿って書いています。

2週間回してみて

土曜の朝の自動点検は、これまでに2回動きました。そのたびに報告書ができ、新しく見つかった分だけがMacの通知で届いています。

この2週間で直したのは、次の5つです。どれも、急ぎ度を付けて対策案をまとめ、私が決めてから直しました。

見つけたもの やったこと
ブログを作る部品の脆弱性10件 部品の版を上げて、その時点の10件を0件にした
自動化の道具(n8n)の版の遅れ 最新の安定版に上げた
自動化の入口(外からURLを呼ぶと処理が動き出す口)のうち2つが、認証なしで動かせた 合言葉やパスワードを付けた
AIの道具が、同じネットワークから使えた このMacの中からしか使えない設定にした
サーバーに、古いWordPressの登録(データベース)だけが残っていた ファイルは無く、入口もすべて404だった。控えを残してから消した

きっかけのWordPressの脆弱性は対象外でしたが、最初に直したファイアウォールを含めると、直すものは6つ見つかりました。このうちブログの部品の脆弱性は、週1回の自動点検が見つけたものです。

これから

次は、通知をチャットにも送り、スマホで見られるようにします。また、7の「月に1回の振り返り」は、まだ回していません。最初の振り返りで、同じ種類のものが繰り返し出ていないかを確かめます。

脆弱性の知らせは、これからも届き続けるはずです。そのときは一から調べ直さず、同じ手順で確かめ、同じ台帳に残します。それだけでも、慌てる場面はかなり減ると考えています。

これは私の環境に合わせたやり方なので、1つの参考として見ていただければと思います。