Puma 7.2.1:PROXYプロトコルv1パーシングの脆弱性修正
Puma 7.2.1では、PROXYプロトコルv1のパーシングに存在する2つのセキュリティ上の問題が修正されました。細工された入力によるPROXYヘッダの悪用と、keep-aliveリクエストへのヘッダ注入という2つのリスクに対処しています。
背景
#3947 は、PROXYプロトコルv1の解析処理における2つの問題を報告し修正したPRです。PROXYプロトコルはロードバランサーがバックエンドサーバーにクライアントの実IPアドレスを伝えるために使われる仕組みで、Pumaはこのヘッダを受け取ってリクエスト情報に反映します。
パーシングの実装が不十分な場合、攻撃者が細工した入力を送り込んでPROXYヘッダの解釈を歪めたり(abuse)、keep-alive接続の後続リクエストにPROXYヘッダを注入(injection)したりできる可能性があります。これらが悪用されると意図しない動作を引き起こす可能性があるため、早急な修正が求められていました。
技術的な変更
今回の修正は#3947に含まれる2つの対策としてHistory.mdに記録されています。変更点は以下の2つです。
- PROXYプロトコルv1パーシングへの制限とアンカリング: 細工された入力による悪用を防ぐため、パーシング処理に長さ制限と入力境界の固定(アンカリング)が加えられました。
- 1接続につきPROXYプロトコルを1回のみ解析: keep-alive接続において後続リクエストにPROXYヘッダを注入する攻撃を防ぐため、接続ごとの解析を最初の1回に限定するよう変更されました。
バージョン文字列は lib/puma/const.rb 内の PUMA_VERSION および VERSION 定数が "7.2.0" から "7.2.1" に更新されています。
まとめ
Puma 7.2.1は、PROXYプロトコルv1の解析処理における入力検証の不備を修正したセキュリティリリースです。PROXYプロトコルを有効にして運用しているPuma環境では、本バージョンへのアップデートが強く推奨されます。