Uptime Kuma服务端模板注入(SSTI)漏洞分析:通知模板导致任意文件读取
漏洞概述
在Uptime Kuma的某些通知类型(如Webhook、Telegram)中,send()函数允许用户控制renderTemplate输入,这导致了服务端模板注入(SSTI)漏洞,可被利用来读取服务器上的任意文件。
技术细节
根本原因
Uptime Kuma通过renderTemplate()渲染用户控制的模板时存在安全问题。该函数实例化Liquid模板引擎并在未进行清理的情况下解析模板参数:
|
|
在某些通知流程中,send()实现直接将用户可编辑的字段传递给renderTemplate():
|
|
由于通知可由用户编辑,并且由Liquid引擎在没有适当沙箱或允许操作白名单的情况下进行渲染,攻击者可以提供精心构造的模板,导致服务器读取任意文件。
漏洞利用
概念验证(PoC)
- 打开Uptime Kuma → 通知 → 添加或编辑现有的Webhook通知
- 将通知类型设置为Webhook,并将请求体设置为自定义体
- 将以下JSON粘贴到自定义请求体中:
|
|
- 点击测试
- 您的webhook将接收到文件内容
影响评估
这是一个需要身份验证的服务端模板注入(SSTI)漏洞,允许经过身份验证的用户在服务器上执行任意文件读取操作。
安全指标
- 严重程度: 中等
- CVSS评分: 6.5
- 攻击向量: 网络
- 所需权限: 低权限
- 用户交互: 无需
相关弱点
- CWE-36: 绝对路径遍历
- CWE-1336: 模板引擎特殊元素中和不当