Home / Cybercrimen / La condición de carrera

La condición de carrera

La condición de carrera o race condition es un tipo de vulnerabilidad bastante frecuente.
Estos  errores son producidos en situaciones de concurrencias de varios hilos en las que se compite por los recursos que proporciona el sistema operativo.
Bajo estas condiciones hay ocasiones en las que se presentan situaciones en las que dos o más procesos tienen que leer o escribir en un área común que comparten.
En estos casos se deberían tomar las precauciones necesarias para que las acciones llevadas a cabo por cada recurso fuesen atómicas, sin embargo, hay ocasiones en las que no los son, ocasionando datos inconsistentes o dejando en ocasiones abierto un intervalo de tiempo en el que un atacante podría obtener privilegios, leer y escribir sobre ficheros protegidos.

condicion de carrera

Un ejemplo muy sencillo de lo que es una condición de carrera lo vemos ilustrado en el siguiente listado:

Var x=10
Sub decrementar {
      If (x>0) {
            X –
      }
}

 

Si tenemos una rutina como la anterior, donde x es una variante global compartida, si un único proceso es el que la ejecuta, la variable no tomara nunca un valor negativo, sin embargo en un entorno concurrente, en el que varios procesos ejecutan la misma rutina compitiendo por el tiempo de CPU, si un proceso no iniciase la ejecución de la misma hasta que otro no finalice su ejecución no habría problemas.
Pero podría darse la situación en la que un proceso P1 inicie la ejecución de la rutina para un valor de x=1, P1 realiza la comprobación x>0 también se cumple y se ejecuta el código contenido en la comprobación, con lo que x toma el valor 0.
El proceso P2 termina su ejecución en el mismo punto en el que se paró, es decir, decrementando la variable x, ya que la comprobación la realizo anteriormente, con lo que el final de esta rutina devuelve un valor negativo en la variable x.

Este es un ejemplo muy básico para entender que es una vulnerabilidad de condición de carrera pero los hay mucho más complejos y que pueden producir daños irreparables en los ficheros del ordenador que se encuentra vulnerable.