Hora de verificación a hora de uso


En el desarrollo de software , el tiempo de verificación al tiempo de uso ( TOCTOU , TOCTTOU o TOC/TOU ) es una clase de errores de software causados ​​por una condición de carrera que involucra la verificación del estado de una parte de un sistema (como una credencial de seguridad) y el uso de los resultados de esa verificación.

Las condiciones de carrera de TOCTOU son comunes en Unix entre operaciones en el sistema de archivos , [1] pero pueden ocurrir en otros contextos, incluidos los sockets locales y el uso indebido de las transacciones de la base de datos . A principios de la década de 1990, la utilidad de correo de BSD 4.3 UNIX tenía una condición de carrera explotable para archivos temporales porque usaba la función mktemp()[2] . [3] Las primeras versiones de OpenSSH tenían una condición de carrera explotable para sockets de dominio Unix . [4] Siguen siendo un problema en los sistemas modernos; a partir de 2019, una condición de carrera TOCTOU en Dockerpermite el acceso de root al sistema de archivos de la plataforma host. [5]

Aquí, el acceso está destinado a verificar si el usuario real que ejecutó el setuidprograma normalmente podría escribir el archivo (es decir, accessverifica el ID de usuario real en lugar del ID de usuario efectivo ).

En este ejemplo, un atacante puede explotar la condición de carrera entre accessy openpara engañar a la setuidvíctima para que sobrescriba una entrada en la base de datos de contraseñas del sistema. Las carreras TOCTOU se pueden usar para la escalada de privilegios , para obtener acceso administrativo a una máquina.

Aunque esta secuencia de eventos requiere una sincronización precisa, es posible que un atacante organice tales condiciones sin demasiada dificultad.

La implicación es que las aplicaciones no pueden asumir que el estado administrado por el sistema operativo (en este caso, el espacio de nombres del sistema de archivos) no cambiará entre llamadas al sistema.