OpenProject 12.5.6 安全修复版全解CVE-2023-31140 项目标识符泄露漏洞与 7 项缺陷修复【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject本指南面向 OpenProject 运维人员与安全工程师系统解读 12.5.6 补丁版本2023-06-01 发布的核心内容以 CVE-2023-31140robots.txt 泄露公共项目标识符为安全主线结合仓库源码还原漏洞成因、补丁适用范围与临时规避方案并逐一说明该版本随附的 7 项功能变更与缺陷修复SLES 15 打包支持、Logo 链接可配置、Kanban 过滤器问题、SMTP 迁移错误等。读完本文你将掌握该版本的升级必要性判断、受影响面评估方法以及各修复项对应的源码位置与配置入口。版本概览一次建议立即升级的安全补丁发布OpenProject 12.5.6 是 12.5 系列中的一个补丁版本发布于 2023-06-01。官方对该版本给出的升级建议是release contains a security related bug fix and we recommend updating to the newest version该版本包含一个安全相关的缺陷修复建议更新到最新版本。与常规功能版本不同12.5.6 的核心交付物是一个安全漏洞修复因此升级优先级高于普通功能版本若因客观条件无法立即升级官方提供了可手工应用的补丁文件与临时规避方案详见下文该补丁适用于所有 OpenProject 10.0 以上版本覆盖面较广说明漏洞在早期版本中即已存在。CVE-2023-31140通过 robots.txt 泄露公共项目标识符漏洞本质CVE-2023-31140 是一起**信息泄露Information Disclosure**类漏洞。其攻击路径如下每个 OpenProject 实例都会由服务器动态生成一份robots.txt文件用于告知搜索引擎爬虫哪些路由允许访问、哪些禁止访问这份文件的内容中包含了该实例中所有公共项目public projects的项目标识符project identifier——即项目 URL 中的路径片段即使整个实例被配置为Login required登录要求模式、阻止了一切真正的匿名访问/robots.txt这条路由仍然保持公开可用攻击者无需任何凭据仅凭匿名 GET 请求即可读取robots.txt从而枚举出实例上所有公共项目的标识符。为什么标识符也算敏感信息漏洞描述明确指出项目标识符是由项目名称派生的derived from the project name。在 OpenProject 中创建项目时系统会根据项目名称自动生成标识符例如名为 Acme 2023 Q3 Roadmap 的项目可能派生为acme-2023-q3-roadmap并且标识符直接构成项目的 URL 路径。因此仅凭标识符就可能推断出项目名称、业务方向甚至内部代号对于内部部署、要求登录的实例这等于向未授权访问者暴露了实例中存在哪些项目以及项目的大致命名规律若项目名称本身包含敏感业务信息如客户名、产品代号泄露面将进一步扩大。从源码定位漏洞所在的代码区域当前仓库中可以精确还原该漏洞所涉及的路由与模板实现1. 路由定义/robots路由显式映射到HomescreenController#robots动作且固定以纯文本格式输出config/routes.rbget /robots homescreen#robots, defaults: { format: :txt }2. 控制器robots 动作明确绕过登录检查在 app/controllers/homescreen_controller.rb 中可以看到两个关键声明class HomescreenController ApplicationController skip_before_action :check_if_login_required, only: [:robots] no_authorization_required! :index, :robots # ... def robots template if Setting.login_required? homescreen/robots-login-required else homescreen/robots end render template:, format: :text end endskip_before_action :check_if_login_required, only: [:robots]表明即使实例开启了登录要求login_required设置robots动作也会跳过登录检查no_authorization_required! :index, :robots进一步声明该动作不需要任何授权。这两行正是漏洞描述中即使整个实例标记为 Login required、阻止所有真正匿名访问/robots.txt 路由仍公开可用的源码级印证——robots.txt被有意设计为可匿名访问以便搜索引擎爬虫读取但也因此成为匿名攻击面。3. 模板Disallow 规则中包含项目标识符占位在非登录要求模式下模板 app/views/homescreen/robots.text.erb 会输出一组针对项目子路由的禁止抓取规则User-agent: * Disallow: % project_repository_path(*) % Disallow: % project_work_packages_path(*) % Disallow: % project_activity_index_path(*) % Disallow: % search_path(*) % Disallow: /activity Disallow: % search_path % Disallow: /project_queries/configure_view_modal %# Generally allow /projects but disallow those links that change columns, sort order or per page settings % Disallow: /projects?*columns Disallow: /projects?*sortBy Disallow: /projects?*per_page注意project_repository_path(*)、project_work_packages_path(*)、project_activity_index_path(*)这些辅助方法中的*通配占位符——在实际渲染时系统会为每一个公共项目生成对应的路径路径中包含该项目标识符。这解释了漏洞根因robots.txt的输出内容本身就需要枚举公共项目从而将标识符写入公开响应中。而登录要求模式下的模板 app/views/homescreen/robots-login-required.text.erb 则仅输出一条全站禁止规则User-agent: * Disallow: /结合两条模板可以看出修复思路之一是区分实例是否要求登录来裁剪robots.txt的敏感内容而在受影响版本中公共项目标识符的枚举不因登录要求而收敛才导致泄露。修复补丁官方为 CVE-2023-31140 提供了补丁文件对应修复 PR #12708适用范围所有 OpenProject10.0 以上版本均可应用应用方式将补丁文件应用到对应版本的源码后重新部署即可。对于通过打包安装packaged installation或 Docker 镜像部署的用户直接升级到 12.5.6或后续包含该修复的版本是更稳妥的选择。临时规避方案Workaround如果既无法升级、也无法应用补丁官方给出的临时缓解措施是将所有公共项目暂时标记为非公开non-public并为确实需要访问这些项目的用户逐一授予成员membership资格。这一方案的本质是让攻击者没有可枚举的对象——因为robots.txt中的项目标识符只来自公共项目将项目设为非公开后其标识符便不再出现在公开输出中。需要注意该方案是临时性的不能替代最终升级将项目设为非公开后需为相关用户补发成员资格否则会造成访问中断若实例中存在大量公共项目建议评估后分批处理。随版本发布的 Bug fixes 与变更除安全修复外12.5.6 还包含 2 项功能变更与 5 项缺陷修复具体如下。Changed新增 SLES 15 打包安装支持工单#44117说明为 SUSE Linux Enterprise Server 15SLES 15增加了打包安装packaged installation支持。此前 SLES 15 用户无法使用官方打包方式部署 OpenProject本版本补齐了该发行版的安装路径。适用场景在 SLES 15 上以 RPM 打包方式部署 OpenProject 的运维团队升级本版本后即可使用官方安装流程。Changed应用 Logo 背后的链接支持自定义工单#48251说明此前点击 OpenProject 应用 Logo 会固定跳转到实例首页本版本起该链接目标变为可配置管理员可以将 Logo 指向自定义 URL例如公司门户、帮助中心等。源码印证仓库中的 URL 辅助逻辑区分了固定首页地址与可配置首页地址app/helpers/additional_url_helpers.rbdef fixed_home_url home_url(script_name: OpenProject::Configuration.rails_relative_url_root) end def configurable_home_url Setting.home_url.presence || fixed_home_url end即当Setting.home_urlhome_url系统设置有值时优先使用该值否则回退到固定首页地址。管理员只需在系统设置中填写home_urlLogo 链接便会指向自定义地址。FixedKanban 看板中带is not项目过滤器时移动工作包会改变其项目工单#44895现象在 Kanban 看板中若看板查询使用了is not不等于类型的项目过滤器则在该看板内拖拽移动工作包时工作包所属的项目会被意外改变。影响属于数据完整性类缺陷——用户本意是调整看板列状态却意外把工作包挪到了其他项目可能造成权限范围外的变更与数据错乱。Fixed升级迁移报错 smtp_openssl_verify_mode is not writable工单#48125现象从旧版本升级数据库时迁移过程抛出smtp_openssl_verify_mode is not writable错误导致升级中断。原因背景smtp_openssl_verify_mode是控制 SMTP 连接时 OpenSSL 证书校验模式的邮件设置项。该设置在运行时会被写入ActionMailer::Base.smtp_settings与设置系统的可写性校验发生冲突。源码印证当前仓库的邮件设置装载逻辑 app/models/setting/mail_settings.rb 中该值会被透传到 ActionMailer 的 SMTP 配置Setting.smtp_openssl_verify_mode.tap do |mode| ActionMailer::Base.smtp_settings[:openssl_verify_mode] mode unless mode.nil? end本次修复调整了该设置的迁移/定义方式使升级不再报错。FixedOpenProject 官方支持 Debian 9但 PostgreSQL 已不再支持工单#48245背景OpenProject 的打包安装官方支持 Debian 9但该发行版所随附的 PostgreSQL 版本已超出 PostgreSQL 官方的支持周期。说明本修复旨在厘清并处理这一支持矩阵矛盾运维人员在 Debian 9 上部署时应关注数据库组件的维护状态评估升级操作系统或数据库的必要性。Fixedrobots.txt 泄露公共项目标识符工单#48338说明该缺陷与本版本的安全公告 CVE-2023-31140 直接对应即上文漏洞本体此处作为普通缺陷条目一并修复。Fixed未勾选的复制选项仍被复制到新项目工单#48351现象从已有项目复制创建新项目时即使在复制选项中取消勾选某些内容例如工作包、Wiki、成员等这些未勾选的内容仍会被复制到新项目中。影响复制操作行为与用户预期不一致可能在新项目中产生多余数据尤其在涉及成员或工作包时还可能带来权限与数据冗余问题。致谢社区贡献者本版本中以下社区成员为漏洞与缺陷的发现、定位和修复提供了帮助官方在发布说明中特别致谢Benjamin Rönnau参与缺陷报告与定位Ryan Brownell参与缺陷报告与定位CVE-2023-31140 相关问题的发现亦有贡献。升级与验证建议结合本版本内容给出以下实操建议优先升级由于 12.5.6 携带安全修复建议所有 12.5.x 及更早版本实例尽快升级无法立即升级时按上文 Workaround 将公共项目暂时设为非公开升级前验证邮件配置若历史版本曾配置过smtp_openssl_verify_mode升级后可在系统管理 → 邮件通知中确认 SMTP 设置加载正常可参考 app/models/setting/mail_settings.rb 中的reload_mailer_settings!逻辑验证 robots.txt 输出升级后可通过匿名请求GET /robots检查输出内容路由见 config/routes.rb若实例开启登录要求应返回精简版Disallow: /模板见 app/views/homescreen/robots-login-required.text.erb不再枚举项目标识符关注支持矩阵在 Debian 9 或 SLES 15 上部署的用户升级后应确认打包安装支持状态与数据库组件的维护周期。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考