SAML Authentication Bypass Vulnerability

Author: Nov Matake
Date:

脆弱性の内容に関する 日本語解説はこちら

で、実際に脆弱性が存在してた実装もみてみると、OneLogin 製の ruby-saml だと、該当の脆弱性はここで修正されてます。

Fix vulnerability CVE-2017-11428. Process text of nodes properly, ign… · onelogin/ruby-saml@048a544

この行 がまさにメインの修正箇所なんですが、いままで REXML::Element#text 呼んでいたものを、すべて REXML::Element#textsjoin するように変更してますね。

でも、そもそもこれ署名検証の部分の修正が含まれてないのはなぜでしょう?

署名検証してるのはここ なんですが、これ、よくみると REXML じゃなくて Nokogiri 使ってますね。REXML には XML 正規化の機能がなかったから、その部分だけ Nokogiri 使ったんですかね。

なら全部 Nokogiri 使えや。

2つの XML Parser を1つの実装の中で混在させてる時点で、すごいやな香りしますよね。ruby-saml は今回の脆弱性修正でも、その状況は変わってないので、Ruby で SAML 実装するなら libsaml (digidentity/libsaml) に移行した方が良さそうですね。

ちなみに、OpenID Connect ならそんなことないのかっていうと、当然あります。ruby-jwtjson-jwt を混在させてる NIST の RP サンプル とかね。

ruby-jwt に JWK まわりの機能がないから json-jwt を JWK のためだけに使ってて、それ自体はまぁそんな悪い予感しないけど…

なら全部 json-jwt 使えや。

Comments