シークレットスキャナ・マスクツールの既知の落とし穴

一言まとめ

Gitleaks・TruffleHog・secretlint・1Password op run・Teller・Warp・GitHub Actions add-mask それぞれに、Issue として公開された構造的な欠陥がある。導入前に「誤検知の扱い」「TTY を壊すか」「配布バイナリの依存」を確認する。

作成 · 更新 · #security#secrets#gitleaks#trufflehog
目次 5 sections
  1. 01 ツール別
  2. 02 ログ露出のインシデント例
  3. 03 導入前の確認項目
  4. 04 関連
  5. 05 更新履歴

調査時点: 2026-04。Issue 番号と状態は当時のもの。以後に修正された可能性がある。

ツール別#

ツール方式既知の欠陥(Issue)
Gitleakspattern 検出--redact を付けると検出数が減る(#332 / #367)。--redact と --baseline の併用でベースラインが無視される(#1441)。generic-api-key ルールが os.getenv('AWS_SECRET_ACCESS_KEY')・public_key=...・LLM_SECRET_NAME などを誤検知(#575 / #1578)。v8.20.1 → v8.24.3 で設定変更なしに誤検知が急増し、辞書語がランダムな認証情報より高いエントロピースコアを得る逆転(#1830)。pnpm-lock.yaml のハッシュ誤検知(Discussion #1005)。Kubernetes Sealed Secrets の誤検知(#1728)。インラインの無視コメントに未対応で pre-commit がコミットをブロック(#579)
TruffleHogpattern 検出誤検知と判定した候補がログにも出ず黙って除外され、理由を追えない(#3578)。複数 detector が同じ値を検出すると verificationOverlapWorker() が既知の誤検知フィルタを迂回して結果に含める(#2888)。pre-commit フックがソースからビルドする設計でインストールに数分かかる(#4281)。スキャンが資源集約的
secretlintpattern 検出(ルール追加が前提)--secretlintignore .gitignore が直感に反し --gitignore を要求される(#337)。Windows + GitHub Actions で AggregateError: secretlint loading errors(#205)。npm ルールに ReDoS 脆弱性があり http:// 始まりの長い文字列でスキャンが極端に遅くなる(#296)。ビルトインルールがなく、パッケージ導入と .secretlintrc 追記が必要
1Password op runknown-value マスク + サブプロセス実行マスク有効時に stdout / stderr が非 TTY 化する(公式が「ストリームを中継するため色の自動検出が効かない」と明言)。色が消える(shell-plugins #413)、TUI が真っ白になる(crush #1415)、Ansible が各 fork で setsid を呼び TTY を切り離すため連携できない。回避策は --no-masking だけで、マスクの完全無効化と二律背反
Tellerknown-value redact(設定ファイル必須)配布バイナリが libssl.so.1.1 に依存し、OpenSSL 3.x 系の Linux(Ubuntu 22.04+ / Debian 12 / Arch)で version OPENSSL_1_1_1 not found と即死(#290。公式ドキュメントに依存の記載なし、修正 PR なし)。v1 → v2 の自動アップグレードで全設定が動かなくなり、changelog・移行ガイドなし(#282)。GCP Secret Manager プロバイダ破損(#309)、AWS SSM SecureString 取得失敗(#310)、Vault namespace 指定不可(#286)。最終リリース v2.0.7(2024-05-20)以降メンテが停滞し、コンパイル不可報告(#312)や CNCF アーカイブ問い合わせ(#315)に応答なし
Warp redactionpattern(描画レイヤー)デフォルト無効(#6113)。無効にしてもコピー時はマスクされる不整合(#5574)。Session Sharing には非適用(公式明記)。正規表現が大文字小文字を区別し password が Password に一致しない。変数名(キー名)でのリダクションに未対応で、デモ録画用途に足りない(#3636)
GitHub Actions add-maskknown-value マスクジョブ間でシークレットを渡すと受け取り側でマスクされない(runner #2701)。add-mask を呼ぶ前に同じ値がログに出ていればマスクされない(#475)。workflow_dispatch の入力値をマスクできない(#643)
Grafana Alloy loki.secretfilterpattern(Gitleaks の定義を流用)スタンドアロン CLI ではなくコンポーネント。大規模ログでパフォーマンス問題(alloy #3694)

ログ露出のインシデント例#

「サブコマンドの stdout がロガーを通らずに秘匿値が出る」という型の問題は各所で起きている。

  • Grafana Tanka tk apply が CI ログに全シークレットを出力(tanka #512)
  • kubectl diff の出力に Secret が露出(kubernetes #87840)
  • Airflow タスクの stdout がロガーを経由せずマスク漏れ(PR #24362 で対応)
  • Tekton の entrypoint がサブコマンドの stdout / stderr を素通しし、set -x で秘匿値が露出(#3373)
  • Azure CLI のデバッグモードでパスワードが露出(azure-cli #20959)

導入前の確認項目#

  1. 誤検知をどう扱うか(インライン無視、baseline、除外理由の可視化)
  2. 子プロセスの TTY を壊すか(色・TUI・対話入力・Ansible)
  3. 配布バイナリの動的リンク依存(libssl など)とメンテ状況(最終リリース日、Issue への応答)
  4. マスク対象の値が「マスク登録前」にログに出る経路がないか

関連#

更新履歴#

  • 2026-04-16: 初版(ローカル調査ノート)
  • 2026-10-17: Wiki へ移植、概念ページとして再構成

出典

  1. https://github.com/zricethezav/gitleaks/issues/332
  2. https://github.com/gitleaks/gitleaks/issues/1830
  3. https://github.com/trufflesecurity/trufflehog/issues/3578
  4. https://github.com/trufflesecurity/trufflehog/issues/2888
  5. https://github.com/secretlint/secretlint/issues/296
  6. https://developer.1password.com/docs/cli/reference/commands/run/
  7. https://github.com/tellerops/teller/issues/290
  8. https://github.com/warpdotdev/Warp/issues/6113
  9. https://github.com/actions/runner/issues/475
  10. https://github.com/actions/runner/issues/2701

同じトピック — セキュリティ