【高危漏洞】CVE-2026-23838:Tandoor Recipes SQLite 数据库文件可被未授权访问

漏洞概述

Tandoor Recipes 是一个可通过 Nix 包管理器安装的食谱管理工具。在版本 23.05 至 26.05 之间(不含 26.05),当使用默认配置(特别是使用 SQLite 作为数据库并采用默认 MEDIA_ROOT 路径)时,其 SQLite 数据库文件 db.sqlite3 可能被外部直接通过 HTTP 访问,导致敏感数据泄露。该问题源于 NixOS 模块将 Tandoor Recipes 的工作目录和 MEDIA_ROOT 均设置为 /var/lib/tandoor-recipes,使得数据库文件与媒体文件位于同一目录下,在启用 GUNICORN_MEDIA=1 或使用 nginx 等 Web 服务器提供静态文件服务时,数据库可被公开下载。

漏洞详情

  • CVE 编号:CVE-2026-23838
  • 漏洞类型:CWE-538(文件和目录信息暴露)
  • CVSS 评分:8.7(HIGH,高危)
  • 影响版本:Tandoor Recipes 在 NixOS 上使用默认配置的 23.05 ≤ version < 26.05 版本

影响范围

该漏洞影响所有在 NixOS 上部署 Tandoor Recipes 并满足以下条件的系统:

  • 使用默认配置(即未自定义 MEDIA_ROOT
  • 使用 SQLite 作为后端数据库
  • 启用了通过 Web 服务器(如 Gunicorn 或 nginx)直接提供媒体文件服务的功能

注意:NixOS 26.05 及更高版本已将 MEDIA_ROOT 默认值更改为数据目录下的子目录,但仅对 system.stateVersion ≥ 26.05 的新配置生效。旧配置仍需手动修复。

风险分析

攻击者无需任何身份认证即可通过 HTTP 请求直接下载 db.sqlite3 文件,从而获取完整的数据库内容,包括用户凭证(若未加密存储)、食谱数据、个人设置等敏感信息。由于攻击向量为网络(AV:N)、无需用户交互(UI:N)、无需权限(PR:N)且攻击复杂度低(AC:L),该漏洞极易被自动化工具批量利用,造成大规模数据泄露。

修复建议

  • 升级至 NixOS 26.05 或更高版本,并确保 system.stateVersion 设置为 26.05 或更新,以自动应用安全的 MEDIA_ROOT 配置。
  • 对于无法升级的系统,推荐手动将 MEDIA_ROOT 配置为数据目录下的子目录(例如 /var/lib/tandoor-recipes/media),并将现有媒体文件迁移至该目录。
  • 临时缓解措施包括:在 Web 服务器(如 nginx)中显式禁止对 db.sqlite3 的访问,或切换至 PostgreSQL 等非文件型数据库(但后者不被官方推荐作为主要修复手段)。

参考链接