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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/1402307692/cve-2026-mastodon-streaming-crlf-injection
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试学习与教育
GitHub1402307692/cve-2026-mastodon-streaming-crlf-injection

CVE-2026-Mastodon-Streaming-CRLF-Injection

# Mastodon 流媒体服务器安全漏洞 PoC - CVE-2026-Mastodon-Streaming-CRLF-Injection

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库网站
24个月前尚未审核
分享

CVE-2026-XXXXX: Mastodon Streaming Server — HTTP 响应头注入(CRLF 注入)

漏洞概览

项目详情
CVE 编号CVE-2026-XXXXX
影响产品Mastodon(流媒体服务器)
影响版本≤ 4.5.9
漏洞文件streaming/index.js 第 188–206 行
漏洞类型HTTP 响应头注入 / CRLF 注入
CWECWE-74:输出特殊元素不当中和
CVSS 3.16.5(中危)
攻击方式网络远程,无需认证

漏洞描述

当 WebSocket 升级请求鉴权失败时,Mastodon 流媒体服务器在 streaming/index.js 第 188–206 行捕获异常,并通过 socket.end() 手动拼接 HTTP 响应字符串的方式,将 errorMessage 直接写入 X-Error-Message 响应头,未对回车符(\r)和换行符(\n)进行过滤。

攻击者可利用 \r\n 序列注入任意 HTTP 响应头,或执行 HTTP 响应拆分攻击。

漏洞代码

root@kitploit:~
// streaming/index.js 第 188–206 行
const { statusCode, errorMessage } = extractErrorStatusAndMessage(err);

const headers = {
  'Connection': 'close',
  'Content-Type': 'text/plain',
  'Content-Length': 0,
  'X-Request-Id': request.id,
  'X-Error-Message': errorMessage   // ← 用户可控数据直接写入原始 HTTP 头
};

socket.end(
  `HTTP/1.1 ${statusCode} ${http.STATUS_CODES[statusCode]}\r\n` +
  `${Object.keys(headers).map((key) => `${key}: ${headers[key]}`).join('\r\n')}\r\n\r\n`
);

影响范围

  • 未授权远程攻击者可在 HTTP 响应中注入任意头
  • 可导致 HTTP Response Splitting(响应拆分/缓存投毒)
  • 泄露内部错误信息

复现步骤

环境

  • Mastodon 版本:4.5.9
  • Streaming 服务端口:4000(默认)

验证命令

root@kitploit:~
curl -i -X GET \
  -H "Upgrade: websocket" \
  -H "Connection: Upgrade" \
  -H "Sec-WebSocket-Version: 13" \
  -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
  http://<目标>:4000/api/v1/streaming/user

返回 HTTP 401,X-Error-Message: Missing access token,说明存在漏洞。


修复方案

方案一:过滤 CRLF(推荐)

root@kitploit:~
const sanitizedMessage = String(errorMessage || '')
  .replace(/\r/g, '%0D')
  .replace(/\n/g, '%0A');

方案二:使用 Node.js setHeader() API

root@kitploit:~
res.writeHead(statusCode, headers);
res.end();

时间线

日期事件
2026-04-22漏洞发现,PoC 编写完成
2026-04-22通知官方(邮件投递失败)
2026-04-22提交 MITRE CVE / VDB

免责声明:本 PoC 仅供安全研究和教育目的使用。未经授权禁止使用。

下载工具