Struts1.xの脆弱性(CVE-2014-0114) に対するSDEの対処:推奨タイプ (サンプルソースコードの公開) 日本電気株式会社 2014年6月17日 対処内容の概要 ▐ BeanUtilsを利用した変数コピー処理に対して、拡張機能(override) を利用して操作しているメソッド(populate)内でチェック処理を追加 し、問題のあるパラメータを排除します。 web.xml ※監視のために排除時に双方式ともエラーログを出力します。 ServletContextListener ServletContextListener ブラウザ StrutsV1.x リクエスト リクエスト abc=123 class.ClassLoader.xxx=yyy 通常のリクエスト「abc=123」 以外に 「class.ClassLoader.xxx=yyy」 を付加して送信 abc=123 class.ClassLoader.xxx=yyy setAbc(“123”) getClass().getClassLoader().setXxx(“yyy”) populate() エラーログを出力 BeanUtilsBean.populate setAbc(“123”) Formクラス © NEC Corporation 2014 パラメータ排除 setAbc(“123”) getClass().getClassLoader().setXxx(“yyy”) BeanUtils呼び出し処理 Public void setAbc(String abc){ this.abc = abc; } Page 2 Inner Class SampleBeanUtilsBean 適用要件および注意事項(1/2) ▐ 本対処を適用した場合、リクエストパラメータの属性名(一部を含 む)に対して「class」あるいは「Class」という単語を含むことが できなくなります。該当の属性名を使用している場合は、属性名の 見直しをお願いします。 Grepツールの仕様 チェック用正規表現 \W(英数字および”_”以外)をサポート (^|\W)[cC]lass\W \Wを未サポート (.*\.|^|.*|\[('|"))(c|C)lass(\.|('|")]|\[).* ▐ チェック対象となる文字列例を下記に記載いたします。 チェック対象外の文字列 • classic • FirstClass チェック対象の文字列 • .Class. Page 3 © NEC Corporation 2014 適用要件および注意事項(2/2) ▐ 以下のメソッドの動作が変更されるために、該当メソッドに依存す る機能がある場合は影響調査する必要があります。 org.apache.commons.beanutils.BeanUtils#populate(Object bean, Map properties) 具体的には、引数properties中に“class”または“Class”が含まれる キー属性のエントリーは引数beanに対して移送処理が行われなくな ります。本条件に該当しない場合、本回避策による影響はございま せん。 Page 4 © NEC Corporation 2014 適用手順 ① 本対処を実現したソースコードを実装する ※実装サンプルは下記にて公開しています。 ★http://jpn.nec.com/SystemDirectorEnterprise/dl/notice/SampleServletContextListener.java ② web.xml の web-app.listener 要素に Servletコンテキストリスナの設定を 追記する ③ ビルド・デプロイを実施する Page 5 © NEC Corporation 2014 テスト実施手順 GETメソッドの場合 ▐ 正常動作する画面のURLに「?class.ClassLoader.xxx=yyy」を付加して実行 例:正常に動作するURL「http://localhost/Sample/TestAction.do」の場合 「http://localhost/Sample/TestAction.do?class.ClassLoader.xxx=yyy」をブラウ ザで表示 ▐ 上記URLを実行した場合に正常に画面が表示され、ログファイルに以下の文 字列が出力されるかを確認 「malicious access detected, key = class.ClassLoader.xxx value = yyy」 POSTメソッドの場合 ▐ 正常動作する画面に以下のhidden項目を追加 <input type=“hidden” name=“class.ClassLoader.xxx” value=“yyy”> ▐ 上記画面を実行した場合に正常に画面が表示され、ログファイルに以下の文 字列が出力されるかを確認 「malicious access detected, key = class.ClassLoader.xxx value = yyy」 Page 6 © NEC Corporation 2014
© Copyright 2024 ExpyDoc