Weblate 威胁模型

范围:核心 Weblate web 程序、其与用户浏览器的交互、后端部件(web 服务器、WSGI、数据库、Redis、Celery)及和外部 VCS 的集成。假设:标准 Weblate 部署,有典型部件(nginx/Apache、Gunicorn/uWSGI、PostgreSQL、Redis、Celery)和用户角色(未经身份验证、翻译者、项目经理、管理员)。

系统描述和范围

Weblate 是构建在 Django 之上的开放源码的,基于 web 的本地化平台。它与 Git 仓库紧密集成来管理翻译并提供 CI/CD 样式的特性用于自动化、hooks、和 VCS 同步。

资产:

  • 机密性:翻译字符串、VCS 集成的 API 密钥/凭据、用户凭据(密码、双因素身份验证 secrets)、用户个人数据(电子信箱、名字)、会话令牌、审计日志和私密项目数据。

  • 完整性:翻译字符串内容、VCS 仓库完整性、项目和部件配置、用户权限、审计日志。

  • 可用性:Weblate web 界面、VCS 集成、数据库访问、后台任务处理。

  • 真实性/不可否认性:翻译提交历史、翻译的用户归因、管理操作的审计日志。

概念数据流动示意图

digraph translations { graph [fontname = "sans-serif", fontsize=10]; node [fontname = "sans-serif", fontsize=10, margin=0.1, height=0, style=filled, fillcolor=white, shape=note]; edge [fontname = "sans-serif", fontsize=10, dir=both]; "External user (browser)" -> "Web server (nginx/Apache)" [label="HTTPS"]; "Web server (nginx/Apache)" -> "Weblate application (WSGI, Celery)" [label="Internal API"]; "Weblate application (WSGI, Celery)" -> "Database (PostgreSQL, Redis)" [label="Database access"]; "Weblate application (WSGI, Celery)" -> "Internal VCS repository" [label="Filesystem access"]; "Weblate application (WSGI, Celery)" -> "External VCS repository" [label="Git/API"]; "Weblate application (WSGI, Celery)" -> "Logging (SIEM)" [label="GELF"]; }

信任边界

  • 互联网 ↔ Web 服务器:与防御第一线交互的公共互联网流量。

  • Web 服务器 ↔ Weblate 程序:反向代理/web 服务器和程序逻辑之间的通信。

  • Weblate 程序 ↔ 数据库 访问持久和缓存数据的程序逻辑。

  • Weblate 程序 ↔ 日志记录:创建日志的程序逻辑。

  • Weblate 程序 ↔ 内部 VCS 仓库:与 VCS 仓库本地副本交互的程序逻辑。

  • Weblate 程序 ↔ 外部 VCS 仓库:和外部代码托管平台联系的 Weblate。

  • 已验证身份的用户 ↔ 未验证身份的用户:web 程序内不同的权限等级。

威胁识别

部件/交互

STRIDE 威胁分类

威胁描述

潜在影响

Web服务器 (nginx/Apache)

拒绝服务

拒绝服务:攻击者用请求淹没服务器,使 Weblate 不可用。

丧失翻译可用性。

信息披露

配置暴露:错误配置的服务器暴露敏感文件(如 config 文件、私钥等)。

凭据、内部架构暴露。

篡改

恶意请求注入:攻击者将恶意数据注入 HTTP 标头或请求正文。

如后端未正确处理可能导致 SQL 注入、XSS、或其他注入。

Weblate 程序

伪造

用户冒充:攻击者获取对合法用户会话的访问(如通过会话劫持、被攻陷的凭据)。

未经授权的翻译、仓库访问。

(WSGI/Celery)

篡改

未经授权的翻译修改:恶意用户或遭利用的漏洞允许更改译文、项目配置或 VCS 集成设置。

不正确的翻译、破损的构建、通过 VCS 钩子的远程代码执行。

篡改

VCS 集成操控:攻击者操纵 Weblate 与 VCS 的交互(如,通过精心构造的仓库 URL 注入恶意 URL,如未清理将造成远程代码执行)。

目标项目的代码注入,数据渗出。

否认

未归因的更改:在没有正确归因到负责用户或系统情况下做出恶意改动。

审计和追责难度。

信息披露

敏感数据泄露:SQL 注入、不安全的 API 端点,或错误披露了敏感数据(如,其他用户的翻译、VCS 集成、服务器信息)。

