资讯中心

  • 首页 资讯中心 一场揭露16年SQLite漏洞的调查之旅

一场揭露16年SQLite漏洞的调查之旅

2026-09-21

在技术的世界中,有些漏洞潜伏的时间之长超乎想象,而有些公司却肩负着揭露真相的使命。近日,Tailscale,这家专注于VPN和网络连接服务的公司,经过数月的深入调查,成功找出了一个隐藏了整整16年的SQLite数据库漏洞。这个过程不仅是技术上的探险,更是一段关于坚持和创新的故事。

about image

自2022年起,Tailscale便将SQLite作为核心数据库,响应用户对其网络服务的需求。用户在访问Tailscale的一系列端点时,实际是连接到了一个由多个分片构成的“控制平面”。而每个这些分片下又各自维护一套SQLite数据库,负责存储与管理属于它们自己的“Tailnet”信息。为了确保数据安全,Tailscale设定了每隔几分钟备份一次完整数据库快照,并将其存储至Amazon S3。然而,平静的日子并没有持续太久,直到2025年8月,S3备份报告显示,由于数据库损坏,数据完整性受到威胁。这场危机在短短六个月内发生了19次,尽管每次损坏仅限于控制平面的配置数据,但恢复过程都需要停止进程,直接导致了服务的中断。

面对这种突发情况,Tailscale的团队首先审视近来的改动记录,寻找可能的线索。然而,操作SQLite的底层代码已有数年未做修改,这让他们的排查工作变得复杂。更令人沮丧的是,触发损坏的条件似乎难以捉摸,事故的发生有时相隔数小时,有时则是一连好几周安然无事。对此,Tailscale意识到这并不是可以轻易解决的问题,最终决定与SQLite的开发者团队合作,通过签订专业支持合同来共同查明真相。 球友直播官网

在此期间,Tailscale并未停止服务的运行,而是采取了一系列措施来提高服务的可靠性和响应速度。他们调整分片的设置,让数据库损坏后立即停止,并引入自动备份系统。同时,改进了运维手册和调度培训。这些改革措施将响应时间缩短至可控制的1小时以内,意外间也为发现问题提供了关键的线索。

随着调查的深入,Tailscale构建了一个事务日志管道,将所有修改数据库的SQL语句实时记录。通过对最新正常备份的重放,他们能够安全地恢复数据库至状态,同时避免潜在的数据损坏。然而,意外的是,在两次事故中,事务日志的重放失败,进一步导致团队开始怀疑数据库检查点流程某一环节出了问题。SQLite数据库是建立在多个“页”的基础上的,更新时需要用新的页替代旧的页,但为提高性能,SQLite并不会直接修改数据库,而是先将新页写入预写式日志(WAL)。每个新页在一个特定时刻必须由WAL复制回主数据库,这一步骤称为“检查点”。而在控制平面中,由于其特殊需求,检查点过程被手动化了,这种非标准的做法成了潜在风险的根源。

SQLite的开发团队随后着手研发一个用以增强诊断的虚拟文件系统(VFS)包装层,目的是进一步追踪数据库变更。在生产环境中部署之后,数据库在一次损坏事件中产生的额外日志,终于令开发者锁定了罪魁祸首——检查点和写事务之间的偶发数据竞争。这个数据竞争使得检查点流程受到干扰,直接导致数据的丢失。这个漏洞被称为“WAL-Reset漏洞”,开发者推测它可能在SQLite内部潜伏超过了16年,虽发生概率极低,但Tailscale频繁地手动控制检查点,则增加了漏洞触发的机会。 球友直播官网

在成功定位漏洞后,SQLite团队发布了针对“WAL-Reset漏洞”的修复版本3.52.0,但由于出现新问题而撤回。最终,只包含漏洞修复的3.51.3及全面修复后的3.53.0得以面世。为了让用户安心,SQLite团队在推出修复版后进行了全面的测试,确认即便“写事务与WAL重置冲突”再次出现,技术也不会导致数据库损坏。经过约两个月的观察,最终迎来期待已久的警报,数据库系统在经历了一系列的修复后再次稳定。

经过紧锣密鼓的修复与测试,Tailscale成功确认“WAL-Reset漏洞”已被彻底清除,令人欣慰的是,自此之后,数据库系统连续四个月未再发生故障。这条经历不仅是对Tailscale团队工作的证明,更进一步表明在技术探索之旅中,勇于面对挑战、不断创新的精神是多么的重要。