Geeks)企業システムの企画・開発に携わる技術者集団のブログです。開発言語やフレームワークなどアプリケーション開発に関する各種情報を発信しています。ウルシステムズのエンジニア有志が運営しています。この広告は、90日以上更新していないブログに表示しています。1の脆弱性問題の対処方法を紹介する。この問題は、4月24日に株式会社ラックによって以下のように報告された。http://www.lac.co.jp/security/alert/2014/04/24_alert_01.htmlServletFilterによる対処では、multipart/form-dataに対応できない。上記報告に記載されている不正な文字列がパラメータに含まれる場合(正規表現:「(^|\W)[cC]lass\W」に合致するパラメータ名が含まれる場合等)にリクエストを拒否するフィルタ機能を実装するという方法は、リスク軽減策としては有効だ。あるサブミット情報が来た場合は防ぐことができない。問題の本質Strutsのセキュリティ問題の多くは、本質的にはサブミット情報をActionFormオブジェクト配下のオブジェクトツリーに反映する際に発生する。今回のClassLoader操作に関しても、そういった攻撃パターンの1つである。過去には、ActionFormオブジェクト配下のオブジェクトツリーに存在する、MultipartRequestHandlerやServletオブジェクトも攻撃の標的になったこともある。そのため、本質的にはActionFormオブジェクト配下のオブジェクトツリーに対するアクセスを制限することが、セキュリティ対策には重要となる。要するに、ActionFormオブジェクト配下のオブジェクトツリーは、インターネットから(サブミット情報によって)自在に操作可能であるため、そこに制限を加える必要があるのだ。修正し、ActionFormオブジェクト配下であっても、特定の型のオブジェクトには触らせないようにする修正を行った。「特定の型」に含めたのは、以下のクラス群である。java.lang.Classjava.lang.ClassLoaderjavax.servlet.Servletorg.apache.struts.upload.MultipartRequestHandlerこれらの型が、ActionFormオブジェクト配下のオブジェクトツリーの中間ノードや末端ノードに来た場合、不正とみなしてエラーとする。チェックロジックは以下の通り。セキュリティ上、操作すべきではないクラスを扱っていないかを検査する。禁止するクラス名を設定する。チェックロジック本体。}}このチェックに引っかかった場合は、以下の例外を発生させる。セキュリティ上、操作すべきではないクラスを扱っている場合に発生。}}このようなチェックをする場所は、org.apache.commons.beanutilsパッケージのPropertyUtilsとなる。Strutsが常に呼び出すメソッドはgetNestedPropertyであるため、少なくともこのメソッドにチェックロジックを埋め込む必要がある。getNestedPropertyに対するチェックロジックは以下の通りだ。}なお、PropertyUtilsには他にも多くのメソッドがあり、このようなチェックを行うべき箇所がいくつかある。以下のメソッドに対しては、チェックを埋め込むことをお薦めする。getNestedPropertysetNestedPropertyS2-020と類似のStruts1の脆弱性によって、任意のJavaコードが実行可能なのか?Tomcat8であれば、残念ながらYESだ。Tomcat8のクラスローダーは、WebappClassLoaderというカスタムクラスローダーとして実装されており、このクラスローダーは、引数なしのgetResourcesメソッドを提供している。Tomcat8では、このオブジェクトツリー配下を辿って行くことで、Tomcatのアクセスログファイルを通常のJSPとして認識させ、任意のJavaコードをJSPのスクリプトレットとして実行する所まで持ち込むことが可能だ。Tomcat8以外のAPサーバーのリスクに関しては、ClassLoaderの作り次第となる。各APサーバーは標準のjava.lang.ClassLoaderを継承し、カスタムクラスローダーを作ってあるはずだが、そこでTomcat8のようなpublicメソッドを提供しているかどうかに依存する。Beanのインジェクション前回は、CDIの定義方法を解説した。アクターモデルとAkkaの概要XP祭り2016でエンタープライズへのアジャイル開発の導入事例を講演Cloud9の概要プロフィールid:enterprisegeeks企業システムの企画・開発に携わる技術者集団です。開発言語やフレームワークなどアプリケーション開発に関する各種情報を発信しています。ウルシステムズのエンジニア有志が運営しています。月別アーカイブはてなブログをはじめよう!enterprisegeeksさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。