ooooooo_qの日記

脆弱性の話とか

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

この記事はCalendar for Ruby | Advent Calendar 2021 - Qiitaの15日目です。

今年Ruby関連で見つけた、または公開された脆弱性のまとめです。


Ruby(CVE-2021-41819: Cookie Prefix Spoofing in CGI::Cookie.parse)

CVE-2021-41819: Cookie Prefix Spoofing in CGI::Cookie.parse

Rack/Rails側に報告されていたCookie parserの問題が他にもないか探して見つけたものです。ブラウザのcookieはhttpでの接続、サブドメインからまたはjsからも書き込みできますが、それを防ぐための仕様である CookiePrefixによってcookieが上書きされてないことを保証しようとしても、サーバ側でキーをデコードしている可能性があるものでした。とはいえCGIを使っているサーバで利用しているケースは少なそうです。

Gem in a Box のXSS

github.com

Gem in a Boxに登録するgemのメタ情報からのXSS。Gem in a Boxへのアップロード自体には認証がないので、XSSによって危険性が増すことはさほどなさそうという印象です。

Gitlab (Stored XSS in custom emoji)

hackerone.com

Gitlabの実験的機能でのXSS。GraphQL経由で登録する必要があったので多少面倒でした。

Gitlab (Reflected Cross-Site Scripting in Jira Integration)

GitLab Security Release: 14.3.1, 14.2.5, and 14.1.7 | GitLab

なぜかこの記事を書いている時点ではまだ詳細が公開されていません。XSSとしてはシンプルなものでした。

ThinのHTTP header injection

Fix possible HTTP Response Splitting by macournoyer · Pull Request #377 · macournoyer/thin · GitHub

RailsのActionableExceptionsの問題を調べているときに見つけて報告していたものです。詳細は徳丸さんの動画を見てください。

www.youtube.com

unicornにも同じ問題があってsnykを通して連絡してもらったのですが、そちらはnginxと一緒に利用することを想定しているので脆弱性としては扱われないとのことでした。

Rack/Rails Rack::Sendfile

hackerone.com

proxyがちゃんと設定されていない中でRack::Sendfileが使われているとまずいことが起こる可能性があるもの。これはRails7でRack::SendFileが外されることで対応される…という話でしたがまだ実装はされていないようです。

Ruby/Railsのデシリアライズまとめ本

zenn.dev

以前ブログに書いた記事をzennにも載せてみようという気持ちから書き始め、ついでだからと色々調べていたら1年弱かかってしまったもの。書くことよりも調べたり連絡することのほうが大変でした。

Pull request/Merge Requestのレビューの際、コメントで参考資料として使いやすいようにすることを意識して書いてました。

以下の2つは本を書いている途中で見つけたものです。

bundler-auditのYAMLファイル

github.com

bundler-auditの脆弱性データベースを読み込むとき、YAMLでデシリアライズできるクラスに制限がなかったのでRCE可能だったもの。 (その後Psych 4.0ではデフォルトの挙動がsafe_loadのものになりました)

Hanamiのセッション

hanamirb.org

hanamiのセッションはデシリアライズにMarshalが使われますが、開発時のsecretがコミットされてしまうことが組み合わさると、ややこしいことをするとRCEができてしまっていました。