脆弱性
TOCTOU 脆弱性
別称: TOCTTOU, 検査と使用
定義
セキュリティ判断で参照した状態が、対応する処理を実行する前に変化してしまう、検査と使用の間のレースコンディション。
TOCTOU 脆弱性(Time-Of-Check to Time-Of-Use、CWE-367)はレースコンディションの一種で、プログラムがリソースの属性(所有者・パーミッション・内容など)を検査した後、検査が依然有効であるかのように処理を続行することで発生します。攻撃者が両ステップの間にリソースを差し替えられる(典型的にはシンボリックリンク、rename、共有メモリ)なら、検査は無意味になります。古典的な例は access() に続く open():access() 成功直後にパスを /etc/shadow へのシンボリックリンクへ差し替えるものです。防御としては、検査と使用を一体化するファイルシステム API(O_NOFOLLOW 付き openat、fstat)、パスではなくファイルディスクリプタを保持する、ファイルロック、より厳格なサンドボックス境界などが挙げられます。
例
- stat() で所有者を確認してからパスを open する setuid プログラム。
- bind-mount パスに対する TOCTOU を用いたコンテナエスケープ。
関連用語
競合状態(レースコンディション)
システムの安全性や正しさが並行処理のタイミングや順序に依存する欠陥。攻撃者は処理を割り込ませてチェックを回避できる。
脆弱性
システム、アプリケーション、または運用プロセスに存在する弱点で、攻撃者が機密性・完全性・可用性を侵害するために悪用できるもの。
権限昇格
本来付与された権限を超える権限を攻撃者が取得できる脆弱性の総称。例として一般ユーザーから管理者への昇格がある。
Secure Coding
Secure Coding — definition coming soon.
Directory Traversal
Directory Traversal — definition coming soon.
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。