rack2.0.7の脆弱性の話


先週、プライベートのrailsのgithubレポジトリからrackに脆弱性が見つかったから対応してねと連絡が来ました。

設定した覚えなかったけどgithubでこういう設定をしていたらしい

low severity とありますが、影響範囲おおきそうなのでどのような脆弱性なのか調べてみました。

どういう脆弱性か

Possible Information Leak / Session Hijack Vulnerability
https://github.com/rack/rack/security/advisories/GHSA-hrqr-hxpp-chr3

攻撃者が有効なsession_idを予測できちゃうかもよというもの

原理

session_idをDBやRedisに格納している場合、ストレージを検索するときにかかった時間から、どの程度有効なsession_idと近かったのかわかってしまう

例: 15文字のIDだった場合、9文字一致している場合と全く一致していない場合で時間が異なる
かかる時間を計測することで、総当たりより短い時間で有効なsession_idを割り出すことが可能

※ストレージとSession IDの照合を行わないのでcookie sessionの場合は関係ない

rackがアップデートでおこなった対応

格納するときと取り出すときにsession_idをhash化することで、検索の時間とマッチ度合いの相関をなくした

  • 既存のsessionとの兼ね合い
    • hash化したもので検索して該当するものがなかったら、もとのsession_idで検索する
    • 該当部分のコード

各サービスのエンジニアが行うべき対応

  • rackのバージョンを上げる
  • railsのバージョンを上げる
  • 必要に応じてその他ライブラリの対応を待つ&バージョン上げる

railsも対応が必要

railsもrackをそのまま使っているわけではないので、その対応が入ったバージョンに上げる必要あり

その他ライブラリ

sessionストアをrails公式のものじゃない機構を使っている場合は、そのライブラリのアップデートを待つ&入れる必要あり
例: redis-rails