logo NodeSeekbeta

Komari 1.0.4-fix2 / fix3 WebSocket 安全更新与兼容说明

背景

最近不少用户反馈升级到 1.0.4-fix2 后 WebSocket 连接报 403。

为什么:新增了 Origin 与 Host 校验 用于阻止 WebSocket 劫持攻击,而部分反向代理未正确转发 Host / Origin / 协议头,导致合法请求被拒。

攻击原理简述

场景:你已登录后台(浏览器有有效 Cookie ),此时访问了一个恶意站点。该站点用隐藏的 JS 发起 WebSocket 连接到你的面板地址:

如果服务器不校验 Origin,浏览器会自动带上你的会话凭据,攻击者页面即可:

  • 打开远程终端 / 执行任务
  • 发送指令、开启代理、收集信息

这是“跨站劫持 + 已登录会话滥用”组合。

示例:

<pre></pre>
<script>
const socket = new WebSocket("wss://<komari-addr>/api/admin/client/<target-uuid>/terminal");
socket.addEventListener("open", (event) => {
  const binaryBlob = new Blob(['uptime\n'], { type: 'application/octet-stream' });
  socket.send(binaryBlob);
});
socket.addEventListener("message", (event) => {
  event.data.text().then(x => {document.querySelector("pre").append(x)});
});
</script>

以上代码可以在你不知情的情况下对你的Agent执行uptime指令(uptime可以替换为其他内容)

1.0.4-fix2 做了什么

新增校验:只允许来自你自己域名页面内的 WebSocket 连接,阻挡第三方页面劫持。

1.0.4-fix3 新增回退开关

考虑到大量用户反代配置不规范,于是1.0.4-fix3通过环境变量引入显式关闭开关:

KOMARI_WS_DISABLE_ORIGIN=true

设置后将跳过校验,恢复旧行为。

安全提示

正常用户也无需过于紧张,这个漏洞属于定向利用:攻击者需要预先知道你的面板地址、你已登录,并诱导你访问其站点才可触发。但仍不建议长期关闭校验。

关闭校验 = 任何站点可诱导你浏览器发起受信任 WebSocket 操作

建议操作

修正反代:Host / Upgrade / Connection

12
12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72280位seeker

🎉欢迎新用户🎉