Skip to content

logger: dotenvダンプの秘密漏洩・panic・データ競合を修正 (#16)#22

Merged
ieee0824 merged 1 commit into
masterfrom
fix/logger-dotenv-dump-hardening
Jun 17, 2026
Merged

logger: dotenvダンプの秘密漏洩・panic・データ競合を修正 (#16)#22
ieee0824 merged 1 commit into
masterfrom
fix/logger-dotenv-dump-hardening

Conversation

@ieee0824

Copy link
Copy Markdown
Owner

概要

logger.go の dotenv ダンプ経路(GETENV_DUMP_MODE=dotenv)に集中していた、秘密漏洩フットガン・panic・データ競合・出力破損をまとめて修正します。

Closes #16

背景

セキュリティ監査(敵対的検証済み)で、以下が検出されていました(いずれも opt-in なデバッグ経路ゲートのため深刻度 low ですが、ライブラリがロギング副作用で秘密を漏らしたりホストをクラッシュさせるべきではありません)。

変更点

  • secure by default: ダンプのデフォルト値出力を既定でマスク(KEY=)し、Logger.DumpValues(true) で明示的に opt-in したときのみ実値を出力(環境変数からtime.Durationを取得する #1 / test追加 #2)
  • Dump の書き込みエラーを panic からベストエフォートの log.Printf に変更(duration取得する #3)
  • Logger.w / dumpValuessync.Mutex で保護(add readme #4)
  • 1 レコードを bytes.Buffer で組み立て単一 Write に集約(time.ParseDuration使う #5)
  • logger_test.go を追加:マスク既定 / opt-in / スライス / panic 回避 / 並行(-race・行の非交錯)を検証
  • README(en/jp)に dotenv ダンプ機能と DumpValues を追記(従来は未記載)

補足(スコープ外)

  • add test #14(os.Getenv を毎回読む): example.go が実行時に GETENV_DUMP_MODE をセットして使う動作に依存するため、init キャッシュ化は破壊的。info かつ実害なし(Go 1.21 では O(1))のため据え置き

挙動変更(破壊的の可能性)

  • GETENV_DUMP_MODE=dotenv の出力が KEY=<デフォルト値>KEY=(マスク)に変わります。従来どおり値を出したい場合は getenv.Logger.DumpValues(true) を呼んでください。dotenv ダンプは README 未記載のデバッグ機能のため影響は限定的と判断しています。

テスト

  • go build ./...
  • go vet ./...
  • go test ./...
  • go test -race ./...

🤖 Generated with Claude Code

## 理由
GETENV_DUMP_MODE=dotenv の経路に、デフォルト値(秘密になり得る)の出力、
書き込みエラー時の panic、Logger.w のデータ競合、並行 Write による出力破損が
存在していた(#16)。ライブラリがロギングの副作用で秘密を漏らしたりホストを
クラッシュさせたりすべきではないため修正する。

## 修正点
- デフォルト値出力を既定でマスク(KEY=)し、Logger.DumpValues(true) で
  明示的に opt-in したときのみ実値を出力するように変更(secure by default)
- Dump の書き込みエラーを panic からベストエフォートの log 出力に変更
- Logger.w を sync.Mutex で保護し、SetWriter とのデータ競合を解消
- 1 レコードを単一 Write に集約し、並行ダンプ時の行の交錯を防止
- logger_test.go を追加(マスク/opt-in/panic 回避/並行 -race を検証)
- README(en/jp)に dotenv ダンプ機能と DumpValues を追記
@ieee0824 ieee0824 merged commit 043d095 into master Jun 17, 2026
1 check passed
@ieee0824 ieee0824 deleted the fix/logger-dotenv-dump-hardening branch June 17, 2026 06:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

logger: dotenvダンプ経路のフットガン修正(デフォルト値漏洩・panic・データ競合・出力破損)

1 participant