お使いの ColdFusion バージョンのパッチを次の場所からダウンロードします。
- ColdFusion(2023 リリース)(MD5:238e77125baf0e139bc7681a47b8e24bb6605e40)
- ColdFusion(2021 リリース)(MD5:91d06c0a185634ac30f2bafceaaba330)
ColdFusion シリアルフィルターを使用すると、Java クラスまたはパッケージで WDDX パケットを逆シリアル化できるようになります。
cfserialfilter.txt ファイルは、安全でない WDDX 逆シリアル化に起因する攻撃を確実に防ぎます。一方、既存の serialfilter.txt では、Java の逆シリアル化を特定の Java クラスまたはパッケージに禁止することで、ブロックします。
セキュリティ対策として、ColdFusion の正常な動作に必要ないくつかのクラスを除き、ColdFusion 内部クラスの WDDX 逆シリアル化が禁止されました。
デフォルトでは、ColdFusion が逆シリアル化を許可しているパッケージは次のとおりです。
java.util.Locale;java.util.Collections$EmptySet;java.util.HashMap;coldfusion.server.ConfigMap;coldfusion.util.FastHashtable;coldfusion.saml.SpConfiguration;coldfusion.saml.IdpConfiguration;coldfusion.runtime.CaseSensitiveStruct;coldfusion.scheduling.mod.ScheduleTagData;coldfusion.runtime.ArgumentCollection;coldfusion.util.CaseInsensitiveMap;coldfusion.runtime.AttributeCollection;coldfusion.sql.QueryTable;coldfusion.archivedeploy.Archive;coldfusion.scheduling.ScheduleTagData;coldfusion.osgi.to.ScheduleTagTO;
cfserialfilter.txt を使用すると、クラスの許可リストをカスタマイズできます。
上記で指定したクラス以外のクラスはすべて、逆シリアル化がブロックされ、同じクラスが wddx.log に記録されます。
serialfilter.txt で ColdFusion が逆シリアル化をデフォルトで禁止しているパッケージは次のとおりです。
!org.mozilla.**;!com.sun.syndication.**;!org.apache.commons.beanutils.**;!org.jgroups.**;!com.sun.rowset.**;
cfserialfilter.txt で逆シリアル化が禁止されているパッケージやクラスをアプリケーションで使用する場合、アプリケーションは想定どおりには動作せず、<CF_HOME>/logs/wddx.log にエラーが記録されます。
セキュリティ上の理由により、com.sun.rowset.JdbcRowSetImpl は逆シリアル化がブロックされます。このクラスまたはパッケージを cfusion/lib/cfserialfilter.txt ファイルに追加すると、この動作がオーバーライドされ、逆シリアル化が可能になります。
お使いの ColdFusion バージョンのパッチを次の場所からダウンロードします。
ダウンロードしたファイルを <CF_HOME>/lib/updates にコピーし、ColdFusion を再起動します。
アプリケーションを実行します。
パッケージまたはクラスのリストが <CF_HOME>/logs/wddx.log ファイルに記載されています。
パッケージやクラスのリストを取得した後、パッチを削除します。
アップデートを適用する場合は、次の手順を実行します。
アップデートを適用します。
特定されたパッケージやクラスの逆シリアル化の脆弱性がパブリックドメインで報告されている場合は、それらのパッケージやクラスを許可リストに追加しないことをお勧めします。
<CF_HOME>/lib にある cfserialfilter.txt ファイルを開きます。
クラスまたはパッケージに逆シリアル化を許可する場合は、そのクラスまたはパッケージを次の形式で追加します。
パッケージまたはクラスがリストされる順序が重要になります。例えば、java.util.**, パッケージに許可したうえで、さらにそのパッケージ内のクラス java.util.Date; をブロックするには、!java.util.Date;java.util.**; と指定します。この例で順序が逆になっていると、デフォルトで、パッケージ内のすべてのクラスが許可されます。
ColdFusion を再起動します。