リークの定義(何が起きている状態か)
「リーク(leak)」は、本来なら外に出ないはずの情報や手がかりが、意図しない形で外部から利用できるようになってしまう状態のことです。必ずしも“大量に流出”を意味するとは限らず、少量でも推測や照合に使える情報が外に出ればリークとして扱われます。
たとえば、機密に相当する値がレスポンスに含まれてしまう、内部のエラーメッセージが構造を明かす、特定の行動痕跡が相手に観測される、といったケースは、広い意味でリークに含めて考えられます。ここで重要なのは「何が漏れたのか」と「誰がそれを利用できる可能性があるのか」を分けて捉えることです。
簡単なモデル:漏れるものは“情報”だけではない
リークを理解するには、次の要素を分けると整理しやすくなります。
- 漏れる対象:認証情報、個人情報、内部識別子、設定値、計算結果、エラーの詳細、利用状況のような“手がかり”
- 出口(外に出る経路):APIレスポンス、画面表示、ログ、例外メッセージ、公開されるファイル、観測可能な通信パターンなど
- 利用者(見える側):不特定の閲覧者、同じネットワークにいる相手、アカウント権限を持つ第三者、推測能力を持つ攻撃者など
このモデルだと、「情報が見える/いない」だけでなく、「直接見えないが観測から推測できるか」もリークの一部だと扱えます。逆に言えば、保護したいのは“表示内容”だけでなく、“観測される痕跡”も含まれます。
ありがちな仕組み(どこでリークが起きやすいか)
リークは特定の一点で突然起きるというより、設計・実装・運用のどこかで前提が崩れた結果として現れやすいです。一般的に、次のような経路が問題になり得ます。
-
実装の不備 本来マスクすべき値がレスポンスに含まれる、例外時に内部情報がそのまま返る、不要なフィールドを返してしまう、といったケースです。
-
入力と出力の扱い 入力(ユーザーが与える値)を検証せずに反映してしまう、意図しない形でデータが連結されることで、結果が“特定の情報に近づく”ことがあります。
