メインコンテンツに移動

DrupalのCAPTCHAに脆弱性|セキュリティ更新が必要な理由と未更新のリスク

DrupalのCAPTCHAに脆弱性|セキュリティ更新が必要な理由と未更新のリスク

あれ?Drupal の管理画面で記事を書こうとしたところ、画面の上に赤いエラーメッセージが出ていました。

「利用中のモジュールやテーマのセキュリティーアップデートが入手可能です」という知らせです。

原因は、フォームを機械による送信から守る CAPTCHA モジュールに見つかった脆弱性(セキュリティ上の欠陥)でした。

2026年10月28日(日本時間では29日)に、Drupal のセキュリティチームが修正版の 2.0.11 とセキュリティ情報を公開しています。

この記事では、単なるアップデートの方法ではなく、なぜこの脆弱性が起きたのか、なぜセキュリティ更新が必要なのか、そして更新しないままにしておくリスクを、このブログで実際に行ったアップデートの前と後の画面を交えて、できるだけ分かりやすく解説します。

Drupalの記事の作成画面の上に表示されたエラーメッセージ。利用中のモジュールやテーマのセキュリティーアップデートが入手可能です。サーバーの安全性を確保するために、早急に更新するべきです、と書かれている

この記事の要点

  • CAPTCHA モジュールの 2.0.10 までに脆弱性があり、2.0.11 で修正された
  • 脆弱性は、一度解いた CAPTCHA の記録を使い回して、フォームを何度でも送れてしまうこと(セッションリプレイ)
  • 情報が漏れる脆弱性ではないが、スパム登録・コメントスパム・ログインの総当たり攻撃への守りが弱くなる
  • 攻撃の方法がすでに存在し、ログインしていない人でも狙えるため、早めの更新が大切
  • 更新は「退避 → 更新 → 確認」の順で、安全に行える

 

アップデートの前と後

Drupal の管理画面の「レポート」→「利用可能なアップデート」を開くと、インストールしているモジュールが最新かどうかを確かめられます。

アップデートの前:赤い「セキュリティーアップデートが必要です!」

CAPTCHA 2.0.10 の欄が赤くなり、セキュリティーアップデートとして 2.0.11 が案内されていました。「Requires Drupal core: 11.4.11」とあるとおり、今の Drupal 本体のままで入れられる版です。

アップデートの前の、利用可能なアップデートの画面。CAPTCHA 2.0.10 の欄が赤く、セキュリティーアップデートが必要です、と表示され、セキュリティーアップデートとして 2.0.11 が案内されている。その下の Cloudflare Turnstile 1.2.0 は最新

アップデートの後:緑の「最新」

2.0.11 に更新したあと、「手動で確認」を押すと、CAPTCHA の欄が緑の「最新」に変わりました。

記事の作成画面の赤いエラーメッセージも消えています。

アップデートの後の、利用可能なアップデートの画面。CAPTCHA 2.0.11 の欄が緑で、最新と表示されている

 

CAPTCHA モジュールとは

CAPTCHA(キャプチャ)は、フォームを送ろうとしているのが人なのか、機械(ボット)なのかを確かめる仕組みです。

「私はロボットではありません」のチェックや、ゆがんだ文字を読み取る問題などが、よく知られています。

Drupal の CAPTCHA モジュールは、会員登録・コメント・ログイン・お問い合わせなどのフォームに、この確認を付けるためのモジュールです。このブログでは、CAPTCHA モジュールと Cloudflare Turnstile を組み合わせて、ログインのフォームなどを機械による送信から守っています。

 

脆弱性が起きた理由:セッションリプレイ(CAPTCHA の回避)

CAPTCHA モジュールは、何段階かに分かれたフォームで、2段階目以降に同じ確認をくり返さなくて済むように、「この人はもう CAPTCHA を解いた」という記録を覚えておきます。

ところが 2.0.10 までは、この記録が、使い終わったあとも完全には消されていませんでした。そのため、一度送信したフォームを、新しい CAPTCHA を解かないまま、もう一度送信できてしまいます。これが「セッションリプレイ(記録の使い回し)」です。

図を押すと、その場で動画が再生されます。

セッションリプレイ(CAPTCHAの回避)を説明した図。修正前の2.0.10までは、CAPTCHAを解いて1回目を送信したあとも解いた記録が残り、同じ記録で何度でも送信できてしまう。修正後の2.0.11では、1回目の送信で解いた記録を消すため、もう一度送信しようとしても送れず、新しいCAPTCHAを解く必要がある。会員登録・コメント・ログインのフォームを、機械で繰り返し送る攻撃を防ぐ

なぜ、こうした脆弱性が生まれるのか

