(推荐使用最新 Chrome 内核浏览器) https://mikewang000000.github.io/ClashScan/
代码开源在 GitHub ,页面部署在 GitHub Pages 上。
Clash 是一个比较常见的代理软件,有很多衍生版本和 GUI 程序。
不过我最近才发现它是允许 CORS (跨域)的,这带来了不小的安全隐患。
再加上很多 GUI 默认不加 Secret 进行身份验证,即使运行在 127.0.0.1 ,也能被外部网站随时调用。
如果您没有修改默认配置,值得检测一次。
附:检测工具的原理 /t/1076961
1
yyzh 48 天前 via Android
|
2
ByteCat 48 天前
好慢的扫描
|
3
Configuration 48 天前 1
探测 127.0.0.1 的,循环端口。。。scannedPorts++; 难怪这么慢
|
4
GeekGao 48 天前
确实是个大问题
|
5
yanyao233 48 天前 1
草,这确实有点危险了
|
6
mikewang OP @yyzh 手机端不用扫了(检测电脑端的
@Configuration @ByteCat 实际上常用端口排在最前面的,十秒内没扫到基本上是安全的。 后面虽然会扫整个 65535 ,实际因为浏览器性能低,而且会漏,作用不大。只是作为理论参考。 |
7
oneisall8955 48 天前
openclash 透明代理没有检测到
|
8
mikewang OP @oneisall8955 透明代理等不在 127.0.0.1 上的不会检测到。本质是探测 Clash 在本机的 API 端口。
|
9
lower 48 天前
太慢了,懒得等了
|
10
ffnil 48 天前
这 Chrome 为啥不阻止网站访问 127.0.0.1
|
11
chinni 48 天前
哦扫描本地端口啊 我代理都是在局域网的.. 电脑上啥都没装(
|
12
leilinJune 48 天前
应该改什么配置
|
13
yjxjn 48 天前
那怎么避免呢???如何修改默认配置?
|
14
s4d 48 天前
有点吓人哦,怎么把我服务器的配置给读出来了?什么原理?
|
15
epiphyllum 48 天前
一个解决方法:使用 NoScript 浏览器扩展屏蔽网页对本地网络发起的请求
|
16
asuraa 48 天前
路由上跑的,检测不到
|
17
mikewang OP @leilinJune @yjxjn @s4d 原理是默认端口,并且 API 没有上密码,就被读了。
在 yaml 里面,修改下面两个配置: external-controller: '127.0.0.1:9090' secret: 'xxxxxxx' 把 7890 改成随机高位端口,避免扫描; secret 改为随机密码(如果没有这个配置手动加上)。 --- 如果被检测并读出服务器配置了,那么你之前可能一直在裸奔( |
18
gzlock 48 天前 7
|
19
mikewang OP #10 @ffnil > 这 Chrome 为啥不阻止网站访问 127.0.0.1
一个是本地调试很多都是在 127.0.0.1 ,另外就是向 QQ 一键登录等功能实际上也是在 127.0.0.1 上的,不过它的接口有鉴权。 |
20
ewiglicht 48 天前
|
21
LandCruiser 48 天前
@s4d clash 的 gui 你点击打开,相当于在本机运行了一个程序在 127.0.0.1 的某个端口,知道一些 clash 的内部接口,比如获取节点的,然后调用这个接口可以了。
http://127.0.0.1:9097/proxies 比如这个接口,就可以获取 clash 的所有代理节点 |
22
gzlock 48 天前
诸君,刚刚实测把外部控制端口设置为 0 ,即可解决这个问题,clash verge rev 提供的第三方 webui 也无法访问到 clash 核心的数据了
代理功能依然可用,但不确定这些 gui 软件是不是也使用外部控制来控制 clash 核心的,所以把这个信息发出来让大家参与找出 [把外部控制端口设置为 0] 会不会引起其它问题 |
23
katsusan 48 天前
我看了目前在用的机场给 clash 下发的配置都开了这个 external-controller 还是用的默认 9090 端口没加鉴权,
这么大个漏洞居然现在才发现( ╯□╰ ) |
26
Goooooos 48 天前
127.0.0.1 的还好
openclash 那个如果不是 127.0.0.1 的才危险 |
27
chesha1 48 天前
这速度也太慢了
|
28
ochatokori 48 天前 via Android
再加个把常见网关地址都扫了
|
29
LandCruiser 48 天前
其实我觉得问题不大,上上外网又不是什么杀头的罪,真要较真,运营商那什么都能查到。
|
30
ewiglicht 48 天前
貌似原理是循环请求?
因为默认配置无加密,所以请求成功了就知道用户使用了代理软件,甚至根据 api 获取完整配置信息。 因为我修改了控制台的密码,所以检测不出来。 但是我记得如果有密码,HTTP 的响应好像是 403 还是什么来着,而不是无响应,能不能也根据这个判断是否使用了代理类软件。。。 |
31
Ashore 48 天前 via Android
用手机 chrome 请求电脑版网页,能检测出来。。
|
34
llsquaer 48 天前
这么说本机加个防火墙是不是就好了?
|
35
lekai63 48 天前
所以感觉不是改 7890 端口。而是 external 相关配置咯,端口和 secret
|
36
mikewang OP |
37
czfy 48 天前
感觉和好久之前提过的这个情况类似?不过看起来是没什么人重视
https://www.v2ex.com/t/946991 |
38
nyxsonsleep 48 天前 1
把 web 控制直接改成其他地址就行了,比如 127.0.0.2 ,关掉这个控制功能。
没密钥的控制端口,来点漏洞都可以注入攻击了。 |
39
mouyase 48 天前
还以为是什么高端的骚操作,原来只是扫本机的 clash 的 webui 和 proxy 端口……
|
40
jqtmviyu 48 天前
singbox 没扫出来.
其实把常见的客户端端口 9090 9999 之类的扫一扫就行了 |
41
crackidz 48 天前
现在还有一个问题是 Clash Verge Rev 之类的 GUI 客户端覆写了这部分设置,secret 没有生效。你需要去 GUI 界面的设置里调整一下对应的 WebUI 设置。
|
42
0o0O0o0O0o 48 天前
1. 本站曾经有人提醒过 /t/946991 ,我可能也在一些回复里提醒过
2. 想跑题联动一下近期的一个热门帖 /t/1075187 ,不知道有没有哪些朋友看那个帖子 OP 和 @4KMOMhIkocgLELMt 提到的安全隐患觉得不以为然,然而在这个帖子一测试又觉得有被吓到😂 |
43
addenvex 48 天前
|
44
wniming 48 天前
不准,我没用 clash 也能检测成 clash
|
45
mikewang OP |
46
loveqianool 48 天前 via Android 1
http://sing-box.sagernet.org/zh/configuration/experimental/clash-api
access_control_allow_origin 自 sing-box 1.10.0 起 允许的 CORS 来源,默认使用 *。 要从公共网站访问私有网络上的 Clash API ,必须在 access_control_allow_origin 中明确指定它而不是使用 *。 access_control_allow_private_network 自 sing-box 1.10.0 起 允许从私有网络访问。 要从公共网站访问私有网络上的 Clash API ,必须启用 access_control_allow_private_network 。 |
47
ko20 48 天前
我用的局域网当中的某台机器部署的 clash 暴露出来的 http/https/socks5 代理,然后使用 switchy omega 插件添加 socks5 proxy profile 的。没有检测到 clash
|
48
RyougiShiki 48 天前 1
检测到了,订阅信息都出来了。
|
49
ziseyinzi 48 天前
再加几个常用的路由/旁路由网关地址
|
50
shitshit666 48 天前
是时候写个蜜罐了,看看是谁偷偷检测了 clash
|
51
TossPig 48 天前
我还以为能扫到我旁路由上的 clash ,结果啥都没监测到
|
52
proxytoworld 48 天前
@shitshit666 蜜罐已经自动化利用 cfw 漏洞了...更别说扫描 clash 端口
|
53
vvhy 48 天前
firefox 上被 uBlock Origin 拦截了,关了 ub 之后也被 CORS 拦截了
不会真有人不加密码跑在公网上吧 https://en.fofa.info/result?qbase64=ImV4dGVybmFsLWNvbnRyb2xsZXI6IDkwOTAi |
54
kenvix 48 天前
TLDR:
如果没开管理端口 secret ,会直接扫出正在打开的网站和节点名称和地址信息 开了 secret 能知道你在用,但无法获取隐私信息 |
55
hoofei 48 天前 1
被检测到了
|
56
shizhibuyu2023 48 天前 1
|
57
YCCD 48 天前
|
58
liuzimin 48 天前 via Android
你们说的什么外部控制端口?在哪里设置?我只知道 7890 那个。
|
59
mikewang OP #56 @shizhibuyu2023
部分 clash 客户端,默认配置下(默认端口,无密码验证): 1. 即使 clash 端口不暴露外部,运行在本地,外部网站也能通过网页调用,读取或者修改 clash 配置; 2. 如果是老版本 clash 核心,利用这种方法,还可以配合( CVE-2023-24205 )漏洞,控制整台电脑。 如果加了密码,但保持默认端口: 1. 外部网站也能通过网页调用,根据不同的报错情况,推断出你在使用 clash 。 ================ #57 @YCCD 好的反馈!我在 macOS Safari 上测试了一下,Safari 不允许从 https 页面上发起 http 请求。 所以是检测不到的。但是如果 GitHub Pages 是 http 的,那就可以调用了。 |
61
venompool88 48 天前
配置文件里设置 secret 还没用,要在设置里添加才行,订阅拉取的配置文件被软件覆盖掉了
|
62
adsltsee94 48 天前
被检测到了,要怎么搞?
|
63
WhatTheBridgeSay 48 天前 3
|
64
WhatTheBridgeSay 48 天前
建议在检测页上稍微写一点技术原理,比如这个页面仅仅是通过扫描 127.0.0.1 、遍历端口号的方式查找 clash 及其衍生分支所使用的 external-controller 来确认是否正在使用 clash 。
而不是仅神秘兮兮一句”任何网站都能检测您是否正在使用 Clash 。“,这种表述只会给不明所以的吃瓜群众带来不必要恐慌。 很多情况都会影响判断结果,并且也不一定会造成实际危害。比如 uBlock 之类的拦截器订阅了 Block Outsider Intrusion into LAN 之类的规则,或者干脆浏览器安全策略就直接禁止 FQDN 网站向私有 IP 发起网络请求,并且还有可能各种 GUI 面板给 external-controller 设置了随机密码等等等等实际完全没有危害的情况。 |
65
y1y1 48 天前 via iPhone
跨域不被挡吗?
|
66
LeoAshton 48 天前 1
算是挺恶性的漏洞了,clash-verge-rev 默认情况下不设置 secret 是没想到的,建议开个 issue 跟开发者反馈一下
|
68
ltkun 48 天前
扫描了一个小时 50% 虽然我不用 clash 哈
|
69
yexian 48 天前
最新的 Clash for Windows ?什么时候更新了,我还在用很早的版本
|
70
gzeng17291 48 天前
把 clash api 的端口给 block 就监测不出了
|
71
jhiiii 47 天前
还好还好
|
72
katana97 47 天前
未发现 Clash,但我是用了的,而且就在 127.0.0.1:7893
|
73
blacklinux 47 天前
测了一下,无法发现
linux 环境,Clash 在 windows 里,两台物理机 |
74
ZeroDu 47 天前
这个被人讲出来有一年了吧,建议还是注明一下。不然以为又是啥大新闻
|
75
JingHG 47 天前
半小时了还在 70%
|
76
xxxxxyz 47 天前
(还用过 op 写的抢座哈哈哈
|
77
ZeroDu 47 天前
|
78
marc2017 47 天前
感谢提醒,设了密码好了,不然点订阅节点都给我干出来了。
|
79
ihciah 47 天前
我记得以前某个客户端,api 甚至默认监听 0.0.0.0 ,局域网内即可直接拿到配置信息
|
80
asdjgfr 47 天前
clash-verge-rev 默认配置确实被扫到了服务器的配置,必须要在设置里手动设置外部控制器的配置才行,感谢楼主分享
|
81
gengGui 47 天前
还没尝试检测,看了一下 Clash X 设置,包含了这些配置项:
- 代理端口:7890 、 - Api 端口:9090 ,允许局域网控制(不推荐):未勾选、 - Api 密钥:已设置,覆盖配置文件设置:未勾选 为了安全些,是不是要修改默认端口号,更新 Api 密钥,勾选覆盖配置文件设置这些。 |
82
clf 47 天前
127.0.0.2 就扫不到了。
|
83
vishun 47 天前
@nyxsonsleep #38 目前这个程序是扫描'127.0.0.1',如果其他程序设置扫描'127.0.1.2'是不是还是能扫描到?
|
84
vishun 47 天前
@WhatTheBridgeSay #64 原理写不写倒是无太关紧要,最好是能将解决方法维护上,方便让大家修改。
|
85
nyxsonsleep 47 天前
@vishun #83 可以。所以我说了《比如 127.0.0.2 》,一定要设置可以自己高位的 ip ,不在本地的 ip 。也可以自己去改源码,编译,彻底关掉这个功能。
|
86
nyxsonsleep 47 天前 1
目前看到的风险主要是钓鱼网站可以通过这个手段偷机场代理。如果 clash 被发现漏洞可以提权抓肉鸡。
|
87
opengps 47 天前
这部很原始的穷举本地所有端口方式
|
88
SenLief 47 天前
你们都是有公网 ip 的吗
|
89
mikewang OP @ZeroDu
也不完全一样,做了一些加强。 这次想说明,即使改成 127.0.0.1 ,加密码不改端口号,也能通过路径探测到 clash (虽然获取不到节点信息,但是能知道你在用。)当然不加密码更是直接读配置。 ——— @y1y1 之所以能成功跨域,是因为 clash 内核的 header 设置了 Access-Control-Allow-Origin: *,相当于解除浏览器跨域限制,欢迎大家来访问。 不过还有一些浏览器像 Safari 限制更严格,https 不能跨域到 http 被拦截,还有一些隐私插件会拦截,所以不是 100%保证成功。 这次做的比较匆忙,是一个粗糙的 demo ,没有太大技术含量。只是为了证明 CORS 的设置不合理,应有配置能默认关闭。 ——— @WhatTheBridgeSay 网页“任何网站都能检测”是对 Access-Control-Allow-Origin: *的解释,通配符允许了所有网站。不过确实不够严谨,因为可能还会遇到其他限制。 时间原因,没法做到面面俱到。网页就在 GitHub 上,如果有好的建议欢迎直接提 PR ~ ——— 对于端口扫描,正常情况下浏览器前端是没法对本地端口扫描的。Access-Control-Allow-Origin: *导致有被扫到的风险。就是这样。 |
90
mikewang OP @SenLief 这次说明的不是公网问题。而是 Clash 的 CORS 设定不合理,可以通过浏览器前端,让浏览器扫到你 127.0.0.1 上的端口,借浏览器跨域控制 clash 。
|
91
wcwac 47 天前
@nyxsonsleep 直接修改你的代理配置搞中间人攻击也很可怕吧
|
93
huangzhiyia 47 天前
提了个提升 128 倍速度的 PR
|
94
huangzhiyia 47 天前 2
128 倍扫描速度的体验地址: https://zmaplex.github.io/ClashScan/
|
95
PositionZero 47 天前
Clash Verge Rev 好像是默认覆盖配置文件里的 external-controller 字段的 ……?确实是个安全问题
|
96
lvlongxiang199 47 天前
自从 clash 爆出远程代码执行漏洞后, 就把它关在 docker 里的
|
97
Felldeadbird 47 天前
卧槽。马上改。
|
98
SiuRayyy 47 天前
所以这个问题应该怎么解?
|
100
idou 47 天前
谢谢提醒
|