秋祭りサイト、ただいま閉門中
午前八時十一分、佐原未央のスマートフォンが、味噌汁の横で震えた。
《緊急:使用中のCMSプラグインに重大な脆弱性》
通知を読んだ未央は、箸でつまんでいた油揚げを味噌汁へ落とした。
二十七歳。小さなWeb制作会社で、サーバー管理から問い合わせ対応まで担当している。今日は在宅勤務の予定で、灰色のスウェットに厚手の靴下、髪は寝癖を隠すため後ろでまとめただけだった。
十月も後半に入り、朝の空気はすっかり冷えている。窓を少し開けただけで、金木犀の残り香と一緒に冷気が入ってきた。
未央は味噌汁を諦め、ノートパソコンを開いた。
問題のプラグインは、顧客サイトで七件使われていた。
その中には、明日から始まる《小春町・秋の収穫祭》の公式サイトもある。
栗ごはん、焼き芋、きのこ汁、新米の販売。子ども向けの芋掘り体験。地元の農家と商店が一年で最も忙しくなる催しで、予約ページには昨夜だけで三百件近いアクセスがあった。
脆弱性の内容を確認すると、条件次第では管理画面へ不正に入られる可能性があるらしい。
まだ被害が起きた証拠はない。
しかし、何もせず公開し続けるわけにもいかない。
未央は会社の緊急チャットへ書き込んだ。
《対象サイトを一時停止します。ログ確認、更新、認証情報の変更を行います》
三十秒後、社長から返信が来た。
《了解。どのくらい?》
《分かりません》
《お客さんには?》
《これから連絡します》
《朝ごはんは?》
《今それ聞きます?》
《大事だよ》
未央は返事をせず、七つのサイトを順番にメンテナンス表示へ切り替えた。
午前八時二十六分。
秋の収穫祭サイトは見られなくなった。
正確には、画面の中央にこう表示されている。
《ただいま緊急メンテナンスを実施しています》
その下に、《安全確認が完了するまで、しばらくお待ちください》と続く。
未央は一度、深く息を吐いた。
まずは入口を閉じた。
次は、中へ誰かが入った形跡がないか調べる。
管理画面へのアクセス履歴、ファイルの更新日時、不審なアカウント、見覚えのない通信。確認する項目は多い。
作業を始めて五分後、会社の電話が転送されてきた。
「はい、東雲ウェブです」
『収穫祭のサイトが消えたんだけど!』
電話の主は、小春町商店会の会長、塚本だった。
七十二歳。声が大きく、電話越しでも距離感が近い。
「消えてはいません。安全確認のため、一時的に閉じています」
『誰かに壊されたのか?』
「壊された形跡があるか、今調べています」
『じゃあ、壊されたかもしれないのか?』
「可能性の話です」
『栗ごはんの予約は?』
「現在はできません」
『うちの妻が、朝から二升炊いてるぞ』
「予約数は昨日までの分が保存されています」
『サイトが見えないのに、予約は見えるのか?』
「こちらでは見えます」
『幽霊みたいだな』
「幽霊ではなく、データベースです」
塚本は少し黙った。
『難しい話は分からんけど、祭りは中止じゃないんだな?』
「中止ではありません」
『じゃあ、店の前に書いておく』
「何と書くんです?」
『サイト故障中。祭りは生きています』
「故障ではなく緊急メンテナンスです」
『長い』
電話は切れた。
未央は嫌な予感がしたが、今は現地の張り紙まで止めている余裕がない。
午前九時を過ぎると、問い合わせが増え始めた。
《芋掘りの予約ができません》
《サイトが乗っ取られたのですか》
《秋祭りは中止ですか》
《焼き芋は売りますか》
最後の質問だけ、セキュリティと関係がない。
未央は案内文を作り、商店会のSNSへ掲載した。
《公式サイトは安全確認のため一時停止しています。秋の収穫祭は予定どおり開催します。新規予約の受付再開については、改めてお知らせします》
投稿して一分後、塚本から写真が送られてきた。
商店街の入口に、手書きの看板が立っている。
《ホームページは穴があいたので休みです。祭りはやります》
未央は額を押さえた。
すぐに電話をかける。
「会長、表現を変えてください」
『どこが悪い?』
「穴があいた、だと実際に侵入されたように見えます」
『セキュリティホールって、穴だろ?』
「意味としては近いですけど、今は被害の有無を調べている段階です」
『じゃあ、何て書く?』
未央は考えた。
正確に書こうとすると長くなる。
簡単に書くと誤解される。
『早くしてくれ。風で紙が飛びそうだ』
「《安全確認中。祭りは開催》でお願いします」
『それだけ?』
「それだけです」
十分後、新しい写真が届いた。
《安全確認中。栗は安全》
「栗の確認は頼んでない」
誰もいない部屋で、未央は声に出してしまった。
昼前、対象となった七サイトのうち、六件は問題なく更新を終えた。
不審なログもない。
残るのは収穫祭サイトだけだった。
このサイトには、通常の案内ページに加え、予約フォーム、出店者用の管理画面、昨年の写真一覧がある。作りが少し古く、更新後に表示が崩れた。
栗の写真が縦に伸び、焼き芋の画像が画面いっぱいに広がり、会場地図は左右が反転した。
「セキュリティは直ったけど、町が裏返った…」
未央は独り言をこぼした。
会社のチャットへ進捗を書く。
《侵入の形跡なし。更新後の表示崩れを修正中》
社長から返信が来た。
《昼ごはんは?》
《栗が巨大化しています》
《食べ物の報告ではないね》
午後一時半、塚本から再び電話が来た。
『若い人が、サイトを見られないなら祭りへ行けないって言ってるぞ』
「場所は看板やSNSにも載せています」
『サイトがないと、存在しないと思う人もいるんだな』
その声は、朝より少しだけ落ち着いていた。
未央はキーボードを打ちながら答える。
「今は、検索して出なければ閉店したと思われることもあります」
『店は開いてるのにな』
「だから、早く戻します」
『でも、危ないまま戻したら駄目なんだろ?』
未央の手が一瞬止まった。
朝から何度説明しても、塚本はサイトが見えないことばかり気にしていた。
その彼が、初めて公開を急かさなかった。
「そうです。確認してから戻します」
『分かった。こっちはこっちで何とかする』
電話の向こうで、誰かが塚本を呼んだ。
『じゃあ切るぞ。焼き芋の煙で看板が見えん』
「まだ祭りは明日ですよね?」
『試し焼きだ』
「何本です?」
『五十本』
「試す量じゃないですよ」
電話が切れた。
午後三時。
空は早くも夕方の色になり始めていた。
窓の外では、冷たい雨が細く降っている。未央は朝から一度も外へ出ていない。机の上の味噌汁は、とっくに冷えていた。
最後の確認を終え、未央は収穫祭サイトを公開状態へ戻した。
トップページが表示される。
赤く色づいた山。
木箱に積まれた栗。
湯気の立つきのこ汁。
会場地図も正しい向きだ。
予約フォームを試すと、確認メールまで届いた。
未央は商店会へ連絡した。
《安全確認と更新が完了しました。公式サイトを再開しました》
送信した直後、塚本から電話が来た。
『見えた!』
「早いですね」
『朝から三分おきに見てたからな』
「仕事してください」
『仕事してる。焼き芋を焼きながら見てた』
「試し焼き、まだ続いてるんですか?」
『失敗したら困るだろ』
遠くで、子どもたちの声が聞こえた。
塚本が試し焼きと称して、近所へ配っているらしい。
『ところで、穴は塞がったのか?』
「塞がりました」
『誰も入ってなかった?』
「入った形跡はありません」
『なら、見られなかっただけか』
「その“見られなかっただけ”にするために、朝から閉じていました」
塚本はしばらく黙ったあと、笑った。
『店の戸締まりと同じだな。閉まってる時は不便だけど、開けっぱなしよりいい』
「そういうことです」
『明日、来られるか?』
「収穫祭に?」
『栗ごはんを取っておく。サイトを守った人間が、画面の栗しか見てないんじゃ気の毒だ』
翌朝。
未央は小春町の商店街へ向かった。
空は晴れていたが、昨日の雨で路面はまだ濡れている。風は冷たく、コートのポケットへ手を入れたまま歩いた。
商店街の入口には、例の看板が残っていた。
《安全確認中。栗は安全》
その下に、別の紙が貼り足されている。
《ホームページも安全になりました》
未央が看板を見ていると、塚本が焼き芋の袋を抱えて現れた。
「消しましょうよ、この看板」
「せっかく作ったんだ。今日までは出す」
「サイト、もう見られます」
「昨日見られなかったことも、本当だろ」
塚本は温かい袋を一つ、未央へ渡した。
中には小さな焼き芋が入っている。
「栗ごはんじゃないんですか?」
「それは昼だ。これは試し焼きの残り」
「五十本も試したのに?」
「念には念を入れた」
未央は焼き芋を半分に割った。黄色い中身から、白い湯気が立つ。
一口食べると、少し焦げていた。
「これは失敗した方ですね」
「安全性には問題ない」
塚本が胸を張る。
商店街の奥では、収穫祭の準備が始まっていた。栗を運ぶ人、机を並べる人、案内板を立てる人。公式サイトの地図をスマートフォンで確認しながら歩いてくる家族もいる。
未央は焼き芋をもう一口食べた。
昨日は、サイトが見られないという連絡ばかりだった。
今日は、画面の向こうにいた人たちが、実際に町へやって来る。
塚本が看板の裏側から、太いペンを取り出した。
「来年も何かあった時のために、裏を空けてある」
「何も起きないようにするのが私の仕事です」
「それでも、看板はあった方がいい」
塚本は裏面へ大きく書いた。
《ただいま正常です》
未央は文字を見て、首をかしげた。
「正常な時に、それを出すと逆に不安になりません?」
塚本はしばらく看板を見つめた。
「確かにな」
セキュリティホールは塞がった。
けれど、新しい問題は、紙と油性ペンだけで簡単に作られていた。
《緊急:使用中のCMSプラグインに重大な脆弱性》
通知を読んだ未央は、箸でつまんでいた油揚げを味噌汁へ落とした。
二十七歳。小さなWeb制作会社で、サーバー管理から問い合わせ対応まで担当している。今日は在宅勤務の予定で、灰色のスウェットに厚手の靴下、髪は寝癖を隠すため後ろでまとめただけだった。
十月も後半に入り、朝の空気はすっかり冷えている。窓を少し開けただけで、金木犀の残り香と一緒に冷気が入ってきた。
未央は味噌汁を諦め、ノートパソコンを開いた。
問題のプラグインは、顧客サイトで七件使われていた。
その中には、明日から始まる《小春町・秋の収穫祭》の公式サイトもある。
栗ごはん、焼き芋、きのこ汁、新米の販売。子ども向けの芋掘り体験。地元の農家と商店が一年で最も忙しくなる催しで、予約ページには昨夜だけで三百件近いアクセスがあった。
脆弱性の内容を確認すると、条件次第では管理画面へ不正に入られる可能性があるらしい。
まだ被害が起きた証拠はない。
しかし、何もせず公開し続けるわけにもいかない。
未央は会社の緊急チャットへ書き込んだ。
《対象サイトを一時停止します。ログ確認、更新、認証情報の変更を行います》
三十秒後、社長から返信が来た。
《了解。どのくらい?》
《分かりません》
《お客さんには?》
《これから連絡します》
《朝ごはんは?》
《今それ聞きます?》
《大事だよ》
未央は返事をせず、七つのサイトを順番にメンテナンス表示へ切り替えた。
午前八時二十六分。
秋の収穫祭サイトは見られなくなった。
正確には、画面の中央にこう表示されている。
《ただいま緊急メンテナンスを実施しています》
その下に、《安全確認が完了するまで、しばらくお待ちください》と続く。
未央は一度、深く息を吐いた。
まずは入口を閉じた。
次は、中へ誰かが入った形跡がないか調べる。
管理画面へのアクセス履歴、ファイルの更新日時、不審なアカウント、見覚えのない通信。確認する項目は多い。
作業を始めて五分後、会社の電話が転送されてきた。
「はい、東雲ウェブです」
『収穫祭のサイトが消えたんだけど!』
電話の主は、小春町商店会の会長、塚本だった。
七十二歳。声が大きく、電話越しでも距離感が近い。
「消えてはいません。安全確認のため、一時的に閉じています」
『誰かに壊されたのか?』
「壊された形跡があるか、今調べています」
『じゃあ、壊されたかもしれないのか?』
「可能性の話です」
『栗ごはんの予約は?』
「現在はできません」
『うちの妻が、朝から二升炊いてるぞ』
「予約数は昨日までの分が保存されています」
『サイトが見えないのに、予約は見えるのか?』
「こちらでは見えます」
『幽霊みたいだな』
「幽霊ではなく、データベースです」
塚本は少し黙った。
『難しい話は分からんけど、祭りは中止じゃないんだな?』
「中止ではありません」
『じゃあ、店の前に書いておく』
「何と書くんです?」
『サイト故障中。祭りは生きています』
「故障ではなく緊急メンテナンスです」
『長い』
電話は切れた。
未央は嫌な予感がしたが、今は現地の張り紙まで止めている余裕がない。
午前九時を過ぎると、問い合わせが増え始めた。
《芋掘りの予約ができません》
《サイトが乗っ取られたのですか》
《秋祭りは中止ですか》
《焼き芋は売りますか》
最後の質問だけ、セキュリティと関係がない。
未央は案内文を作り、商店会のSNSへ掲載した。
《公式サイトは安全確認のため一時停止しています。秋の収穫祭は予定どおり開催します。新規予約の受付再開については、改めてお知らせします》
投稿して一分後、塚本から写真が送られてきた。
商店街の入口に、手書きの看板が立っている。
《ホームページは穴があいたので休みです。祭りはやります》
未央は額を押さえた。
すぐに電話をかける。
「会長、表現を変えてください」
『どこが悪い?』
「穴があいた、だと実際に侵入されたように見えます」
『セキュリティホールって、穴だろ?』
「意味としては近いですけど、今は被害の有無を調べている段階です」
『じゃあ、何て書く?』
未央は考えた。
正確に書こうとすると長くなる。
簡単に書くと誤解される。
『早くしてくれ。風で紙が飛びそうだ』
「《安全確認中。祭りは開催》でお願いします」
『それだけ?』
「それだけです」
十分後、新しい写真が届いた。
《安全確認中。栗は安全》
「栗の確認は頼んでない」
誰もいない部屋で、未央は声に出してしまった。
昼前、対象となった七サイトのうち、六件は問題なく更新を終えた。
不審なログもない。
残るのは収穫祭サイトだけだった。
このサイトには、通常の案内ページに加え、予約フォーム、出店者用の管理画面、昨年の写真一覧がある。作りが少し古く、更新後に表示が崩れた。
栗の写真が縦に伸び、焼き芋の画像が画面いっぱいに広がり、会場地図は左右が反転した。
「セキュリティは直ったけど、町が裏返った…」
未央は独り言をこぼした。
会社のチャットへ進捗を書く。
《侵入の形跡なし。更新後の表示崩れを修正中》
社長から返信が来た。
《昼ごはんは?》
《栗が巨大化しています》
《食べ物の報告ではないね》
午後一時半、塚本から再び電話が来た。
『若い人が、サイトを見られないなら祭りへ行けないって言ってるぞ』
「場所は看板やSNSにも載せています」
『サイトがないと、存在しないと思う人もいるんだな』
その声は、朝より少しだけ落ち着いていた。
未央はキーボードを打ちながら答える。
「今は、検索して出なければ閉店したと思われることもあります」
『店は開いてるのにな』
「だから、早く戻します」
『でも、危ないまま戻したら駄目なんだろ?』
未央の手が一瞬止まった。
朝から何度説明しても、塚本はサイトが見えないことばかり気にしていた。
その彼が、初めて公開を急かさなかった。
「そうです。確認してから戻します」
『分かった。こっちはこっちで何とかする』
電話の向こうで、誰かが塚本を呼んだ。
『じゃあ切るぞ。焼き芋の煙で看板が見えん』
「まだ祭りは明日ですよね?」
『試し焼きだ』
「何本です?」
『五十本』
「試す量じゃないですよ」
電話が切れた。
午後三時。
空は早くも夕方の色になり始めていた。
窓の外では、冷たい雨が細く降っている。未央は朝から一度も外へ出ていない。机の上の味噌汁は、とっくに冷えていた。
最後の確認を終え、未央は収穫祭サイトを公開状態へ戻した。
トップページが表示される。
赤く色づいた山。
木箱に積まれた栗。
湯気の立つきのこ汁。
会場地図も正しい向きだ。
予約フォームを試すと、確認メールまで届いた。
未央は商店会へ連絡した。
《安全確認と更新が完了しました。公式サイトを再開しました》
送信した直後、塚本から電話が来た。
『見えた!』
「早いですね」
『朝から三分おきに見てたからな』
「仕事してください」
『仕事してる。焼き芋を焼きながら見てた』
「試し焼き、まだ続いてるんですか?」
『失敗したら困るだろ』
遠くで、子どもたちの声が聞こえた。
塚本が試し焼きと称して、近所へ配っているらしい。
『ところで、穴は塞がったのか?』
「塞がりました」
『誰も入ってなかった?』
「入った形跡はありません」
『なら、見られなかっただけか』
「その“見られなかっただけ”にするために、朝から閉じていました」
塚本はしばらく黙ったあと、笑った。
『店の戸締まりと同じだな。閉まってる時は不便だけど、開けっぱなしよりいい』
「そういうことです」
『明日、来られるか?』
「収穫祭に?」
『栗ごはんを取っておく。サイトを守った人間が、画面の栗しか見てないんじゃ気の毒だ』
翌朝。
未央は小春町の商店街へ向かった。
空は晴れていたが、昨日の雨で路面はまだ濡れている。風は冷たく、コートのポケットへ手を入れたまま歩いた。
商店街の入口には、例の看板が残っていた。
《安全確認中。栗は安全》
その下に、別の紙が貼り足されている。
《ホームページも安全になりました》
未央が看板を見ていると、塚本が焼き芋の袋を抱えて現れた。
「消しましょうよ、この看板」
「せっかく作ったんだ。今日までは出す」
「サイト、もう見られます」
「昨日見られなかったことも、本当だろ」
塚本は温かい袋を一つ、未央へ渡した。
中には小さな焼き芋が入っている。
「栗ごはんじゃないんですか?」
「それは昼だ。これは試し焼きの残り」
「五十本も試したのに?」
「念には念を入れた」
未央は焼き芋を半分に割った。黄色い中身から、白い湯気が立つ。
一口食べると、少し焦げていた。
「これは失敗した方ですね」
「安全性には問題ない」
塚本が胸を張る。
商店街の奥では、収穫祭の準備が始まっていた。栗を運ぶ人、机を並べる人、案内板を立てる人。公式サイトの地図をスマートフォンで確認しながら歩いてくる家族もいる。
未央は焼き芋をもう一口食べた。
昨日は、サイトが見られないという連絡ばかりだった。
今日は、画面の向こうにいた人たちが、実際に町へやって来る。
塚本が看板の裏側から、太いペンを取り出した。
「来年も何かあった時のために、裏を空けてある」
「何も起きないようにするのが私の仕事です」
「それでも、看板はあった方がいい」
塚本は裏面へ大きく書いた。
《ただいま正常です》
未央は文字を見て、首をかしげた。
「正常な時に、それを出すと逆に不安になりません?」
塚本はしばらく看板を見つめた。
「確かにな」
セキュリティホールは塞がった。
けれど、新しい問題は、紙と油性ペンだけで簡単に作られていた。