Jenkins LTS < 2.375.4 / Jenkins weekly < 2.394 多个漏洞

critical Nessus 插件 ID 172394

简介

远程 Web 服务器主机上运行的应用程序受到多个漏洞影响

描述

根据其自我报告的版本号,远程 Web 服务器上运行的 Jenkins 版本低于 Jenkins LTS 2.375.4,或低于 Jenkins weekly 2.394。因此,该应用程序受到多个漏洞的影响:

- 低于 1.5 版的 Apache Commons FileUpload 未限制要处理的请求部分的数量,导致攻击者可能通过恶意上传或一系列上传触发 DoS。请注意,与所有文件上传限制一样,新配置选项 (FileUploadBase#setFileCountMax) 在默认情况下不会启用,必须进行明确配置。(CVE-2023-24998)

- 高危 - Jenkins 2.270(含)到 2.393(含),LTS 2.277.1(含)到 2.375.3(含)在插件管理器中显示说明其与 Jenkins 当前版本不兼容的错误消息时,未转义插件所依赖的 Jenkins 版本。这会导致存储型跨站脚本 (XSS) 漏洞,攻击者可向配置的更新站点提供插件,并让 Jenkins 实例显示此消息。利用漏洞无需安装受操纵的插件。Jenkins 2.394、LTS 2.375.4 和 LTS 2.387.1 在显示说明其与 Jenkins 当前版本不兼容的错误消息时,转义了插件所依赖的 Jenkins 版本。由于 Jenkins 社区更新站点根据报告的 Jenkins 核心版本提供插件元数据的方式,合理更新的 Jenkins 实例不可能在插件管理器中显示易受攻击的错误消息。至少需要满足下列条件之一:使用的 Jenkins 版本已超过 13 个月(低于 2.333 或 LTS 2.319.2),因为所有更新的 Jenkins 版本都会收到仅包含兼容插件版本的更新站点元数据。Jenkins 已从更新的版本降级,此后未请求任何更新的更新站点元数据,因此 Jenkins 仍将显示与之前更新的 Jenkins 版本兼容的可用插件。配置了自定义更新站点 URL(即,非 https://updates.jenkins.io/update-center.json),并且这些更新站点的行为有所不同。
我们预计其中大部分将托管一小部分经过审查的插件(例如,组织批准的插件或内部插件),以防止经由其限制性包含进程利用漏洞。
自 2023 年 2 月 15 日起,Jenkins 社区更新站点不再发布具有无效 Jenkins 核心依存关系的插件版本。即使在 13 个月之前的 Jenkins 版本上,这也可以防止通过这些更新站点利用漏洞。此外,Jenkins 安全团队已确认 Jenkins 项目从未发布过具有可用于利用此漏洞的核心依存关系的插件版本。
(CVE-2023-27898)

- 高危:从管理员的计算机上传插件时,Jenkins 会创建临时文件。Jenkins 2.393 和更早版本,LTS 2.375.3 和更早版本以新创建文件的默认权限在系统临时目录中创建此临时文件。如果这些权限过于宽松,可能会允许具有 Jenkins 控制器文件系统访问权限的攻击者在将文件安装到 Jenkins 中之前对其进行读取和写入,从而可能导致任意代码执行。此漏洞仅影响对所有用户使用共享临时目录的操作系统(典型代表为 Linux)。此外,新创建的文件的默认权限通常只允许攻击者读取临时文件。
Jenkins 2.394、LTS 2.375.4 和 LTS 2.387.1 使用更多限制性权限创建临时文件。
作为变通方案,如果您担心此问题但无法立即更新 Jenkins,则可以使用 Java 系统属性 java.io.tmpdir 将不同的路径设置为默认临时目录。
(CVE-2023-27899)

- 中危:Jenkins 2.393 和更早版本,LTS 2.375.3 和更早版本受到 Apache Commons FileUpload 库漏洞 CVE-2023-24998 的影响。此库用于通过 Stapler Web 框架(通常通过 StaplerRequest#getFile)和 Jenkins 中的 MultipartFormDataParser 处理上传的文件。这允许攻击者通过向处理文件上传的 HTTP 端点发送构建的请求来造成拒绝服务 (DoS)。Jenkins 2.394、 LTS 2.375.4和 LTS 2.387.1 将要处理的请求部分的数量限制为 1000。对于仅接收简单表单提交的特定端点而言,此限制更低。尽管 Apache Commons FileUpload 依存关系之前已在 2.392 每周版中得到更新,但为了保护 Jenkins,2.394 中特定于 Jenkins 的变更是必要的。一些 Jenkins 表单可能非常复杂,这些限制适用于所有字段,而不仅仅是代表已上传文件的字段。因此,合法提交(可能)包含文件上传的复杂表单会受到这些限制的影响。如果发生这种情况,可通过将 Java 系统属性 hudson.util.MultipartFormDataParser.FILEUPLOAD_MAX_FILES 和 org.kohsuke.stapler.RequestImpl.FILEUPLOAD_MAX_FILES 设置为更大的值来更改这些限制,或设置为 -1 以完全禁用它们。这些 Jenkins 版本还引入了可设置为限制请求大小的其他 Java 系统属性:hudson.util.MultipartFormDataParser.FILEUPLOAD_MAX_FILE_SIZE 和 org.kohsuke.stapler.RequestImpl.FILEUPLOAD_MAX_FILE_SIZE 可用于限制一个 multipart/form-data 请求中可处理的各个字段的大小(以字节为单位)。
hudson.util.MultipartFormDataParser.FILEUPLOAD_MAX_SIZE 和 org.kohsuke.stapler.RequestImpl.FILEUPLOAD_MAX_SIZE 可用于限制一个 multipart/form-data 请求中可处理的总请求大小(以字节为单位)。默认情况下,Jenkins 不设置这些大小限制。
设置这些系统属性可提供额外保护,但影响合法使用的风险也更大(例如,上传大型文件参数时)。(CVE-2023-27900、CVE-2023-27901)

- 中危:Jenkins 使用与工作区目录相邻的临时目录(通常带有 @tmp 名称后缀)来存储与版本相关的临时文件。在管道中,当在自动分配的工作区的子目录中操作时,这些临时目录与当前工作目录相邻。Jenkins 控制的进程(如 SCM)可能在这些目录中存储凭据。Jenkins 2.393 及更早版本、LTS 2.375.3 及更早版本在查看作业工作区时会显示这些临时目录,这允许具有项目/工作区权限的攻击者访问其内容。Jenkins 2.394、 LTS 2.375.4 和 LTS 2.387.1 未在作业工作区中列出这些临时目录。作为变通方案,如果您担心此问题但无法立即更新 Jenkins,则不要向缺少项目/配置权限的用户授予项目/工作区权限。可将 Java 系统属性 hudson.model.DirectoryBrowserSupport.allowTmpEscape 设置为 true 以还原以前的行为。
(CVE-2023-27902)

- 低危:从 Jenkins CLI 触发构建时,如果通过 CLI 的标准输入提供了文件参数,Jenkins 会在控制器上创建一个临时文件。Jenkins 2.393 和更早版本,LTS 2.375.3 和更早版本以新创建文件的默认权限在默认临时目录中创建此临时文件。如果这些权限过于宽松,可能会允许具有 Jenkins 控制器文件系统访问权限的攻击者在文件被用于构建之前对其进行读写。此漏洞仅影响对所有用户使用共享临时目录的操作系统(典型代表为 Linux)。此外,新创建的文件的默认权限通常只允许攻击者读取临时文件。Jenkins 2.394、LTS 2.375.4 和 LTS 2.387.1 使用更多限制性权限创建临时文件。作为变通方案,如果您担心此问题但无法立即更新 Jenkins,则可以使用 Java 系统属性 java.io.tmpdir 将不同的路径设置为默认临时目录。(CVE-2023-27903)

- 低危:当代理连接中断时,Jenkins 2.393 和更早版本、LTS 2.375.3 和更早版本在与代理相关的页面上打印错误堆栈跟踪。此堆栈跟踪可能包含攻击者无法以其他方式访问的有关 Jenkins 配置的信息。代理连接中断时,Jenkins 2.394、LTS 2.375.4 和 LTS 2.387.1 不显示错误堆栈跟踪。(CVE-2023-27904)

- 中危:update-center2 是用于生成 updates.jenkins.io 上托管的 Jenkins 更新站点的工具。
虽然它是专为 Jenkins 项目而设计的,但其他人可能会使用它来操作自己的自托管更新站点。 update-center2 3.13 和 3.14 会在插件下载索引页面(类似页面)显示所需的 Jenkins 核心版本。此版本取自插件元数据,未经审查。这会导致存储型跨站脚本 (XSS) 漏洞,攻击者可以借此为虚拟主机提供插件。必须同时满足以下先决条件才能在自托管的 update-center2 中利用此漏洞:需要启用下载页面的生成(即,需要设置 --download-links-directory 参数)。必须使用自定义下载页面模板(--index-template-url 参数),并且所使用的模板不得通过 Content-Security-Policy 阻止 JavaScript 执行。默认模板通过声明限制性 Content-Security-Policy 来防止遭到利用。update-center2 3.15 会过滤掉具有无效 Jenkins 核心依存关系的插件版本。
建议使用 update-center2 或其分支托管自己的更新站点的管理员进行更新,或集成 commit 091ef999。此变更已于 2023 年 2 月 15 日部署到 Jenkins 社区更新站点。Jenkins 项目已于 2023 年 1 月 16 日发布了一个插件版本,该版本以无害的方式利用此漏洞来演示此问题,过程耗时 2 小时。尚未发布利用此漏洞的其他插件版本。(CVE-2023-27905)

请注意,Nessus 尚未测试这些问题,而是只依据应用程序自我报告的版本号进行判断。

解决方案

将 Jenkins weekly 升级到版本 2.394 或更高版本,或将 Jenkins LTS 升级到版本 2.375.4、2.387.1 或更高版本。

另见

https://jenkins.io/security/advisory/2023-03-08

插件详情

严重性: Critical

ID: 172394

文件名: jenkins_2_394.nasl

版本: 1.6

类型: combined

代理: windows, macosx, unix

系列: CGI abuses

发布时间: 2023/3/9

最近更新时间: 2024/1/26

配置: 启用全面检查

支持的传感器: Frictionless Assessment Agent, Nessus Agent, Nessus

风险信息

VPR

风险因素: Medium

分数: 6.5

CVSS v2

风险因素: Critical

基本分数: 10

时间分数: 7.4

矢量: CVSS2#AV:N/AC:L/Au:N/C:C/I:C/A:C

CVSS 分数来源: CVE-2023-27905

CVSS v3

风险因素: Critical

基本分数: 9.6

时间分数: 8.3

矢量: CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

时间矢量: CVSS:3.0/E:U/RL:O/RC:C

漏洞信息

CPE: cpe:/a:cloudbees:jenkins, cpe:/a:jenkins:jenkins

必需的 KB 项: installed_sw/Jenkins

易利用性: No known exploits are available

补丁发布日期: 2023/3/8

漏洞发布日期: 2023/2/20

参考资料信息

CVE: CVE-2023-24998, CVE-2023-27898, CVE-2023-27899, CVE-2023-27900, CVE-2023-27901, CVE-2023-27902, CVE-2023-27903, CVE-2023-27904, CVE-2023-27905

IAVA: 2023-A-0127-S, 2023-A-0593-S