Jenkins 有一个内置的命令行界面(CLI),用于从脚本或 shell 环境访问 Jenkins。
Jenkins 使用 args4j 库来解析 Jenkins 控制器在处理 CLI 命令时的命令参数和选项。该命令解析器有一个功能,可以将参数中 @ 字符后跟文件路径的内容替换为该文件的内容(expandAtFiles)。此功能默认启用,而 Jenkins 2.441 及更早版本、LTS 2.426.2 及更早版本未禁用它。
这使得攻击者能够使用 Jenkins 控制器进程的默认字符编码读取 Jenkins 控制器文件系统上的任意文件。
拥有 Overall/Read 权限的攻击者可以读取整个文件。
没有 Overall/Read 权限的攻击者可以读取文件的前几行。可读取的行数取决于可用的 CLI 命令。截至本公告发布时,Jenkins 安全团队已找到方法,在未安装任何插件的最新 Jenkins 版本中读取文件的前三行,并且未发现任何插件会增加此可读行数。
修复描述:
Jenkins 2.442、LTS 2.426.3 禁用了 CLI 命令中用于将参数中 @ 字符后跟文件路径替换为文件内容的命令解析器功能。
如果此修复导致问题,可通过将 Java 系统属性 hudson.cli.CLICommand.allowAtSyntax 设置为 true 来禁用此更改。强烈不建议在由非 Jenkins 管理员用户访问的任何网络上执行此操作。
临时解决方案: 禁用对 CLI 的访问预计可以完全阻止利用。强烈建议无法立即更新到 Jenkins 2.442、LTS 2.426.3 的管理员执行此操作。应用此临时解决方案无需重启 Jenkins。
更多信息请访问:https://www.jenkins.io/security/advisory/2024-01-24/#SECURITY-3314
运行命令:python CVE-2024-23897 Jenkins.py -l list.txt -f /etc/passwd
漏洞输出响应可能包含除 daemon 或 bin 之外的内容,如果您希望添加更多内容,请在第 28 行添加。