CyberGlossary

脆弱性

競合状態(レースコンディション)

別称: 並行性バグ

定義

システムの安全性や正しさが並行処理のタイミングや順序に依存する欠陥。攻撃者は処理を割り込ませてチェックを回避できる。

レースコンディションは、複数のスレッド・プロセス・主体が共有状態に適切な同期なしでアクセスする際に発生し、攻撃者はタイミングの隙を突いて中間状態を観察したり、操作の間で状態を改変したりできます。セキュリティ上重要な変種には TOCTOU(検査と使用の間)、金融処理の原子性違反、シグナルハンドラの再入バグなどがあります。悪用には精密なスケジューリング、スレッドプールによるカーネルへの猛攻、ファイルシステムのトリック(rename、シンボリックリンク)が必要になることが多いです。防御は適切なロック、トランザクション、原子的 compare-and-swap、ファイルディスクリプタベースの API(openat、fstatat)、冪等設計、ThreadSanitizer のようなツールでの並行性レビューです。

  • CVE-2016-5195(Dirty COW):Linux カーネルの COW 処理における競合状態。
  • access() と open() の間にファイルを差し替えられるファイルシステムのレース。

関連用語