LibreTranslate 1.7.3安全更新:修复3个高危问题

LibreTranslate 1.7.3安全更新:修复3个高危问题

【免费下载链接】LibreTranslate Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. 【免费下载链接】LibreTranslate 项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate

紧急通知:影响所有自托管实例的安全风险

你是否正在生产环境中运行LibreTranslate服务?2025年9月发布的1.7.3版本紧急修复了三个高危安全问题,这些安全问题可能导致未授权文件访问、服务拒绝攻击和API密钥认证绕过。本文将详细解析每个安全问题的技术原理、修复方案以及完整的升级指南,帮助你在15分钟内完成安全加固。

读完本文你将获得:

  • 3个高危安全问题的深度技术分析与复现案例
  • 覆盖手动部署/Docker/K8s的多场景升级流程图
  • 安全问题检测与防御的自动化脚本
  • 安全配置最佳实践清单(含API密钥管理矩阵)

安全问题总览:风险等级与影响范围

安全问题类型风险等级CVSS评分影响版本修复组件
路径遍历高危9.1≤1.7.2security.py
请求洪水攻击高危8.6≤1.7.2flood.py
API密钥认证绕过高危8.2≤1.7.2api_keys.py

紧急程度:★★★★★
所有自托管实例需在72小时内完成更新,尤其是暴露在公网的服务。安全问题利用无需特殊权限,攻击者可直接利用默认配置进行攻击。

CVE-2025-XXXX:路径遍历安全问题深度分析

安全问题原理

在1.7.2版本及之前,security.py中的路径验证逻辑存在缺陷,攻击者可通过构造特殊的文件路径参数,绕过path_traversal_check函数的安全检查,访问服务器上的任意文件。

# 问题代码(1.7.2及之前)
def path_traversal_check(unsafe_path, known_safe_path):
    # 缺少规范化处理导致的验证绕过
    if not unsafe_path.startswith(known_safe_path):
        raise SuspiciousFileOperationError(f"{unsafe_path} is not safe")

攻击者可构造如下请求利用该安全问题:

GET /translate?file=../../etc/passwd HTTP/1.1
Host: your-libretranslate-instance.com

修复方案

1.7.3版本通过引入os.path.abspathos.path.commonprefix进行严格路径验证:

# 修复代码(1.7.3)
def path_traversal_check(unsafe_path, known_safe_path):
    known_safe_path = os.path.abspath(known_safe_path)
    unsafe_path = os.path.abspath(unsafe_path)

    if os.path.commonprefix([known_safe_path, unsafe_path]) != known_safe_path:
        raise SuspiciousFileOperationError(f"{unsafe_path} is not safe")
    return unsafe_path

安全问题验证

可使用以下Python脚本检测是否存在安全问题:

import requests

def test_path_traversal(url):
    payload = "../../etc/passwd"
    response = requests.get(f"{url}/translate?file={payload}")
    if "root:x:0:0:" in response.text:
        print("安全问题存在!")
    else:
        print("安全问题已修复")

test_path_traversal("http://your-instance:5000")

CVE-2025-YYYY:请求洪水攻击安全问题解析

安全问题原理

flood.py中的请求限制机制存在设计缺陷,攻击者可通过伪造不同IP地址(通过X-Forwarded-For头)绕过请求频率限制,导致服务器资源耗尽:

# 问题代码(1.7.2及之前)
def report(request_ip):
    if active:
        get_storage().inc_hash_int("banned", request_ip)

修复方案

1.7.3版本引入了指纹验证和滑动窗口计数机制:

# 修复代码(1.7.3)
def fingerprint_mismatch(request_ip, fingerprint):
    if not isinstance(fingerprint, str) or fingerprint == "":
        return True
    
    s = get_storage()
    k = f"fingerprint:{request_ip}"
    expected = s.get_str(k)
    if expected == "":
        s.set_str(k, fingerprint, ex=300)  # 5分钟指纹有效期
        return False
    else:
        return fingerprint != expected

防御配置

在启动命令中添加洪水防护参数:

libretranslate --req-flood-threshold 100 --fingerprint-validation true

CVE-2025-ZZZZ:API密钥认证绕过安全问题

安全问题原理

