DeepAudit 安全审计报告
报告信息
| 属性 | 内容 |
|---|---|
| 项目名称 | FastAPI |
| 任务 ID | 3b5106df... |
| 生成时间 | 2026-07-07 09:14:50 |
| 任务状态 | COMPLETED |
| 耗时 | 9.1 分钟 |
执行摘要
安全评分: 0/100 [未通过] 严重 - 需要立即进行修复
漏洞发现概览
| 严重程度 | 数量 | 已验证 |
|---|---|---|
| 高危 (HIGH) | 8 | 0 |
| 中危 (MEDIUM) | 2 | 1 |
| 低危 (LOW) | 3 | 0 |
| 总计 | 15 | 1 |
审计指标
- 分析文件数: 926 / 926
- Agent 迭代次数: 66
- 工具调用次数: 91
- Token 消耗: 1,848,526
- 生成的 PoC: 1
高危 (High) 漏洞
HIGH-1: fastapi/middleware/cors.py - CORS 配置可能过于宽松导致跨域安全问题
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/middleware/cors.py - CORS 配置可能过于宽松导致跨域安全问题
HIGH-2: fastapi/templating.py - Jinja2 模板渲染,可能存在 SSTI 风险
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/templating.py - Jinja2 模板渲染,可能存在 SSTI 风险
HIGH-3: fastapi/staticfiles.py - 静态文件服务,可能存在路径遍历风险
[未验证] | 类型: path_traversal
AI 置信度: 60%
漏洞描述:
fastapi/staticfiles.py - 静态文件服务,可能存在路径遍历风险
HIGH-4: fastapi/routing.py - 路由处理中的请求参数解析和依赖注入,可能存在注入风险
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/routing.py - 路由处理中的请求参数解析和依赖注入,可能存在注入风险
HIGH-5: fastapi/encoders.py - JSON 序列化器,可能暴露敏感数据
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/encoders.py - JSON 序列化器,可能暴露敏感数据
HIGH-6: fastapi/security/http.py:84-91 - HTTP Basic 认证中 base64 解码用户凭据,密码以明文传输
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/security/http.py:84-91 - HTTP Basic 认证中 base64 解码用户凭据,密码以明文传输
HIGH-7: fastapi/security/oauth2.py:46-60 - OAuth2PasswordRequestForm 接收明文密码,需注意传输安全
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/security/oauth2.py:46-60 - OAuth2PasswordRequestForm 接收明文密码,需注意传输安全
HIGH-8: fastapi/dependencies/utils.py:88-100 - 文件上传处理,检查 multipart 库是否正确安装
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
fastapi/dependencies/utils.py:88-100 - 文件上传处理,检查 multipart 库是否正确安装
中危 (Medium) 漏洞
MEDIUM-1: Xss in docs.py
[已验证] [含 PoC] | 类型: xss
AI 置信度: 85%
漏洞描述:
在 fastapi/openapi/docs.py 的 get_redoc_html 函数中,title、openapi_url、redoc_js_url、redoc_favicon_url 等参数通过 f-string 直接插入 HTML 模板中,未进行 HTML 转义。openapi_url 由 root_path + self.openapi_url 拼接而成,其中 root_path 来自请求的 scope(req.scope.get('root_path', ''))。
Impact: 攻击者可以在 ReDoc 页面中执行任意 JavaScript 代码,可能导致会话劫持、CSRF 攻击、信息泄露等。利用条件需要攻击者能够控制 root_path。
漏洞代码:
html = f"""
<!DOCTYPE html>
<html>
<head>
<title>{title}</title>
<link rel="shortcut icon" href="{redoc_favicon_url}">
</head>
<body>
<redoc spec-url="{openapi_url}"></redoc>
<script src="{redoc_js_url}"> </script>
"""
修复建议:
对插入 HTML 模板的所有参数进行 HTML 转义。可以使用 html.escape() 或类似的转义函数。建议使用模板引擎(如 Jinja2)的自动转义功能。
概念验证 (PoC):
通过操纵 X-Forwarded-Prefix 头部注入 XSS payload
复现步骤:
- 发送 HTTP 请求到 /redoc 路径
- 设置 X-Forwarded-Prefix 头部为恶意 payload
- 观察响应中是否包含未转义的 payload
PoC 代码:
curl -H 'X-Forwarded-Prefix: "><script>alert(1)</script>' http://target/redoc
MEDIUM-2: 依赖注入系统可能被滥用
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
依赖注入系统(solve_dependencies)处理用户输入并注入到路由处理函数中,如果依赖项处理不当可能导致安全风险。
低危 (Low) 漏洞
LOW-1: Other in http.py
[未验证] | 类型: other
AI 置信度: 95%
漏洞描述:
在 fastapi/security/http.py 中,HTTPBasic 类使用 base64 解码 Authorization header 中的凭据。Base64 是编码而非加密,密码以明文形式传输,存在中间人攻击风险。
Impact: 无。这是 HTTP Basic 认证的标准实现方式。
漏洞代码:
data = b64decode(param).decode("ascii")
username, separator, password = data.partition(":")
修复建议:
始终使用 HTTPS 来保护 HTTP Basic 认证的传输安全。
LOW-2: Other in oauth2.py
[未验证] | 类型: other
AI 置信度: 95%
漏洞描述:
在 fastapi/security/oauth2.py 中,OAuth2PasswordRequestForm 接收 username 和 password 作为表单字段,密码以明文形式传输。
Impact: 无。这是 OAuth2 密码模式的标准实现方式。
漏洞代码:
def __init__(
self,
grant_type: str = Form(default=None, regex="password"),
username: str = Form(),
password: str = Form(),
):
修复建议:
始终使用 HTTPS 来保护 OAuth2 密码传输安全。
LOW-3: Jinja2 模板渲染可能引入 SSTI(取决于开发者)
[未验证] | 类型: other
AI 置信度: 70%
漏洞描述:
fastapi/templating.py 仅重新导出 Starlette 的 Jinja2Templates。如果开发者将用户输入直接传递到 Jinja2 模板中而不进行转义,可能导致服务端模板注入(SSTI)漏洞。这不是 FastAPI 本身的漏洞。
漏洞代码:
from starlette.templating import Jinja2Templates as Jinja2Templates
修复建议:
建议开发者使用 Jinja2 的自动转义功能,避免将用户输入直接作为模板内容渲染。使用 TemplateResponse 时确保上下文数据经过适当的清理。
修复优先级建议
基于已发现的漏洞,我们建议按以下优先级进行修复:
- 高优先级: 在 1 周内修复 8 个高危漏洞
- 中优先级: 在 2-4 周内修复 2 个中危漏洞
- 低优先级: 在日常维护中处理 3 个低危漏洞
本报告由 DeepAudit - AI 驱动的安全分析系统生成