Un fallo en la base de datos SQLite afecta a millones de apps y a los sistemas de Apple

Un fallo en la base de datos SQLite afecta a millones de apps y a los sistemas de Apple

Publicidad

SQLite, la base de datos más utilizada en apps tanto de movilidad como de escritorio, ha sido comprometida a nivel de seguridad. Según informaron el pasado viernes en TheHackerNews, un fallo encontrado en el motor de la misma requerirá la actualización de millones de apps en el App Store, Google Play, apps de escritorio e incluso supondrá el lanzamiento de una nueva versión de todos los sistemas de Apple y el resto de compañías.

El fallo, conocido como Magellan, es un problema en el software que permitiría a un atacante ejecutar código arbitrario (código no firmado que no tiene que ver con la app que se ejecuta) y malicioso, así como acceder a la memoria de la app o hacer que esta se cierre inesperadamente.

El fallo ha sido descubierto por la compañía china Tencent, a través de su equipo de seguridad llamado Blade

Es un fallo bastante importante, que ya ha sido arreglado y donde el grupo que ha localizado el mismo, no ha querido hacer públicos los detalles para evitar que nadie explote este. Solo ha informado a los responsables de SQLite para que solucionen el problema y ya lo han solventado, momento en que lo han hecho público. E incluso se han lanzado algunas actualizaciones derivadas de ese cambio, como la última de Google Chrome para todos los sistemas, donde su motor Chromium se ha visto afectado por usar SQLite para su uso interno.

De hecho en Chrome, permite ser explotado de forma remota pues usa una librería llamada Web SQL API, que usa esta base de datos para la gestión de las propias webs. Y esto permitiría que con un simple acceso a una página web inocua, pudieran explotar este fallo y acceder a nuestros equipos a través de Chrome (en Mac o cualquier otro sistema que use este navegador). Incluso afecta a algunos dispositivos como Google Home.

 ¿Qué es SQLite y cómo afecta a Apple?

Una base de datos es una estructura que permite almacenar datos en base a estructuras conocidas como tablas o entidades. Creamos estas con campos y podemos crear registros (o filas) que almacenen los datos, donde podemos recuperarlos más adelante consultando. Es la base de la gran mayoría de apps, sistemas, entornos... en el caso de SQLite hablamos de una implementación muy ligera en carga de proceso para el sistema y que está basada en un simple archivo. Una implementación que frente a otras soluciones como MySQL, no necesita un proceso de servidor que conecte a los ficheros de base de datos.

Diagrama de las diferencias entre MySQL y SQLite Diagrama de las diferencias entre MySQL y SQLite

Para que nos hagamos una idea, SQLite es ampliamente usado en iOS o macOS (como, por ejemplo, la cartera de certificados y claves), en muchas apps (como Whatsapp, Dropbox, Firefox, Chrome y muchas más que usamos en el día a día) y como librería en el famoso Core Data que usa también SQLite por defecto. Esto hace que afecte de forma indirecta incluso a apps del sistema como Notas, por citar solo un pequeño ejemplo.

SQLite es una implementación de base de datos muy ligera para cualquier sistema, basada en un fichero, y que es ampliamente usada por casi cada sistema o app. Millones de apps en el App Store la usan, así como los propios sistemas iOS, macOS, watchOS y tvOS, tanto el propio sistema en algunos componentes como algunas de las apps nativas

Al ser una implementación que solo requiere la librería y un fichero de la propia base de datos, cualquier sistema operativo de escritorio o móvil usa SQLite pues es bastante competente y ligera. Apple incluye el controlador de esta librería por defecto en su librería de desarrollo para crear apps para todos sus sistemas, tanto móviles como de escritorio.

Así que estamos hablando de un fallo que afecta la implementación de probablemente, no solo todos los sistemas operativos en mayor o menor medida, también de millones de apps en el App Store, Google Play o incluso de descarga directa para nuestros escritorios.

¿Qué pasará ahora?

Todos los sistemas o apps tienen que actualizarse, porque cualquiera que use SQLite con una versión de motor anterior a la 3.26.0 es susceptible de permitir esta explotación que pondría en peligro nuestros sistemas y apps (y los datos que hay en ella). El pasado 1 de diciembre ya se lanzó esta actualización que soluciona el fallo y de hecho, la pasada semana, Google lanzó Chrome 71 que soluciona este problema en su motor Chromium.

Magellan

Pero el fallo supone que no solo Apple debe actualizar sus herramientas de desarrollo para que usen la nueva versión de la librería, también ha de crear una nueva versión de todos sus sistemas y las apps nativas que usen SQLite, y publicarla como actualización de seguridad en la próxima versión que se publique al público.

NOTA: A las pocas horas de este artículo, Apple publicó iOS 12.1.2 donde parece que estaría solucionado el problema mencionado con SQLite (entre otros) en el sistema.

En el caso que tengamos una app nativa para Apple y usemos SQLite (o Core Data), nuestra app no estará afectada tras la actualización que solucione el problema. No será necesario volver a compilar la app o generar una nueva versión porque la librería de SQLite está enlazada en el sistema y cargada en iOS como recurso. Esto significa que una vez actualizada en iOS, como las apps que usan SQLite no llevan la librería incluida en esta, si no que funcionan por enlaces usando la que tiene el sistema precargado, no estarían afectadas. Todas las apps en iOS, watchOS y tvOS quedarían corregidas con ello, al menos las que usen la librería por defecto implementada en Xcode.

Apple incluirá una actualización de esta librería en próximas versiones de sus sistemas y apps (parece que iOS 12.1.2 incluye esta corrección). Los desarrolladores de iOS, watchOS y tvOS no tendrán que hacer nada pues la librería de SQLite va en el sistema y con esa actualización es suficiente. Pero si incluimos la librería como recurso en nuestra app, sí deberemos actualizar incluyendo la nueva sin el error.

Aquí el problema son los miles o cientos de miles de apps de escritorio (incluido macOS) que no se actualizarán e incluyan una versión de la librería en la propia app. O los sistemas que no se actualicen. En dicho caso, la única opción es volver a generar el producto con la nueva versión de la librería, como ha hecho Chrome.

Agujeros de seguridad, el gran peligro

Un agujero de seguridad es un gran peligro para cualquier app o sistema. Es un fallo en el software provocado por una mala implementación que permite, sabiendo cómo, explotar un fallo y conseguir cosas en un sistema que no deberían hacerse. Por ejemplo ejecutar un código malicioso u obtener acceso a la memoria de una app.

Un fallo así no es un virus ni un troyano ni nada parecido. Y no hay ni un sólo sistema, app o dispositivo que se libre de ellos. Afectan a todos por igual y en el buen trabajo de cada compañía responsable de cada componente está nuestra seguridad. Lo único que podemos hacer contra ellos es que cuando se publiquen actualizaciones que arreglen estos problemas, instalarlos lo antes posible. De hecho, las actualizaciones son más importantes por los fallos de seguridad que arreglan que porque nos ofrezcan tal o cual funcionalidad nueva.

Lo verdaderamente importante de una actualización de un sistema no son sus nuevas funcionalidades: es la solución de las decenas o cientos de fallos de seguridad que puede cubrir en cada nueva actualización

Así que nunca dejéis de actualizar una app o un sistema, pues es esencial para corregir estos problemas que, como digo, nadie puede prevenirnos de ellos y afectan a todo. Otro día, si os interesa, hablaremos sobre la base de estos errores y por qué nadie se libra de ellos.

Temas
Publicidad
Inicio