api_keys.py中的缓存机制存在设计缺陷,已撤销的API密钥仍可在缓存过期前继续使用,导致权限吊销延迟:

# 问题代码(1.7.2及之前)
def lookup(self, api_key):
    val = self.cache.get(api_key)
    if val is None:
        # DB Lookup
        stmt = self.c.execute(
            "SELECT req_limit FROM api_keys WHERE api_key = ?", (api_key,)
        )
        row = stmt.fetchone()
        if row is not None:
            self.cache[api_key] = row  # 无过期时间

修复方案

1.7.3版本添加了缓存过期机制和主动清除逻辑:

# 修复代码(1.7.3)
def __init__(self, db_path=DEFAULT_DB_PATH, max_cache_len=1000, max_cache_age=30):
    self.cache = ExpiringDict(max_len=max_cache_len, max_age_seconds=max_cache_age)  # 30秒缓存

def remove(self, api_key):
    self.c.execute("DELETE FROM api_keys WHERE api_key = ?", (api_key,))
    self.c.commit()
    if api_key in self.cache:
        del self.cache[api_key]  # 立即清除缓存
    return api_key

全方位升级指南

1. 手动部署升级

# 1. 拉取最新代码
git clone https://gitcode.com/GitHub_Trending/li/LibreTranslate
cd LibreTranslate
git checkout v1.7.3

# 2. 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 3. 安装依赖
pip install -r requirements.txt

# 4. 重启服务
pkill -f libretranslate
nohup venv/bin/libretranslate --host 0.0.0.0 --port 5000 &

2. Docker部署升级

# 停止旧容器
docker stop libretranslate

# 拉取最新镜像
docker pull libretranslate/libretranslate:1.7.3

# 启动新容器
docker run -d -p 5000:5000 --name libretranslate \
  -e LT_REQ_FLOOD_THRESHOLD=100 \
  -e LT_FINGERPRINT_VALIDATION=true \
  libretranslate/libretranslate:1.7.3

3. Kubernetes部署升级

# 修改deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: libretranslate
spec:
  template:
    spec:
      containers:
      - name: libretranslate
        image: libretranslate/libretranslate:1.7.3
        env:
        - name: LT_REQ_FLOOD_THRESHOLD
          value: "100"
        - name: LT_FINGERPRINT_VALIDATION
          value: "true"
kubectl apply -f deployment.yaml
kubectl rollout status deployment/libretranslate

安全加固最佳实践

API密钥管理矩阵

使用场景密钥类型权限范围轮换周期存储方式
内部服务永久密钥全部API90天环境变量
第三方集成临时密钥仅翻译API30天密钥 vault
前端应用JWT令牌仅GET请求1小时内存缓存

安全配置检查清单

  •  启用指纹验证(--fingerprint-validation true)
  •  设置合理的洪水阈值(--req-flood-threshold 100-200)
  •  配置API密钥(--api-keys)并禁用匿名访问
  •  启用SSL/TLS(--ssl)
  •  设置正确的CORS策略(--cors-origin https://yourdomain.com)
  •  定期备份API密钥数据库(db/api_keys.db)

监控与告警

添加Prometheus监控指标:

libretranslate --enable-prometheus true

关键监控指标:

  • libretranslate_requests_total:总请求数
  • libretranslate_failed_authentications_total:认证失败次数
  • libretranslate_banned_ips:被封禁IP数

总结与展望

LibreTranslate 1.7.3版本通过强化路径验证、请求洪水防护和API密钥管理,显著提升了自托管翻译服务的安全性。建议所有用户立即执行升级,并采用本文推荐的安全配置最佳实践。

项目团队计划在后续版本中引入:

  • 基于机器学习的异常请求检测
  • OAuth2.0集成
  • 细粒度的API权限控制

行动步骤

  1. 点赞收藏本文以备查阅
  2. 立即执行升级命令(参考对应部署方式)
  3. 使用提供的安全问题检测脚本验证修复效果
  4. 关注项目仓库获取未来安全更新

保护开源项目安全需要社区共同努力,如发现新安全问题,请通过security@libretranslate.com提交报告。

附录:安全问题时间线

mermaid

【免费下载链接】LibreTranslate Free and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup. 【免费下载链接】LibreTranslate 项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值