QA@IT

Strutsの脆弱性

4049 PV

http://www.atmarkit.co.jp/ait/articles/1404/24/news172.html

に「バージョン2.3.16.1での修正は不十分」で、
Struts1はサポートが完了していて対策なしのようです。

クラスローダーがリフレクションで生成されてしまうのなら、
そのパターンを除外するサーブレットフィルタを作ればよさそうと誰でも思いますが、
ありました。

http://www.mbsd.jp/img/testFilter.java

これが「暫定的」なのはパターンが甘いからでしょうか?
「外部からJavaコードを介して任意のコードが実行」されることを抑止する、
本格的しくみをつくるということなら先は遠そうですね。

回答

質問者です。

反響が大きいかと思いましたが、ここに限らずネット上でも大した話題になっていません。
原因を想像しますに、

  1. Struts2.3.16.3で正式対応された
    http://struts.apache.org/release/2.3.x/docs/version-notes-23163.html

  2. Strutsは2を合わせても世界シェアは1%程度で、終わっている。

  3. 日本でStruts1のシェアはまだ高いが、半分程度は脆弱性のないSAStrutsで書かれている。

  4. 生のStruts1を使っているのはイントラ内か官公庁サイトくらいで、困っていない。

  5. OpenSSLとか踏み台を介した侵入とかもっとひどい脆弱性があるので後回しになっている。

といったところでしょうか。

編集 履歴 (4)

2014-06-12 コメントにまとめました。

編集 履歴 (8)

これが「暫定的」なのはパターンが甘いからでしょうか?

暫定的なのは、公式な修正方法ではないからでしょう。
記事のリンクにあるMBSDやビットフォレストの対処は正式な修正ではなく眼前の問題を「とりあえず」防ぐにすぎません。

例えばトイレのドアが壊れていて鍵をかけても開いてしまう場合、
利用者が手でおさえておけばとりあえず開きません(暫定対処)が、
トイレの管理者がドアの鍵がかかるように直して正式な対処となるでしょう。

※ 公式な修正方法であっても、後日のしっかりした修正のために一時的に回避するための修正であればそれは暫定的といえます。

「外部からJavaコードを介して任意のコードが実行」されることを抑止する、
本格的しくみをつくるということなら先は遠そうですね。

こちらは暫定かどうかではなく付け焼き刃の修正に関する話ですね。
そもそも外部から実行するための機能ではないのに、
外部から実行される前提での対処しているので、付け焼き刃な対処に見えるというわけです。
フィルタリングによる修正パッチが正式に出されれば、それは暫定ではない修正と言えるでしょうが、付け焼き刃の修正とは言われるかもしれません。

編集 履歴 (1)
  • ご回答ありがとうございます。
    サーブレットフィルタは名前だけが全てなので、「暫定的」ですね。
    Spring Web MVCのように固有のBeanUtilsを作ってClassLoaderをはじけば良いのでしょうか。
    https://github.com/spring-projects/spring-framework/blob/master/spring-beans/src/main/java
    -
  • あまり言葉についてばかり話すのもあれですが、どのように対処しようとも公式・正式でなければ「暫定的」ですよ。対処方法が優れているかどうかではなくて、「暫定」というのは臨時のような意味合いなので。 -
  • 公式・正式でなければ「暫定的」、了解しました。
    サポートの切れたStruts1を日本のベンダがどういう対策を打つのか興味があります。BeanUtilsのパッチ、RequestProcessor拡張、apache mod_securityのどれを選ぶのか、併用するのかといったことです。
    -
  • どれが良いのか述べられるほど明るくありませんが、SAStrutsがClassLoader問題の影響を受けないと公表していてStruts1ベースのようなので、これも選択肢にあがってくるかもしれませんね。 -
  • SAStrutsは日本のStruts界の中で1/3程度のシェアがあるとどこかで読んだ気がします。http://d.hatena.ne.jp/newta/20090506/1241622781
    が面白いですが、Struts1のXMLをSeaser2のアノテーションに変換してくれるツールがあるとうれしいですね。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。