ひがやすを技術ブログ

電通国際情報サービスのプログラマ

StrutsのClassLoader脆弱性はSAStrutsに影響しません

Struts2に見つかった脆弱性と同様の脆弱性がStruts1系にも見つかりました。
Apache Struts 2の脆弱性が、サポート終了のApache Struts 1にも影響


HTTP(S)のリクエストでJavaのClassLoaderのメソッドが呼び出せてしまうという脆弱性です。


もう少し噛み砕いて言えば、リクエストのパラメータをJavaBeansにセットする時に、リフレクションを使い、パラメータ名にaaa.bbb.cccのようなネストした名前をサポートしているフレームワークは同様の問題が起こる可能性があります。
パラメータ名をclass.classLoader.xxxのような感じにして、ClassLoaderのメソッドを呼び出す訳です。


このような問題を起こすリフレクションフレームワークで最も有名なのは、Apache Commons BeanUtilsです。リクエストのパラメータをBeanUtilsを使って、JavaBeansにセットしているフレームワークは、Strutsに限らず同じことが起きると思います。


SAStrutsは、リクエストパラメータをJavaBeansにセットするのに、BeanDescという独自フレームワークを使っていて、BeanDescはclassプロパティにアクセスできないようになっているので大丈夫です。
これは、小林さんがTwitterで言っている通りです。
https://twitter.com/koichik/status/459277890824052736


Seasar2系のWebフレームワークで、リクエストパラメータをJavaBeansにセットするのに、BeanDescを使っているなら、SAStrutsと同様に大丈夫です。独自もしくは、BeanUtilsを使っているWebフレームワークは、至急確認をしてください。


リクエストパラメータをJavaBeansにセットするのに、BeanUtilsではなく、OGNLを使っているプロジェクトも危険です(だと思う)。これが元々Struts2で指摘されていた問題です。