New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug]: Remote Code Execution/远程代码执行 #3891
Comments
|
这个是不是clash Premium的问题啊,他们的源码并没有开放 |
|
我一直觉得parser支持执行js代码本身就是一个及其具有隐患的功能,可见 #3782 |
clash Premiun肯定分一部分锅,我查看了其他clash的客户端,只要是支持rule-providers path的几乎都存在类似的目录穿越文件上传问题,但是全是它的问题也说不过去,如果直接使用clash的话用户应该是清楚自己的配置文件内容的(包括path的路径是否会覆盖掉其他文件或者穿越出目录等情况),但在客户端订阅链接式下载的配置文件用户可能对配置文件内容不是那么清楚,导致可能出现这种问题。 |
|
感谢反馈,确实有这个问题,我想想怎么处理 |
|
旧的版本也存在这个漏洞,已测试版本:v 0.19.17 |
作为一个客户端软件,给予这种程度的自由度是合理的, 对于这样一个用于完全劫持网络,并对远程服务器不设防的工具, 这里设计的问题在于,clash 应当先 parse,确定是合法的配置文件再覆盖文件。 |
个人认为:这个自由度有点高,不能指望每个用户都是专业人士; |
虽然但是 我们应当假定用户是愚蠢的 因为真的有如此愚蠢的用户可能不检查配置文件便使用 |
但是目录穿越其实就能算一个漏洞,可以造成危害并且有利用的可能性。 |
更新:不准确,应当的表述是:用户最好和开发者的定位相同,否则肯定要出事。解决问题很简单,要么改变用户,要么让开发者搞清楚自己的定位,当然,CFW 还是很清楚的(
Consider directory structure like:
目录穿越仅在可以被无授权利用时是一个漏洞,这里的操作全部都是用户自行授权的:用户自己写了这个配置文件。 如果说这是目录穿越漏洞的话,那就像 zblogcn/zblogphp#193 一样滑稽。 当然,我认为 CFW 应当对这个问题做出措施,毕竟 CFW 的使用设计可能使人忽视配置文件内容。 |
|
假如已经可以在无授权利用时造成危害,那么我们就应该去考虑修复这个漏洞,而不是为了一个无关紧要的功能而在安全性上做出妥协让步 |
我们不应当假设用户足以称之为专业人士。 如果照你在使用专业软件的时候,你最好是专业人士,否则多半要出事的说法,很多额外的安全措施,如two factor和selinux也不需要,也不需要版本控制或者权限隔离了。 |
这里的操作全部都是用户自行授权的:用户自己写了这个配置文件,或者用户自己选择了,我tmd今天就是要下这个订阅。 如果说这是目录穿越漏洞的话,那就像 zblogcn/zblogphp#193 一样滑稽。
有这个东西吗?我看 https://github.com/Dreamacro/clash/issues 感觉不太像(逃 Again: 当然,我认为 CFW 应当对这个问题做出措施,毕竟 CFW 的使用设计可能使人忽视配置文件内容。 |
就成群的第三方工具而言,我认为称之为易用也并非不可( |
用户信任某个配置文件,不代表这个配置文件就安全。配置文件有可能是外部引入,所以我们本来就不该信任它。 这个目录穿越的可能造成的结果就是,用户信任一个订阅链接,点击下载,然后电脑就会执行代码。这和 #2710 性质是一样的。 当然,争论也没有意义,具体修复与否取决于维护者怎么想 |
我认为这就是闭源的坏处了,一言堂 |
|
请 @qwq233 和 @Anthem-whisper 在引用回复时适当裁剪你的引用内容,或者改为使用 at。 |
|
|
当然,如果 clash 要修的话,我希望是加个 arg 启动或退出小白模式,内容可以有:
|
|
从clash Premium的角度考虑,这不是他的问题。用户有权在任何位置放置他的配置文件,clash Premium的前端也并不一定是cfw,配置文件名也并不一定是cfw-settings.yaml,clash Premium无法做出有效的限制。另外单纯使用clash Premium的用户,理应知晓config.yaml的内容,clash Premium根据config.yaml所做的都是用户授权的。 |
|
@Fndroid A off-topic note, It is recommended to setup some reporting channel for security issues. For example, you can put a email address in REDME.md, or enable Github Security policy feature for this repo. It is inappropriate to allow vulnerabilities to be published before they have been fixed. Thank you for your efforts on this project. :) |
|
这东西没多大办法修复,我可以通过买别的厂家vpn订阅各种信息得到后修改加入恶意代码之后,低价卖给那些需要购买的人。 |
|
clash for windows可以做的更好的一点是对于可以自定义path的配置,应该屏蔽从订阅源获得的,而改用用户在cfw的界面上显式指定的,因为这明显是一个平台相关的配置,订阅源不应该下发与平台相关的配置。 |
|
|
目录不止能穿越。还能创建..... |
|
v20.5复现成功 |
|
这个 issue 不该在修复前被提出,作者应当先联系所有者修改,等到修改完成后再提出 issue。这种安全漏洞最好在修复前保持对大多数人未知的状态。 |
|
应该默认不允许执行,要执行的去设置里打开选项 |
这不是解决方案。此漏洞的问题不在于执行代码,而在于创建不明来源文件。主机上任何文件都可能被替换为恶意文件。 |
|
我觉得, |
我認為不受打擾這點有待商議,畢竟再專業的人也會有犯錯的時候。 |
issue的作用就是和作者汇报 |
This comment was marked as off-topic.
This comment was marked as off-topic.
是的,这是我的疏忽,没有考虑到它的影响,首页没找到作者email于是直接发了issue,确实考虑不周 |
补充下测试获得的信息,在写入文件前会进行yaml解析并检测payload字段,之后才会写入。也就是写入文件内容必须是UTF-8编码的yaml并包含payload字段。PE结构文件除非拧成花不然应该是不可以的。 |
同意,应该在执行前向用户获得信任 |
|
下个版本将调整为忽略http类型的provider设置的path值,根据url生成一个固定位置 |
|
Linux 无法复现,提供了calc.exe(重定向到gnome的计算器)之后仍然无法复现。 |
|
@muink 请另开issue |
Linux 无法复现是因为主流平台都是 Windows,electron 跨平台实际还是有各个系统的兼容性问题;即,你可以认为在涉及到系统部分的操作行为在各个系统是不一致的 |

请认真检查以下清单中的每一项
软件版本
0.20.12
操作系统
Windows x64
系统版本
Windows 11
问题描述
Windows 上的 clash_for_windows 在 0.20.12 在订阅一个恶意链接时存在远程命令执行漏洞。因为对订阅文件中 rule-providers 的 path 的不安全处理导致 cfw-setting.yaml 会被覆盖,cfw-setting.yaml 中 parsers 的 js代码将会被执行。
A remote command execution vulnerability exists in clash_for_windows before v0.20.12 when subscribing to an attacker's link. cfw-setting.yaml can be overwritten due to unsafe processing of the path of rule-providers in the subscription file, and the js code of parsers in cfw-setting.yaml will be executed.
复现步骤
PoC
config.yaml
cfw-settings.yaml
日志文件
No response
其他补充
由于是rule-providers的自定义path的问题,还有其他利用方式,比如用目录穿越写入开机启动项
path: ../../../../../../Users/User/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/hack.bat
不过杀毒软件会弹框
Since it is a problem with the custom path of rule-providers, there are other ways to use it, such as using directory traversal to write into the startup item
path: ../../../../../../Users/User/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/hack.bat
But the antivirus software will warn.
The text was updated successfully, but these errors were encountered: