Время проверки ко времени использования


В разработке программного обеспечения время проверки по времени использования ( TOCTOU , TOCTTOU или TOC/TOU ) — это класс программных ошибок , вызванных состоянием гонки, включающим проверку состояния части системы (например, учетные данные безопасности) и использование результатов этой проверки.

Условия гонки TOCTOU распространены в Unix между операциями в файловой системе [1] , но могут возникать и в других контекстах, включая локальные сокеты и неправильное использование транзакций базы данных . В начале 1990-х годов почтовая утилита BSD 4.3 UNIX допускала использование состояния гонки для временных файлов, поскольку использовала функцию mktemp()[2] . [3] Ранние версии OpenSSH имели возможность эксплуатации сокетов домена Unix . [4] Они остаются проблемой в современных системах; по состоянию на 2019 год состояние гонки TOCTOU в Dockerразрешает root-доступ к файловой системе хост-платформы. [5]

Здесь доступ предназначен для проверки того, setuidразрешено ли обычному пользователю, выполняющему программу, записывать файл (т . е. accessпроверяется реальный идентификатор пользователя , а не эффективный идентификатор пользователя ).

В этом примере злоумышленник может использовать состояние гонки между accessи open, чтобы обманом заставить setuidжертву перезаписать запись в базе данных системных паролей. Гонки TOCTOU можно использовать для повышения привилегий , чтобы получить административный доступ к машине.

Хотя такая последовательность событий требует точного расчета времени, злоумышленник может создать такие условия без особого труда.

Подразумевается, что приложения не могут предполагать, что состояние, управляемое операционной системой (в данном случае пространство имен файловой системы), не изменится между системными вызовами.