今回の脆弱性は、もともと使う人の手間を減らすための便利な仕組みから生まれています。何段階かに分かれたフォームで、毎回 CAPTCHA を解かなくて済むように「もう解いた」という記録を覚えておく仕組みです。

たとえるなら、イベント会場の入口で渡す「入場済みの印」のようなものです。会場の中を行き来するときには便利ですが、帰るときに回収し忘れると、その印を使って何度でも入れてしまいます。今回は、フォームの送信が終わったあとも、この印が完全には回収されていなかったことが原因でした。

このように、セキュリティ上の問題は「便利さ」と「安全さ」の境目で起きやすく、作った人も気づきにくいものです。だからこそ、見つかった時点で修正版が公開され、使う側がそれを入れることで、はじめて守りが完成します。

実は、この種の脆弱性は今回が初めてではありません。2026年の初めにも、記録の使い回しに関する修正(SA-CONTRIB-2026-015)が出ています。そのときは使い回しの経路の1つが閉じられましたが、別の経路が残っていて、今回の 2.0.11 でそれが閉じられました。

 

なぜ、セキュリティ更新が必要なのか

Drupal のセキュリティ情報では、今回の脆弱性の重要度は「中程度(Moderately critical)・13/25」とされています。数字だけを見ると、それほど急がなくてもよさそうに見えるかもしれません。ただ、重要度の中身を見ると、早めに更新したい理由が分かります。

この脆弱性には、世界共通の脆弱性の番号として「CVE-2026-118582」が付けられています。これは CAPTCHA モジュールの脆弱性に付けられた番号で、PHP 本体の脆弱性ではありません。そのため、サーバーの PHP の版を上げても直らず、CAPTCHA モジュールを 2.0.11 に更新する必要があります。

セキュリティ情報の項目今回の内容意味
攻撃に必要な条件なし(A:None)ログインしていない人でも狙える
攻撃の方法すでに存在(E:Exploit)攻撃のやり方が、すでに知られている
対象になる設定すべて(TD:All)どんな設定で使っていても対象になる
攻撃の難しさ基本的(AC:Basic)特別な条件がなくても試せる
情報の漏えい・改ざんなし(CI:None・II:None)この脆弱性だけで、データが盗まれたり書き換えられたりはしない

つまり、データを直接盗まれる脆弱性ではないものの、「誰でも」「すでに知られた方法で」「どの設定でも」狙えるという点が重要です。CAPTCHA はサイトの入口を守る部品なので、ここが弱くなると、その奥にあるフォームへの攻撃がしやすくなります。

 

未更新のままにするリスク

CAPTCHA が回避されると、機械による大量の送信を止められなくなります。

Drupal のセキュリティ情報でも、次のような攻撃への守りが弱くなると説明されています。

アップデートしないと起きうることの図。重要度は中程度(13/25)で、情報は漏れないがフォームの守りが弱くなる。今回の脆弱性の特徴は、ログインなしで狙える、攻撃の方法がすでにある、すべての設定が対象、情報の漏えい・改ざんはなし。起きうることは、1 会員登録のスパム(偽のアカウントが機械で大量に作られる)、2 コメントのスパム(宣伝や悪質なリンクが繰り返し書き込まれる)、3 ログインの総当たり攻撃(パスワードを機械で試し続けられる)。セキュリティ情報が公開されると脆弱性の場所は誰でも分かるようになり、古い版のまま残っているサイトは機械で探されて狙われやすい

1. 会員登録のスパム

会員登録を受け付けているサイトでは、偽のアカウントが機械で大量に作られるおそれがあります。不要なアカウントの削除に手間がかかるだけでなく、そのアカウントが迷惑な投稿の入口になることもあります。

2. コメントのスパム

コメント欄があるサイトでは、宣伝や悪質なリンクが繰り返し書き込まれるおそれがあります。訪問者が危ないページへ誘導されたり、サイトの信用が下がったりする原因になります。

3. ログインの総当たり攻撃

ログインのフォームで、パスワードを機械で次々に試す攻撃(総当たり攻撃)を止めにくくなります。弱いパスワードを使っていると、アカウントを乗っ取られる危険が高まります。

4. 公開された脆弱性は、探されやすい

見落とされがちなのが、このリスクです。セキュリティ情報や修正版が公開されると、どこに脆弱性があったのかは、誰でも調べられるようになります。攻撃する側は、古い版のまま残っているサイトを機械で探して狙います。公開から時間がたつほど、更新していないサイトは狙われやすくなります。

 

このブログで行ったアップデートの手順

セキュリティ更新は急ぎたい一方で、更新でサイトが表示されなくなっては困ります。そこで、次の手順で「すぐに・安全に」更新しました。

