ooooooo_qの日記

脆弱性の話とか

RubyやRubyのOSSの脆弱性を見つけた話の続き

この記事はRuby Advent Calendar 2019 - Qiitaの24日目です。


去年(RubyやRubyのOSSの脆弱性を見つけた話 - ooooooo_qの日記)と同様にRuby関連で今年見つけた脆弱性の話です。

Ruby

CVE-2019-16255: Shell#[]およびShell#testのコード挿入脆弱性

hackerone.com

脆弱性なのか判断に迷うもの。 引数が.sendにそのまま渡されるので値によってはコードが実行できるものでした。 .sendを使って実際に攻撃できるパターンが有るのか、Rubyのコードの中を調べて見つけた覚えがあります。

CVE-2019-15845: File.fnmatch の NUL 文字挿入脆弱性

hackerone.com

またNul文字。さすがにRubyではもうNul文字の問題はないのではないでしょうか。多分。

Pathnameでのコマンドインジェクション

hackerone.com

Ruby 2.6までのPathnameFileと同様にIOのクラスを継承していたため、.readなどのメソッドに値が渡されるとき、先頭の文字が|の場合にはコマンドが実行できました。 これも脆弱性か仕様なのか微妙なところですが、報奨金をいただけました。

Rubygems

CVE-2019-8320 symlinkを使ったディレクトリの削除

hackerone.com

重複になった報告の修正漏れでした。gemの解凍しようとすると全く関係ないディレクトリの中身が消えます。rubygemsのtarの解凍の仕方はちょっと特殊ですね。

ESCAPE SEQUENCE INJECTION * 4 (CVE-2019-8321,CVE-2019-8322, CVE-2019-8323, CVE-2019-8325)

blog.rubygems.org

実際のところ現在ではescape sequence injectionが影響あるようなターミナルは存在しないのでは、とも思っていたんですがitermでは印刷ダイアログが出せるようです(iTerm2 で `cat /dev/urandom` すると印刷ダイアログが出ることがある - mizdra's blog)。まだ知られていないことがあるかもしれません。

Rails

MarshalからのObject injectionとCVE-2019-5420

hackerone.com

詳細はRailsの上で走る - ooooooo_qの日記の方に書いたのでそちらを。

Discourse

hackerone.com

昨年と同じくDiscourseにも2つほど。どちらもファイルアップロード経由でのXSSでした。*1

github.com

アップロードされたらファイルのダウンロード時に、Content-Dispositionの値をinlineに変更できてしまったので、そのままXSSとなりえたものです。

github.com

SVGのアップロード時にはXSSになりそうなタグが除去されていたんですが、イベントハンドラが使えてしまったもの。

感想

今年はお金が出るところばかり探していたのが反省点です*2。あとRailsの情報をどこまで出していいのか探り探りで疲れましたね…。

少し順位が上がりました。

*1:1/5にコミットへのリンクなど追記。

*2:その割には去年より少ない