Jenkins文件讀取漏洞(CVE-2024-23897)
漏洞原理
Jenkins通过命令行接口允许使用jenkins-cli.jar客户端执行功能。
服务端解析命令行时,使用第三方库args4j,该库支持@符号引导的文件名作为参数值。
此特性导致Jenkins在服务端解析命令行参数时可能出现文件读取漏洞。
Jenkins權限系統
Jenkins默认的权限方案包括“任何人都可以做任何事”、“只有登录用户可以做任何事”等。
对于“匿名用户可读”选项,默认关闭,影响部分CLI命令的使用。
特殊命令(如help和who-am-i)无需权限即可执行。
如何讀取想要的內容
利用args4j处理@符号时的特性,可以读取文件内容。
文件内容通过命令行参数传递,但空白字符会分割参数。
使用特定命令(如connect-node和reload-job)可读取完整文件内容。
了解Jenkins敏感文件
Jenkins的敏感文件通常位于/var/jenkins_home目录。
通过读取/proc/self/environ和/proc/self/cmdline文件,可以找到Jenkins根目录。
敏感文件包括用户配置文件、密钥文件等。
讀取用戶密碼
用户密码存储在/var/jenkins_home/users/目录下的XML文件中。
可以获取用户密码的哈希值、用户Token。
Remember-Me Cookie的工作原理
Remember-Me Cookie由用户名、Token过期时间戳、userSeed和Key组成。
Key来源于/var/jenkins_home/secret.key文件。
二進制文件讀取問題
读取二进制文件(如hmac salt)时,可能由于字符集问题导致数据损坏。
在UTF-8字符集下,可能无法正确读取所有二进制文件内容。
總結
漏洞利用受限于“匿名用户可读”选项和服务端字符集兼容性。
攻击者可能无法伪造任意用户的Remember-Me Cookie。
漏洞细节可能因Jenkins版本和环境而异。
利用腳本
CVE-2024-23897
Comentários