[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】HPACKの可変長整数デコードのDoS脆弱性(GHSA-8v8h-hg4w-mvq2) 解説 [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

PythonのHTTP/2実装で、攻撃者が細工したヘッダーを送り、CPUを占有する問題が発生した。
  • python-hyper/hpack のデコード処理に、値とバイト数の上限チェックが欠如していた。
  • Pythonのintは任意精度整数であるため、オーバーフローせず巨大な数へと膨張する。
  • 巨大な整数に対する演算コストが $O(n^2)$ となり、計算量が爆発する。
  • 1リクエストで約1.5分のCPU時間を消費させることが可能であった。

// Approach

開発者は、デコード処理において読み取りバイト数に物理的な上限を設けることで、計算量の爆発を防止した。
  • hpack v4.2.0にて、VARINT_MAX_LENGTH = 5 を導入した。
  • デコード中のインデックスが5バイトを超えた時点で HPACKDecodingError を送出する。
  • HPACKの用途に対し、5バイト(約$2^{28}$)あれば十分な範囲をカバーできる。

// Result

hpack v4.2.0のリリースにより、計算量攻撃によるDoS脆弱性が解消された。
  • 攻撃者が1MBの入力を用いてCPUを約1.5分間占有させる攻撃を無効化した。
  • h2に依存するASGI/WSGIサーバーや、httpxを利用するクライアント環境の安全性が向上した。
  • ユーザーは uv pip install --upgrade hpack により迅速な対応が可能である。

Senior Engineer Insight

> 本件は「言語の特性」への理解不足が招いた典型的な脆弱性だ。CやGoのような固定幅整数を前提とした仕様を、Pythonのような任意精度整数の環境へ移植する際、型による暗黙の制約が消失する。設計者は、自言語の型が「どこまで膨張しうるか」を常に疑うべきだ。高トラフィック環境では、こうした計算量の微増が致命的なサービス停止に直結する。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。