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