隐私泄露、知识产权窃取。

信息披露

VCS 凭据暴露:Weblate 存储的 VCS 凭据(SSH 密钥、令牌)被攻击者访问。

直接访问集成的代码仓库。

拒绝服务

资源耗尽:攻击者触发的过多的后台任务或低效的数据库查询导致系统放慢或崩溃。

Weblate 不可用性。

权限提升

角色提升:普通的翻译者获得管理权限。

系统彻底被攻陷。

权限提升

命令注入:由于仓库 URL 或附加组件中不当的输入验证造成任意代码执行。

系统贡献、数据渗出。

数据库/Redis

篡改

数据损坏:数据库的直接访问允许修改翻译字符串、用户数据,或配置。

系统故障、数据完整性丢失。

信息披露

敏感数据访问:对数据库/Redis 未经授权的访问暴露所有存储的数据(凭据、翻译记忆库、用户个人资料)。

重大数据泄露。

拒绝服务

数据库耗尽:攻击者用查询淹没数据库,或消耗所有的 Redis 内存/连接。

Weblate 不可用性。

VCS 集成

篡改

来自 Weblate 的恶意提交:被攻陷的 Weblate 向上游仓库推送恶意更改。

将恶意软件/后门引入目标项目。

否认

虚假的提交归因:Weblate 提交更改被归因到错误的用户(如管理员在翻译者不同意情况下强制将一个提交以翻译者名称提交)。

追责问题。

用户交互

伪造

钓鱼/社会工程:攻击者欺骗用户揭示 Weblate 或关联的 VCS 账户的凭据。

账户攻陷。

(Web 用户界面)

篡改

跨站脚本 (XSS):恶意脚本注入翻译或用户个人资料在其他用户的浏览器中执行。

会话劫持、凭据偷窃、污损。

信息披露

点击劫持/UI 覆盖:攻击者将恶意 UI 元素遮盖在 Weblate 上,欺骗用户进行无意的操作。

未经授权的操作、数据操纵。

信息披露

UI 中的敏感数据:由于授权漏洞在UI 中无意地暴露敏感数据(如其他用户的电子邮箱)。

隐私泄露。

迁移策略

  • 身份验证&授权:
    • 强密码政策,见 密码政策

    • 强制的双因素身份认证,见 双因素身份验证

    • 强健的会话管理。

    • 基于角色的访问控制(RBAC)来强制最小权限(如翻译者只能编辑翻译,不能更改项目配置),见 访问控制

    • 和外部身份提供商集成(SAML、OAuth、LDAP),见 身份验证

  • 输入验证和输出解码:
    • 严格验证所有用户输入(表单、API 请求、VCS URL 等)防止注入攻击(SQL 注入、命令注入、XSS)。

    • 对展示在 web 用户界面上的所有由用户提供的数据进行上下文感知的输出解码以防止 XSS。

  • VCS 集成安全性:
    • VCS 凭据的最小权限原则(如,在可能的地方只读访问,限制令牌的适用范围)。

    • 版本控制系统凭据的安全存储。

    • 严格清洁和验证所有来自 VCS 的数据(如文件名、分支名、可能被展示的提交信息)。

    • 安全执行 Git/Mercurial 命令(避免带用户控制输入的 shell 执行)。

  • 数据保护:
    • 敏感数据的静态加密。

    • 加密传输数据(将 TLS/SSL 用于所有 HTTP/S 和 VCS 通信)。

    • 数据库强化(Weblate 用户的最小权限、强密码)。

  • 系统强化:
    • 定期给操作系统、Weblate、所有依赖项打补丁。

    • 操作系统上 Weblate 用户账户的最小权限原则。

    • 网络隔离(如将数据库/Redis 和公共访问隔开)。

    • 使用 WAF(Web 应用防火墙)。

  • 记录和监控:
    • 所有安全相关事件的综合性审计记录(登录、失败的登录、权限更改、关键配置更改、VCS 操作)。

    • 安全事件的中心化记录和警报,如 Graylog 日志管理

  • 安全开发实践:
    • 聚焦安全的代码审核。

    • 静态程序安全测试(SAST)和动态程序安全测试(DAST),见 Weblate 源代码

    • 依赖项漏洞扫描,见 依赖项

    • 定期安全审计和渗透测试。

  • 错误处理:
    • 不揭示敏感内部信息的一般性错误消息。