問い合わせフォームにファイル添付欄を付けているWordPressサイトの管理者なら、10月29日に来たContact Form 7の更新通知はいつもと違う。バージョン6.2.4は、ファイルアップロードの検証漏れと一時ファイルの削除漏れが重なって生じていた「認証不要の任意ファイルアップロード」を修正した。直しただけでなく、拡張子のチェック方式そのものを「危険なものを禁止する」方式から「安全なものだけを許可する」方式に変えている。具体的に何をされる話で、自分のサイトでは何を確認すればいいのか。
このアップデートは自分に関係あるか
Contact Form 7はWordPress.orgの公式プラグインページによれば、有効インストール数が1,000万を超える。問い合わせフォームにファイルを添付させる設定を使っているサイトなら、まず関係があると考えてよい。
WordPress.orgのchangelogを見ると、6.2.4の行には「Release announcement」として公式サイトの告知へのリンクがあるだけで、変更点の箇条書きは無い。続く6.2.4.1では「FormDataTree-PHP」というライブラリを2.0.10へ上げたことだけが記されている。
2026年10月時点の最新安定版はこの6.2.4.1だ。これより古いバージョンを使っているなら対象になる。では、直った「認証不要の任意ファイルアップロード」とは、具体的に何をされる話なのか。
何をされる可能性があったのか
セキュリティ企業ロケットボーイズの解説記事によると、対象は6.2〜6.2.3。ログインなどの認証を経ずに、本来は受け付けないはずのファイルをアップロードでき、さらに送信後に削除されるはずの一時ファイルがサーバー上に残る可能性があった。
同記事は、これは1つの決定的なバグではなく、ファイルの検証と一時ファイル削除に関する複数の不備が組み合わさって抜け道になった、と説明している。攻撃が成立するには、ファイルアップロード項目のあるフォームが要る。加えて、アップロード先ディレクトリの一覧表示が有効なサーバー設定も必要で、すべての環境で直ちに任意のコードが実行できると公式に確認されたわけではないという。
ファイルアップロードの検証という、プラグインとしてはごく基本的な機能に、なぜこんな抜け道が残っていたのか。
禁止リストが漏れやすい理由
拡張子を使った検証には、大きく2つのやり方がある。危険な拡張子を一覧にして、それ以外は通す禁止リスト方式と、安全だと確認した拡張子だけを一覧にして、それ以外はすべて止める許可リスト方式だ。
ここで一般に知られるファイルアップロードの脆弱性の例を借りる(Contact Form 7固有の拡張子ではなく、禁止リスト方式の弱点を示す一般的な例だ)。.phpを禁止リストに入れていても、サーバーの設定によっては.php3や.phtmlのような亜種の拡張子がプログラムとして実行されてしまうことがある。
禁止リストは、知っている危険を一つずつ書き出す方式なので、書き漏らしがそのまま弱点になる。許可リストは、安全と確認したものだけを通す方式なので、書いていない拡張子はすべて自動的に止まる。新しい危険があとから見つかっても、許可リストに切り替えていれば影響を受けない。
6.2.4で何が変わったか
ロケットボーイズの記事によれば、危険なファイル名を扱う関数wpcf7_antiscript_file_name()の方式が変わった。禁止拡張子を列挙するやり方から、許可リストのやり方に切り替わった。独自の拡張子を許可したい場合は、新しく追加されたフィルターwpcf7_file_extension_safelistで調整できるとされている。個別の脆弱性を1つ塞いだだけでなく、同種の見落としが後から見つかっても構造的に止まる形へ作り替えた点に、自分は単なるバグ修正以上の判断を感じた。
開発元の6.2.4告知には、CVE番号・CVSSの深刻度評価・実際の悪用が確認されたという記載はない、とロケットボーイズの記事は明記している。自分でもWPScanのContact Form 7の脆弱性情報ページを確認したが、2026年11月1日時点でこの件に対応する項目はまだ掲載されていなかった。発見者(Shinya Murakami氏、Jakub Herman氏)とWPScan経由の報告という経緯は、ロケットボーイズの記事を出典として書いている。
対象バージョンと要件を整理すると、次のようになる。
| 項目 | 内容 |
|---|---|
| 影響を受けるバージョン | 6.2〜6.2.3 |
| 修正バージョン | 6.2.4(追加修正の6.2.4.1が最新) |
| 必要なWordPress | 7.1以上 |
| 必要なPHP | 8.3以上 |
必要なWordPressとPHPのバージョンは公式changelogに明記されている条件で、6.2系を使うにはこの前提を満たしている必要がある。ここまでで何が変わったかは分かった。自分のサイトでは、具体的に何を確認すればいいのか。
確認すること
ロケットボーイズの記事が挙げている対応は、次の手順にまとめられる。
- WordPress管理画面の「プラグイン」で、Contact Form 7のバージョンを確認し、6.2.4.1以降に更新する
- 更新前に、サイトがWordPress 7.1以上・PHP 8.3以上を満たしているか確認する
- フォームのアップロード先ディレクトリで、一覧表示が無効になっているか、アップロードファイルへ直接アクセスできない設定になっているかを確認する
- 独自コードで
wpcf7_unship_uploaded_file()を直接呼んでいる場合、第2引数$optionsが必須になり第3引数$uploaded_filesが追加されているため、動作を確認する - 独自に拡張子を許可する必要があれば、
wpcf7_file_extension_safelistフィルターで追加する。実行可能なスクリプト形式を安易に許可しない
6.2〜6.2.3を運用していた期間が長いサイトでは、アップロード先やアクセスログに見覚えのないファイルやアクセスがないかも、余裕があれば見ておくとよい。
まとめ
Contact Form 7の6.2.4は、ファイル名の検証漏れと一時ファイルの削除漏れが重なって生じていた認証不要のファイルアップロードを修正した。修正の中心は、拡張子のチェックを禁止リストから許可リスト方式へ切り替えたことにある。対象は6.2〜6.2.3で、6.2.4.1以降への更新と、WordPress 7.1・PHP 8.3以上という要件の確認が必要になる。アップロード先ディレクトリの設定や、独自コードでの互換性も合わせて見ておきたい。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…