logotipo tecnofacts

Fallo masivo en Chrome OS que impide volver a acceder a los ficheros locales, todo por un la falta de un simple “&”

Fallo masivo en Chrome OS que impide volver a acceder a los ficheros locales, todo por un la falta de un simple “&”

El pasado lunes 19 de julio, Google lanzó una actualización de su sistema operativo Chrome OS, la 91.0.4472.165, la cual, inmediatamente empezó a dar problemas a los usuarios: les impedía iniciar sesión en sus sistemas. Google detuvo inmediatamente la descarga de la misma, esto solo afecto a los usuarios que reiniciaron sus equipos tras la descarga de la nueva versión.

A estos últimos sólo se les pudo ofrecer soluciones para recuperar el acceso a su sistema que pasaban, inevitablemente, por borrar los datos locales del dispositivo (revertir el dispositivo a una versión anterior vía USB, restaurar estado de fábrica, o borrar y recrear la cuenta de usuario).

A principios de esta semana, el titán de Internet en su página de estado de Google Workplace dijo : “Nuestro equipo de ingeniería ha identificado un problema en Chrome OS 91.0.4472.165. Se detuvo el lanzamiento de esta versión”.

Un simple —y casi imperceptible— error tipográfico ha provocado que miles de Chromebooks hayan perdido el acceso a sus datos.
Sin embargo, lo interesante de esta actualización fallida (y, por supuesto, ya parcheada), tiene que ver con la razón de dicho fallo. ¿Quizá una corrupción de algún fichero del sistema? ¿Quizá —qué sé yo— alguna extraña y compleja vulnerabilidad del kernel? Para nada: el problema residía en un simple e insignificante “&“.

Lo extraño del error no es que se cometiera, es que no se detectaran sus efectos
Sí, el carácter conocido en inglés como ‘ampersand’, usado como sustituto de la palabra ‘and’, es también un operador fundamental en la mayoría de los lenguajes de programación. El problema de esta actualización vino generado por una revisión del código que, inadvertidamente, eliminó uno de estos operadores en el siguiente fragmento de código C++:

1
if (key_data_.has_value() && !key

Nada impedía que el código compilase, pues el código sigue teniendo sentido aun cambiando “&&” por “&“… sencillamente, el comportamiento del software varía totalmente.

Así, donde “&&” es un operador AND lógico que actúa como una forma de indicar que deben cumplirse simultáneamente dos o más condiciones para realizar una opción, “&” se convierte en un operador AND de bit a bit: compara los bits uno a uno, si ambos son “1” el resultado es “1”, en caso contrario “0”.

Esto significa que “&” evalúa ambos lados de la operación, mientras que “&&” evalúa el primer elemento de la operación, y sólo si es ‘true’ continúa y evalúa el segundo elemento.

Debido a este error, el Chrome OS actualizado nunca llegaba a verificar correctamente las contraseñas de los usuarios comparándolas con las claves almacenadas, por lo que incluso cuando se introducían las contraseñas correctas, el SO devolvía el mensaje de “Lo siento, no se pudo verificar su contraseña”.

El parche de GoogleChrome OS 91.0.4472.167, se emitió el miércoles y se ha estado implementando gradualmente según el patrón de lanzamiento de Google.

Queda la duda de cómo un error cómo éste se le pudo pasar a GoogleChrome OS, al igual que el navegador Chrome, cuenta con tres canales de pruebas (‘canary’, ‘dev’ y ‘beta’) con semanas de pruebas de diferencia entre lanzamientos, lo que debería servir para cazar bugs tan obvios como éste antes de pasar al canal estable. De hecho, una prueba unitaria automatizada debería haberlo detectado también.

En cualquier caso, éste constituye un ejemplo magnífico de cómo los peores errores de programación pueden depender de algo tan simple como un carácter.

administrator

Related Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *