Sistemas operativos: ¿Cuáles son las implicaciones de seguridad debido a la condición de carrera?

Las implicaciones pueden ser arbitrariamente malas dependiendo de los recursos vulnerables a las condiciones raciales. Aquí hay una condición de carrera real que encontré. Este es uno de esos sitios donde puede ganar puntos que pueden canjearse por artículos valiosos como tarjetas de regalo. La condición de carrera permite a los usuarios canjear puntos varias veces. Eso está muy mal.

Aquí hay un pseudocódigo:

redeem_reward (user_id) {
info = sql (“seleccione correo electrónico, saldo de usuarios donde user_id = {0}”,
user_id);
if (info.balance> 5000) {
http_post (“Página en tarjeta de regalo.ejemplo”,
{“valor”: 5.00, “correo electrónico”: info.email},
success_callback, error_callback, info)
} más {
notify_user (“Necesitas más puntos”);
}
}
success_callback (respuesta, información) {
sql (“update user_info set balance = {1} donde user_id = {0}”,
user_id, info.balance – 5000);
notify_user (“Tiene una nueva tarjeta de regalo” + respuesta.mensaje);
}

La condición de carrera aquí significa que si entran dos (¡o más!) Solicitudes simultáneas para canjear una tarjeta de regalo, todas serán procesadas, incluso si el saldo es de solo 5001 puntos. También tenga en cuenta que la condición de carrera se aplica no solo a la emisión simultánea de solicitudes de tarjeta de regalo, por ejemplo, sino a la actualización del saldo (cada devolución de llamada utiliza un valor obsoleto para el saldo al realizar la actualización). Eso significa que no podrá detectar esto por un saldo de puntos negativo.

Para hacer esto correctamente, debe verificar y actualizar el saldo atómicamente.

Tenga en cuenta que este código no es del código del sistema operativo. Una condición de carrera en el código de la plataforma puede ser aún peor porque puede manifestarse como un error de la aplicación que el desarrollador de la aplicación no puede solucionar. Imagine que hay una condición de carrera en su servidor SQL de elección que a veces maneja incorrectamente las actualizaciones de transacciones. Eso podría causar un error como el anterior que le resultaría muy difícil encontrar.

En términos de seguridad, llamamos a esto TOCTOU (tiempo de verificación / tiempo de uso) y tiene un montón de repercusiones en muchos tipos de funciones de la aplicación, como la integridad de los datos y el no repudio.

Mitre.org tiene un buen resumen de esta clase de vulnerabilidades aquí:
http://cwe.mitre.org/data/defini

Aquí hay un ejemplo de una vulnerabilidad Gentoo Linux que permite a los usuarios modificar / eliminar archivos arbitrarios debido a una condición de carrera:
http://cve.mitre.org/cgi-bin/cve

El impacto principal de una condición de carrera es la disponibilidad del sistema informático (la ‘A’ en la CIA). Si un atacante puede causar de alguna manera la condición de carrera y, por lo tanto, denegar el acceso a usuarios legítimos, debe abordarse en el análisis de vulnerabilidad del sistema.