背景
最近不少用户反馈升级到 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
支持!明天就更新
其实把文档的反代配置加上宝塔默认的nginx配置,一起投喂给ai就生成新的反代配置了,还可以让ai随时调整
claw run部署的怎么更新呢
幸好rust ws库有提示,不然真不知道怎么连
BD
大佬,上传主题显示这种情况是啥https://photo.lily.lat/file/AgACAgQAAyEGAASLgSpZAAIHeGiYtPtDKFKMiw1XSC-FN6m9FL12AAJIxzEbFKzAUH220cfM_kQ0AQADAgADdwADNgQ.jpeg
@立秋 #6
配置反向代理最大上传大小,nginx默认是1M,超过1M会被nginx拦
@Doornail #7 已解决谢谢
用的文档里的nginx反代配置也不行吗?

负载通知不太理解,我这样设置是cpu负载在15分钟的80%时间里使用超过80%的意思吗?