El bug intencionado de XBox One

La noticia graciosa de esta semana, al menos en el ámbito informático, es que un niño de 5 años ha encontrado un bug de seguridad en la XBox One que permitía loguearte con cualquier cuenta.

Kristoffer Wilhelm von Hassell, como todo niño de 5 años, es un ser curioso al que no hay mayor motivación que prohibirle algo. Sus padres habían decidido colocar el control parental en la consola para evitar que Kristoffer pudiera acceder a contenido violento, pero no contaban con que su hijo daría con un importante agujero de seguridad.

El pequeño Kristoffer puso la contraseña mal y tras esto, decidió probar de nuevo poniendo tantos espacios como longitud tenía la clave de sus padres. La sorpresa resultó mayúscula ya que no sólo funcionó en el caso de sus padres, sino que permitía acceder a cualquier cuenta de XBOX One.

Microsoft ha incluido al pequeño Kristoffer en la lista de expertos de seguridad de la compañía y además le ha regalado cuatro juegos, cincuenta dólares para gastar en la Microsoft Store, y un año gratis de suscripción a Xbox Live.

Esta noticia ha quedado en una simpática anécdota en la mayoría de medios, pero para cualquier profesional del desarrollo software hay algo que huele a chamusquina en todo esto: El “curioso” bug en cuestión.

XboxOne

Es raro trabajar en el desarrollo web y no haber implementado alguna vez un control de usuarios con sus respectivas validaciones. Para los que no pertenecéis al mundillo, intentaré poner el flujo habitual que se sigue en los login de usuario de la forma más intuitiva posible:

  1. Se recoge el user y pass introducidos.
  2. Se accede a una Base de Datos para obtener los datos de ese usuario. Si no existe el usuario, mostramos error.
  3. Si el usuario si existe en el sistema, se compara la contraseña almacenada con la introducida. Si no coinciden, da error.

Habitualmente las contraseñas vienen desde Bases de Datos cifradas, por lo que habrá que cifrar la introducida por pantalla antes de compararla, no obstante, con estos tres puntos generales vale para entender el proceso.

Por el contrario, en el caso de Microsoft tenemos un punto 4 en el flujo carente de sentido alguno:

  1. Se recoge el user y pass introducidos.
  2. Se accede a una Base de Datos para obtener los datos de ese usuario. Si no existe el usuario, mostramos error.
  3. Si el usuario sí existe en el sistema, se compara la contraseña almacenada con la introducida. Si no coinciden, da error.
  4. Si ya había errores y la contraseña introducida son espacios con la misma longitud que la recogida en BBDD, accedemos a la aplicación.

Para los que tenéis conocimientos de Programación, el acceso de XBox Live es tal que:

       // Anteriormente se debería encriptar la pass introducida por el usuario
        if (passBBDD == passUser) {
            return true;
        }else if (hasErrors()){
            if (passBBDD.length == passUser.length) {
                for (i=1; i< passUser.length; i++){
                    if (passUser[i] != ESPACIO) { 
                        return false; 
                    }
                }
                return true;
            }
        }
        return false;

En mi vida he visto ninguna validación de este tipo, es más, como se puede ver sin necesidad de conocimientos en programación, esto no se debe a un escenario no controlado o a un error inesperado. Vamos, que esto está hecho a conciencia.

Por tanto, lo que ha descubierto el pequeño Kristoffer no es un bug, sino una backdoor, o puerta trasera. Los backdoors muchas veces se hacen con intenciones benignas, como entrar en la configuración de aplicaciones sin login, aunque precisamente un backdoor en el acceso de usuarios no parece muy inocente y bienintencionado. Esta puerta trasera tiene como intención poder acceder a la cuenta de los usuarios del sistema.

Y vosotros diréis, ¿para qué quiere esto Microsoft si ya tiene toda esa información en sus sistemas? Pues aquí viene la respuesta conspiranoica del día: Para que otros puedan consultar estos datos.

¿Quién accede a esos datos? A saber, aunque no puedo evitar pensar en la NSA. Gracias a Wikileaks sabemos que Microsoft ya ha creado backdoors con anterioridad para la agencia de seguridad yankee, así que es inevitable pensar que esta teoría tenga todas las papeletas para ser cierta.

Yo por si acaso, siempre que enciendo mi consola le mando saludos a Obama desde mi Kinect. Por si acaso.

EDIT:

Artículo publicado en El Boletín:

El bug intencionado de XBox One (El Boletin)

Share