2024年3月にリリースされた ColdFusion 2023 Update 7 / 2021 Update 13では、スコープ インジェクションの脆弱性に対処する重大な変更が含まれました。
これまでのColdFusionは、スコープが指定されていない変数(「#URL.変数名#」や「#Form.変数名#」ではなく、ただ「#変数名#」と記述した)の参照については、以下のページの「スコープが指定されていない変数の評価」の順に従って変数を探し、見つかり次第、そのスコープの変数を参照していました。
https://helpx.adobe.com/jp/coldfusion/developing-applications/the-cfml-programming-language/using-coldfusion-variables/about-scopes.html
内、「スコープが指定されていない変数の評価」を参照
また、ColdFusion 2016からは、Application.cfc のアプリケーションレベルの変数(This.searchImplicitScopes)や主にApplication.cfmで使用する<cfapplication>タグにsearchImplicitScopes属性が追加され、CGI・URL・Form・Cookie・File・Client変数については、変数を検索するかどうかを指定することもできるようになりましたが、これまでデフォルトは「True」(それら変数の検索を行う)となっていました。
https://www.samuraiz.co.jp/coldfusion/faq/dl/ColdFusion2016_seminar.pdf#page=35「Adobe ColdFusion2016最新機能のご紹介」のP.35を参考にしてください。
2024年3月以降にリリースされたUpdateを適用した後は
スコープが指定されていない「CGI変数」「URL変数」「Form変数」「Cookie変数」「File変数」「Client変数」については変数を探さない
Application.cfcのthis.searchImplicitScopesや<cfapplication>タグのsearchImplicitScopes属性を指定しなかった時のデフォルト値が「False」(それら変数の検索を行わない)に変更
となりました。
そのため、2024年3月以降にリリースされたUpdateを適用した後は、プログラム内にスコープを指定しない「CGI変数」「URL変数」「Form変数」「Cookie変数」「File変数」「Client変数」
を参照している箇所がある場合は、UndefinedElementExceptionや変数 {xx} は未定義ですのエラーが発生するようになります。
このエラーに該当する場合は、以下のいずれかの方法にて対応を行ってください。
開発元のアドビでは、スコープ インジェクションの脆弱性を防ぐために、プログラム上のエラーとなった変数にスコープを付ける( searchImplicitScopes は FALSE のまま、問題が発生した場合はプログラムを修正する)ことを強く推奨しています。
ただし、プログラムの修正範囲が多いなど、すぐに対応できない場合に備え、以下のどちらかの方法で以前の動作に戻す方法も用意されています。
その他(2024.4.4、および 2024.4.12 追記):
開発元のアドビでは、スコープが指定されていないCGI変数、URL変数、Form変数、Cookie変数、File変数、Client変数に対するプログラムの修正を支援する目的で、暗黙的に参照しているそれら変数をunscoped.logに書き出すパッチを公開しました(2024.4.12追記→)パッチの内容が更新されてログに出力される情報が増えました。初期パッチを使用している方は以下のページからパッチを再ダウンロード・再適用してください
。
https://helpx.adobe.com/coldfusion/kb/view-unscoped-variables-log-file.html
View unscoped variables in a log file
※ブラウザの翻訳機能などをご利用ください
上記のページ内からダウンロードできるパッチファイル(cf2023: hf202300-8888888.jar, cf2021: hf202100-9999999.jar)を、[cf_root]/{インスタンス(cfusion等)}/lib/updates ファルダ内に配置し、ColdFusionを再起動してください。
本パッチは、ColdFusion 2023 Update 6、または、2021 Update 12以降で動作します(ColdFusion 2023 Update 7 や 2021 Update 13では、以前の動作に戻している場合に動作します)。unscoped.logに書かれているログの内容については、上記のページをご確認ください。
(補足)
ログに書きだされるページはリクエストしたページとなり、変数が記載されているページではありません。例えばtemplate.cfmに暗黙的な変数の参照が書かれていて、index.cfmをリクエストした際にtemplte.cfmファイルをインクルード(<cfinclude>)している場合、ログにはindex.cfmと書き出されます
カスタムタグやcfcを呼び出した先で対象の暗黙的な変数の呼び出しがあった場合も同様です(2024.4.12 追記)パッチが更新されました。更新されたパッチを使用するとunscoped.logに書き出されるログに以下の改善が行われます。
- 暗黙的に呼び出した変数の名前に加えてスコープもログに記載されるようになりました。
- (更新前)~略~,"C:\xxxxxx\cf_tag.cfm:TEST"
↓
(更新後)~略~,"C:\xxxxxx\cf_tag.cfm:TEST,scope:FormScope
"- <cfinclude>でインクルードしたページや、カスタムタグ・cfcの呼び出し先に対象の変数が記載されている場合、対象のページがログに記載されるようになりました。
- (呼び出し先のCFCのメソッド内で対象の変数があった場合)
~略~,"C:\xxxxxx\url_test.cfc
:TEST,scope:UrlScope"- (カスタムタグ内で対象の変数があった場合)
~略~,"C:\ColdFusion2023\cfusion\CustomTags
\ctest.cfm:TEST,scope:UrlScope"
- なお、上記のページの末尾にも記載されていますが、対象となる変数が多ければ多いほど、対象のページへのアクセスが増えれば増えるほど、ログに書き込まれる量も頻度も増えるため、パッチを適用しない場合に比べてパフォーマンスが下がる可能性があります。ですので、本番環境にパッチを当てっぱなしにするよりかは、期間を絞って一時的にパッチを配置する(配置したパッチファイルを削除すればログの出力は止まります)か、テスト環境等に入れて確認することが適していると思います。
記事公開日:2024年04月04日
最終更新日:2024年04月12日
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.
Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.