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

审计指标

高危 (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

复现步骤:

  1. 发送 HTTP 请求到 /redoc 路径
  2. 设置 X-Forwarded-Prefix 头部为恶意 payload
  3. 观察响应中是否包含未转义的 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. 高优先级: 在 1 周内修复 8 个高危漏洞
  2. 中优先级: 在 2-4 周内修复 2 个中危漏洞
  3. 低优先级: 在日常维护中处理 3 个低危漏洞

本报告由 DeepAudit - AI 驱动的安全分析系统生成