Reproducen una vulnerabilidad de SQLite de dieciséis años en el WAL

Fuentes: Another look at SQLite's WAL-Reset bug

Un artículo técnico de The Consensus reproduce y documenta una vulnerabilidad latente durante dieciséis años en el sistema de registro write-ahead log (WAL) de SQLite. El fallo, bautizado como "WAL-Reset bug", se origina en una condición de carrera durante los checkpoints concurrentes: una lectura obsoleta permite al proceso de checkpoint marcar como ya volcadas páginas del WAL que aún contienen escrituras pendientes, lo que provoca pérdida de datos y, en ocasiones, corrupción del fichero de base de datos detectable con PRAGMA integrity_check.

El problema fue identificado por Tailscale, que lo comunicó públicamente este mes, y SQLite lo corrigió en marzo de 2026. El artículo explica paso a paso la interlección de tres conexiones —un checkpointer, un escritor y un lector— que desencadena el bug, apoyándose en el código fuente de wal.c. Los autores logran provocarlo en segundos con un programa en C de alrededor de cien líneas que utiliza únicamente la API pública de SQLite. Para forzar la ventana de carrera se apoyan en el tiempo que tarda un munmap de un fichero de base de datos de gran tamaño, lo suficiente para que el escritor reinicie el log en medio del checkpoint.

Como medida de detección, el código introduce una tabla "canaria" con un contador monotónico: si la fila leída tiene un valor inferior al esperado, se confirma la pérdida de escrituras. El texto recuerda que SQLite, incluso tras el parche, no protege de forma nativa contra las escrituras perdidas, por lo que recomienda vigilar la integridad en escenarios de alta concurrencia.