本文へ移動
情シスのミカタ
ニュース約4分で読めます

OpenTelemetry Pythonに脆弱性 長いヘッダーで処理が止まる 1.45.1へ

観測の仕組みOpenTelemetryのPython版の部品opentelemetry-apiに、要求のヘッダーtracestateの読み取りに時間がかかりすぎる脆弱性CVE-2026-114603(Medium)が見つかりました。1.45.0以前が対象で、1.45.1で直っています。認証なしの要求1つで、処理が数秒止まることがあります。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
OpenTelemetry Pythonに脆弱性 長いヘッダーで処理が止まる 1.45.1へ

この記事のまとめ

  • OpenTelemetryのPython版のopentelemetry-apiで、要求のヘッダー「tracestate」を読む処理が、空白の多い長い値に対して二乗に比例する時間をかけていました。CVE-2026-114603で、深刻度はMedium(CVSS 5.3)です。
  • 勧告によると、約100KBのtracestateを1回送るだけで、処理が約6〜12秒止まります。非同期のサーバーでは、その間ほかの接続もすべて待たされます。
  • 対象は1.45.0以前で、2021年3月の1.0.0から同じ作りでした。1.45.1は、読み方を直し、8192文字を超えるtracestateを捨てるようにしています。
  • トレースを取っているPythonのWebのアプリで1.45.1以降に上げ、前に置く仕組みでヘッダーの大きさに上限があるかを確かめます。
こんな方に#20代#30代#40代実務

アプリの動きを見るために入れた観測の仕組みが、サーバーを止める入口になっていました。OpenTelemetryのPython版の部品opentelemetry-apiに、脆弱性CVE-2026-114603が見つかりました。要求に付く「tracestate」というヘッダーを読む処理が、空白を多く含む長い値に対して、とても時間がかかります。深刻度はMedium(CVSS 3.1で5.3)です。

対象は1.45.0以前で、1.45.1で直っています。1.45.1は2026年10月6日に公開され、プロジェクトの勧告は10月12日に、GitHubの勧告のデータベースには10月23日(日本時間)に載りました。

GitHub Advisory DatabaseのCVE-2026-114603のページ。題はOpenTelemetry Python: Unbounded tracestate parsing in opentelemetry-api。深刻度はModerate、CVSS 3.1で5.3。パッケージはopentelemetry-api(pip)、影響する版は1.45.0以下、直った版は1.45.1。概要では、受け取ったW3Cのtracestateのヘッダーを長さの上限なしに正規表現で分けるため、空白やタブが続く値で二乗の時間がかかり、約100KBのtracestateを1回送るとワーカーが約6〜12秒ふさがり、asyncioのサーバーではほかの接続も止まると説明している。
GitHubの勧告。1.45.0以前が対象、1.45.1で修正出典: GitHub Advisory Database「GHSA-xcq7-p3pf-p88h」(引用)

なぜ処理が止まるのか

OpenTelemetryは、サービスをまたいで処理の流れ(トレース)を追うため、要求のヘッダーで情報を引き継ぎます。tracestateは、その引き継ぎに使うW3Cの決まりのヘッダーの1つです。

勧告によると、opentelemetry-apiは、tracestateを区切るための正規表現で、長さを確かめないまま値を分けていました。空白やタブが続いてコンマが来ない値だと、読む時間が値の長さの二乗に比例して増えます。勧告の測り方では、長さが2倍になるたびに時間が約4倍になりました。

tracestateの長さ 1つの要求の処理の時間(勧告の測定)
1万文字 約0.06秒
4万文字 約1秒
8万文字 約4秒
約100KB 約6秒(空白)〜約12秒(タブ)

認証は要らず、要求を1回送るだけで起きます。非同期(asyncio)で動くサーバーでは、その間ほかの接続もすべて待たされます。形の合わない値は、警告のログにそのまま全部書き出されるため、ログも膨らみます。

どこから届くか

勧告は、既定の設定(環境変数OTEL_PROPAGATORSの既定はtracecontext,baggage)で、要求を受けるサーバー側の計測が引き継ぎの情報を読むときに届くとしています。例として、ASGIのアプリの計測(opentelemetry-instrumentation-asgi)を挙げています。同じ作りは、2021年3月の1.0.0からありました。

前に置くWebサーバーがヘッダーの大きさを制限していれば、届く前に断られます。勧告の試験の結果は次のとおりです。

Webサーバー 長いtracestateの扱い(勧告の試験)
gunicorn 8190バイト以上は断る(431)
uvicorn(h11) 16KiBを超えると断る(400)
waitress 256KiBまで通す
uvicorn(httptools。uvicorn[standard]の既定) 20MBまで通した

8KiBのヘッダーでも約0.07秒、16KiBで約0.25秒かかるため、上限が16KiBでも、繰り返し送られれば負荷になります。

1.45.1は、読み方を直したうえで、8192文字を超えるtracestateを捨てるようにしています。同じ部品の別の引き継ぎの仕組み(baggage)には、もともと8192バイトの上限がありました。

影響する会社・しない会社

  • 影響する: PythonのWebのアプリやAPIで、OpenTelemetryのサーバー側の計測を入れ、opentelemetry-apiの1.45.0以前を使っている会社。とくに、uvicorn[standard]で動かすFastAPIなどのASGIのアプリ
  • 確かめる: 社外から要求を受けるサービスで、前にリバースプロキシやロードバランサーを置いている会社。そこでヘッダーの大きさに上限があるかで、届くかどうかが変わります
  • 影響しない: OpenTelemetryを入れていない会社、Python以外の言語の版だけを使っている会社。今回の勧告はPython版のopentelemetry-apiが対象です

情シスが今日やること

  1. 入っている版を調べます。 PythonのWebのアプリの環境で pip show opentelemetry-api などを実行し、版を一覧にします。計測の自動化の道具が、意図せず入れていることもあります。
  2. 1.45.1以降に上げます。 opentelemetry-apiを1.45.1以降にし、アプリを再起動します。opentelemetry-sdkや計測の部品も、同じ系列にそろえます。
  3. ヘッダーの上限を確かめます。 前に置くリバースプロキシ、ロードバランサー、WAFで、要求のヘッダーの大きさに上限があるかを確かめます。上げるまでの間の守りになります(当社の見立て)。
  4. ログの量を見ます。 形の合わないtracestateは警告のログに全部書かれます。警告のログが急に増えていないか、ログの保存の容量に余裕があるかを見ます。

よくある質問

Qトレースを外に送っていなくても影響しますか。

A勧告によると、問題は受け取った要求のtracestateを読む処理にあり、既定の設定(OTEL_PROPAGATORSがtracecontext,baggage)で、要求を受けるサーバー側の計測(例えばASGIの計測)から届きます。トレースの送り先の有無ではなく、受け取った要求を計測しているかどうかが問題です。

QWebサーバーのヘッダーの上限で防げますか。

A勧告の試験では、gunicornは8190バイト以上のヘッダーを断り、uvicornのh11は16KiBを超えると断りました。一方、uvicorn[standard]の既定のhttptoolsは20MBのtracestateも通し、waitressは256KiBまで通しました。使っているサーバーで変わります。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月25日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします