Contact Form 7 バージョン 6.2.4 が公開されました。これはいくつかのセキュリティ修正および強化を含むマイナーアップデートリリースです。当該の脆弱性は Contact Form 7 6.2 から 6.2.3 までのバージョンに限り見られるものの、今回のセキュリティ強化はプラグインのすべてのバージョンをより堅牢にするものであるため、すべてのユーザーに対して 6.2.4 へのアップグレードを推奨します。
問題の概要
今回修正したのは任意のファイルが認証なくアップロードされる問題です。攻撃者が Contact Form 7 6.2 から 6.2.3 に見られる複数の欠陥を組み合わせて利用することにより、本来ならバリデーションロジックによりブロックされるはずのファイルをアップロードでき、また本来なら送信直後に削除されるはずのファイルを維持することが可能になります。
理論上、ファイルアップロード項目を持つフォームがあり、且つディレクトリの中身をリスト公開する設定になっている HTTP サーバー上でホストされる、すべてのサイトが攻撃の対象になり得ます。
この問題は Shinya Murakami と Jakub Herman の両氏により発見され、WPScan 経由で報告されました。
副作用
今回セキュリティを強化するために、一部のユースケースに影響を及ぼす可能性のある変更を導入する必要がありました。
実行可能なスクリプトファイルとして認識される恐れのあるファイル名をサニタイズする wpcf7_antiscript_file_name() は、従来のアンセーフリスト方式を置き換え、ファイル拡張子のセーフリストを使用します。アップロードされたファイルにセーフリストに含まれていない拡張子が付いていた場合、wpcf7_antiscript_file_name() は自動的に拡張子部分を安全な代替物に変換します。
By default, the safelist includes the following file extensions:
["3gp","3gpp","3g2","3gp2","aac","flac","mid","midi","mp3","m4a","m4b","ogg","oga","wav","x-wav","mka","wax","wma","ra","ram","avi","divx","mp4","m4v","mpeg","mpg","mpe","ogv","mov","qt","webm","flv","mkv","asf","asx","wm","wmv","wmx","avif","bmp","gif","heic","heics","heif","heifs","jpg","jpeg","jpe","png","tiff","tif","webp","ico","pdf","txt"]
You can customize this list using the wpcf7_file_extension_safelist filter hook, like the following:
add_filter( 'wpcf7_file_extension_safelist', function ( $safelist ) {
return array_merge( $safelist, ['zip'] ); // Adding .zip
} );
Another change was made to wpcf7_unship_uploaded_file(); its second $options argument is now mandatory, and a third $uploaded_files argument has been added. Although this function is not for daily use, and most users don’t even know it, if by any chance you call wpcf7_unship_uploaded_file() in your code, don’t forget to change the arguments.
Major changes
- Functions-PHP: Upgraded to 1.1.0.
- FormDataTree-PHP: Upgraded to 2.0.9.
- SWV-PHP: Upgraded to 2.0.8.
- Introduces the
wpcf7_file_extension_safelist()function and thewpcf7_file_extension_safelistfilter hook. - Improves
wpcf7_antiscript_file_name()with file extension safelist. - Applies
wp_scrub_utf8()to a target text before a regular expression pattern with theu(UTF-8) modifier is applied to it. - Improves
wpcf7_unship_uploaded_file()with the new third parameter ($uploaded_files) that is passed as a reference.
You can browse the complete list of changes on GitHub.
必要バージョン: WordPress 7.1 以上
テスト済み: WordPress 7.1.4 まで