Scala標準ライブラリのscala.xml.XML.loadStringなどを直接使うとXXE(XML External Entity)という脆弱性になるので気をつけましょう

liftというweb frameworkのメーリングリストで「ちょっとセキュリティの問題見つかってリリースしたから、アップデートしてくれ」というのが2015/3/16 (月曜)頃に流れてくる
https://groups.google.com/d/topic/liftweb/NSXpg778Oos/discussion

脆弱性の詳細はすぐには明かされなかった。つまり深刻なの?lift以外にも影響あるの?(それを匂わせるような書き方)
金曜くらいには発表するとある。わざとgithubにも該当のtagはpushされてないようだ

つい先ほど「詳細マダー?」「DPPがblog書いたらしいよ」
http://blog.goodstuff.im/lift_xxe_vulnerability

というわけで、詳細でました。XXEググると、日本語だと、(わりと古いけど)以下のblogが詳しくわかりやすかったです

XMLをparseするアプリのセキュリティ

おそらくloadStringだけじゃなく、loadとか似たようなメソッド全部ですね。

で、play framework2だと2.2.0以降大丈夫っぽいですが、2.1.xは危ないかも?(以下のコミット参照)
https://github.com/playframework/playframework/commit/dc94b943ee5dc
https://github.com/playframework/playframework/commit/8564706a25036


脆弱性対策としては、DPPも言ってるように、上記のコミットのplayのコード真似しましょう。(でいいのかな?)

liftでの該当コミット

で、その他は


https://groups.google.com/d/topic/scalatra-user/HHT8j1HWha8/discussion せらさんが対応して、すぐに新しいversionでたようです


その他、独自にscala.xml.XMLの「loadほげほげメソッド」を(外部の信用出来ないかもしれない)箇所からxml読み込む方法として使用してる場合は、きちんと対策しましょう。


Scala標準ライブラリ側でも(別メソッド用意とかで?)対策するのだろうか
https://github.com/scala/scala-xml/issues/17

*1:あくまでも適当なので、あまり信用しないでください