日本
The Morning Dev

知っておくべきことだけを、毎朝

‹
 
A63/100

インシデント · 中

pytest失敗時にAPIキーが表示される問題

ティアA · 今日中にパッチ – 帰る前に対応

影響を受ける人: pytestで認証ヘッダーを比較するテストを実行する開発者

ティアAの理由: 基幹インフラまたは人気ツール かつ シークレットの流出

影響範囲

攻撃

被害

修正

人気ツール · シークレットの流出

取るべき対応

  1. テストのassertで認証ヘッダーなどのシークレットを直接比較しない形に見直す
  2. -l(--showlocals)を付けた実行で、ローカル変数にキーが含まれていないか確認する

要点

  • pytestは失敗したassertの比較対象をそのまま表示するため、ヘッダーのdictを比較すると「Authorization: Bearer <キー>」が失敗ログに出た
  • -l(--showlocals)を付けると、比較と関係のないローカル変数まで表示される
  • 記事は実機での確認結果としてこの挙動を報告している

なぜ重要か

テストの失敗ログにAPIキーなどのシークレットが含まれ、CIログや共有ログから漏えいするおそれがあるため、assertの書き方とログの扱いを見直す必要がある。

ティアの根拠となったチェックリスト

チェックリスト · 10項目中3項目が「はい」
はい開発者に影響開発者がテストに使うpytestの挙動に関する問題である
いいえ基幹インフラpytestは単一のテストフレームワークであり、基幹インフラには当たらない
はい人気ツールPythonで広く使われる一般的なテストフレームワークである
いいえ悪用確認済みQiita記事: 実機確認による再現報告であり、観測された攻撃の言及はない
いいえ公開エクスプロイトQiita記事: 攻撃用のエクスプロイトコードは示されず、表示挙動の確認にとどまる
いいえ認証不要のリモート攻撃Qiita記事: 失敗ログを読める立場が必要で、ネットワーク経由の悪用は述べられていない
いいえ完全な乗っ取りQiita記事: APIキーの表示のみが述べられ、コード実行や権限昇格は述べられていない
はいシークレットの流出Qiita記事: Authorization Bearerのキーが失敗ログにそのまま出力されたと報告
いいえサプライチェーンQiita記事: 悪意あるコードの配布に関する言及はない
いいえ修正なしQiita記事: 修正版の有無についての記述はない

出典

pytest が失敗すると API キーがそのまま出る:-l(--showlocals)は比較と関係ない変数まで表示した(実機確認) ↗ Pythonタグが付けられた新着記事 - Qiita · 55分前

初出: · ソース1件 · 記事ページ · ティアの決め方