安全にアップデートした手順の図。1 今の版を確認(CAPTCHA 2.0.10)、2 退避する(データベースとcomposerの設定)、3 CAPTCHAだけ更新(composer update drupal/captcha)、4 仕上げ(drush updb と drush cr)、5 表示を確認(記事・ログイン・一覧がすべて200)。200にならなければ退避から自動で戻す。結果はCAPTCHA 2.0.10から2.0.11、ほかの部品は変わらず、データベースの変更は不要。利用可能なアップデートの赤い表示と記事の作成画面のエラーメッセージも消えた

手順内容
1. 今の版を確認CAPTCHA が 2.0.10 であることを確かめる
2. 退避するデータベースと、Composer の設定ファイル(composer.json・composer.lock)を保存する。退避できなければ、更新しない
3. CAPTCHA だけ更新関係のない部品まで一緒に上げないよう、CAPTCHA だけを指定して更新する
4. 仕上げデータベースの更新と、Drupal のキャッシュの消去
5. 表示を確認記事・ログインの画面・一覧が、すべて正常(200)に表示されるかを確かめる。だめなら退避から自動で戻す

Composer で管理している Drupal の場合、手順3と4は、次のようなコマンドで行います。

composer update drupal/captcha
drush updb -y
drush cr

今回は、CAPTCHA が 2.0.10 から 2.0.11 に上がり、ほかの部品は変わりませんでした。データベースの更新も「No pending updates.」(必要な変更なし)で、記事・ログインの画面・一覧はすべて正常に表示されました。

なお、2.0.11 には、今回の脆弱性の修正のほかに、PHP 8.5 に向けた互換性の修正なども含まれています。

 

一緒に知っておきたいこと

試験版(beta・alpha)は入れなくてよい

同じ画面に、Drupal 本体の「11.5.0-beta1」「12.0.0-beta2」や、二段階認証(TFA)の「2.0.0-alpha5」も表示されていました。beta や alpha は試験版なので、ふだん使っているサイトには入れなくて大丈夫です。「最新」の緑の表示が出ていれば、安定版としては最新です。

CAPTCHA だけに頼らない

このブログでは、ログインに二段階認証(TFA)も使っています。仮に CAPTCHA が回避されても、パスワードだけではログインできないようにしておくと、被害を防ぎやすくなります。入口の守りは、いくつかを重ねておくのが基本です。

更新の知らせをメールで受け取る

「利用可能なアップデート」の「設定」タブでは、更新があったときにメールで知らせてもらう設定ができます。知らせる範囲を「セキュリティー更新のみ」にしておくと、急ぎの更新だけを見落とさずに済みます。

 

よくある質問

Q. 自分のサイトが対象かどうかは、どこで分かりますか?

Drupal の管理画面の「レポート」→「利用可能なアップデート」で、CAPTCHA が 2.0.10 以前になっていれば対象です。古い系統の 8.x-1.x を使っている場合は、8.x-1.18 が修正版です。

Q. CVE-2026-118582 は、PHP の脆弱性と関係がありますか?

関係ありません。CAPTCHA モジュールは PHP で書かれていますが、今回の問題はモジュールの処理(解いた記録を消し忘れる部分)にあり、PHP 本体の問題ではありません。直すには、CAPTCHA モジュールを 2.0.11(8.x-1.x の場合は 8.x-1.18)に更新します。なお、2.0.11 のリリースノートにある「PHP 8.5 との互換性の修正」は、今後の PHP でも動くようにするための別の修正です。

Q. 重要度が「中程度」なら、急がなくてもいいですか?

おすすめしません。今回は攻撃の方法がすでに知られていて、ログインしていない人でも狙えます。Drupal のセキュリティ情報でも、最新版を入れるよう案内されています。

Q. 更新でサイトが表示されなくなったら?

更新の前にデータベースと Composer の設定を退避しておけば、元の版に戻せます。退避と、更新後の表示の確認は、必ずセットで行いましょう。

 

まとめ:セキュリティ更新は「すぐに・安全に」

  • CAPTCHA モジュールの 2.0.10 までに、一度解いた記録を使い回せる脆弱性があった
  • 情報は漏れないが、スパム登録・コメントスパム・ログインの総当たり攻撃への守りが弱くなる
  • 攻撃の方法がすでに知られているため、公開後はできるだけ早く更新する
  • 更新は「退避 → 更新 → 確認」の順で行えば、安全に進められる
  • CAPTCHA だけに頼らず、二段階認証なども重ねて入口を守る

金風株式会社では、Drupal や WordPress で作られたサイトの、セキュリティ更新や保守のご相談を承っています。「管理画面に赤い表示が出ているけれど、どうすればいいか分からない」という段階からでも、お気軽にお問い合わせください。

 

参考資料

最新のお役立ち情報はメルマガでもお届けしています