SAML Authentication Bypass Vulnerability
脆弱性の内容に関する 日本語解説はこちら。
で、実際に脆弱性が存在してた実装もみてみると、OneLogin 製の ruby-saml だと、該当の脆弱性はここで修正されてます。
Fix vulnerability CVE-2017-11428. Process text of nodes properly, ign… · onelogin/ruby-saml@048a544
この行 がまさにメインの修正箇所なんですが、いままで REXML::Element#text
呼んでいたものを、すべて REXML::Element#texts
を join
するように変更してますね。
でも、そもそもこれ署名検証の部分の修正が含まれてないのはなぜでしょう?
署名検証してるのはここ なんですが、これ、よくみると REXML
じゃなくて Nokogiri
使ってますね。REXML
には XML 正規化の機能がなかったから、その部分だけ Nokogiri
使ったんですかね。
なら全部 Nokogiri
使えや。
2つの XML Parser を1つの実装の中で混在させてる時点で、すごいやな香りしますよね。ruby-saml
は今回の脆弱性修正でも、その状況は変わってないので、Ruby で SAML 実装するなら libsaml
(digidentity/libsaml) に移行した方が良さそうですね。
ちなみに、OpenID Connect ならそんなことないのかっていうと、当然あります。ruby-jwt
と json-jwt
を混在させてる NIST の RP サンプル とかね。
ruby-jwt
に JWK まわりの機能がないから json-jwt
を JWK のためだけに使ってて、それ自体はまぁそんな悪い予感しないけど…
なら全部 json-jwt
使えや。