A63/100
インシデント · 中
pytest失敗時にAPIキーが表示される問題
ティアA · 今日中にパッチ – 帰る前に対応
影響を受ける人: pytestで認証ヘッダーを比較するテストを実行する開発者
ティアAの理由: 基幹インフラまたは人気ツール かつ シークレットの流出
影響範囲
攻撃
被害
修正
人気ツール · シークレットの流出
取るべき対応
- テストのassertで認証ヘッダーなどのシークレットを直接比較しない形に見直す
- -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分前