跳到主要内容

Gitea 1.27.2 已发布

· 阅读需 11 分钟
bircni
Technical Oversight Committee
本文由 AI 翻译,如有歧义请以 英文原文 为准。
1.27.2Release

我们很高兴宣布发布 Gitea 1.27.2,这是 1.27 系列的第二个补丁版本。它包含大量安全修复,以及针对 Gitea Actions、软件包、LFS 和用户界面的错误修复。我们强烈建议所有用户尽快升级。

安全​

本次发布修复了以下安全漏洞。请尽快升级。

  • CVE-2026-73804:仅具有 write:user 作用域的令牌可以向自己的账户添加 SSH 密钥,然后使用 HTTP 签名认证发起 API 请求,而无需任何令牌作用域强制执行,从而完全绕过 API 令牌作用域边界。已在 #38862 / #38895 中修复。感谢 @ohxorud-dev 报告该问题,以及 @wxiaoguang 提供补丁。
  • Jupyter 笔记本渲染器将 javascript: 短链接原样写入锚点,而独立的 /render/ 端点没有提供 CSP,因此特制的 .ipynb 可以在受害者会话中执行 JavaScript,并导致账户接管。已在 #38864 / #38869 中修复。感谢 @CynosureSec 报告该问题,以及 @wxiaoguang 提供补丁。
  • CVE-2026-73539:标记的 Context 字段未经转义就被传入外部渲染器命令行,允许向渲染进程注入参数,并在那些在 RENDER_COMMAND 中使用 $GITEA_PREFIX_SRC / $GITEA_PREFIX_RAW 的实例上以 Gitea 服务用户身份远程执行代码。已在 #38885 / #38898 中修复。感谢 @DshtAnger 报告该问题,以及 @wxiaoguang 提供补丁。
  • CVE-2026-73800:pull_request_target 工作流从 fork 的 HEAD 提交而不是基础分支解析本地可复用工作流(uses: ./...),使得攻击者控制的工作流代码能够以访问仓库和组织 secrets 的权限运行。已在 #38886 / #38897 中修复。感谢 @chakradhar1228、@PhucQuan、@YuvalMil、@elmahy111 和 @DshtAnger 报告该问题,以及 @bircni 提供补丁。
  • CVE-2026-73278:OAuth2 和 OpenID Connect 登录路径只检查 TOTP 注册状态,因此唯一第二因素是 WebAuthn 的用户会直接获得完整会话,而不会受到任何质询。已在 #38805 / #38810 中修复。感谢 @MindflareX、@AdamKorcz 和 @jaeyoon-kim-dev 报告该问题,以及 @silverwind 提供补丁。
  • CVE-2026-73535:POST /user/openid/connect 未强制执行第二因素认证,因此知道受害者密码的攻击者可以获得完整会话,并将攻击者控制的 OpenID 标识符永久关联到受害者账户——即使更改密码,该访问权限仍然有效。已在 #38805 / #38810 中修复。感谢 @r0hanSH 报告该问题,以及 @silverwind 提供补丁。
  • CVE-2026-60008:Jupyter 笔记本渲染器在清理器被禁用的路径上,将笔记本的 language_info.name 插值到 class 属性中,却没有安全属性保护,使得仓库文件能够覆盖并拦截仓库页面上的点击。已在 #38793 / #38795 中修复。感谢 @yagcioglutoprak 报告该问题,以及 @wxiaoguang 提供补丁。
  • CVE-2026-73814:具有管理员权限的仓库协作者可以向协作访问模式端点提交 mode=4,从而将权限提升到实际所有者级别,并将仓库转移到自己的账户。已在 #38894 / #38895 中修复。感谢 @martindukek 报告该问题,以及 @wxiaoguang 提供补丁。

本次发布还将捆绑的 mermaid 依赖更新至 v11.16.1(#38816)。

重要修复​

Actions​

  • workflow_dispatch 输入在 github.event.inputs 中再次保持为字符串,符合文档描述的行为(#38908)。
  • 重新运行选定的作业现在可以读取上一次尝试的产物,而不是从空的产物集开始(#38901)。
  • 表达式的每个 ${{ }} 部分都会单独求值,修复了包含多个插值的字符串的结果(#38797)。
  • 没有任何正在运行的作业的运行现在可以再次取消(#38812),并且任务报告会在单次事务中写入,以避免记录部分状态(#38794)。

软件包、LFS 和存储​

  • LFS:来自客户端的成功传输响应现在能被正确接受(#38875),并且失败的上传不再删除同一对象并发上传的元对象(#38722)。
  • Swift 软件包:在软件包检测期间会忽略嵌套的 Package.swift 文件(#38836)。
  • Arch 软件包:解析时会丢弃包含换行符的成员名称(#38830)。
  • Alpine 注册表会响应针对 APKINDEX.tar.gz 的 HEAD 请求,而不是返回 405(#38688)。
  • 转储到 Azure Blob 存储不再因“文件不存在”而失败(#38828),并且当内容大小未知时,会为 MinIO 上传设置最小分片大小(#38755)。
  • npm 软件包现在会发布之前缺失的元数据属性(#38831)。

仓库与界面​

  • 当 Gitea 在子路径下运行时,归档下载不再出错(#38750),并且在该配置下会正确构建完整 URL(#38716)。
  • 标记渲染在某些输入上不再发生 panic(#38703),标记链接能被正确解析(#38765),并且行内代码上的删除线不再被应用两次(#38729)。
  • 当刷新后的页面不再包含合并框时,会将其从界面中移除(#38744),提交头像堆叠会显示正确的参与者数量(#38700),并且下划线会再次使用浏览器默认样式(#38823)。
  • 删除迁移时会正确重定向,而不是返回 JSON 重定向(#38825)。

本次发布包含 26 个已合并的合并请求,感谢我们社区的出色贡献。

如何安装或更新​

从 Gitea 下载页面 下载我们的预编译二进制文件——确保选择与您的平台兼容的版本。有关安装或升级的分步指南,请查看我们的 安装文档。

特别感谢​

我们还要感谢 Open Collective 上的所有支持者,感谢他们在财务上支持我们。


正在寻找无缝、省心的 Git 仓库管理解决方案? 了解 Gitea Cloud——一个全托管、可扩展的平台,旨在简化您的开发工作流。

以下 Changelog 保留英文原文,未作翻译,请与上游逐字核对。

Changelog​

1.27.2 - 2026-08-14​

  • SECURITY

    • Fix: update collaborator access mode and httpsign (#38894, #38862) (#38895)
    • Refactor: external render (#38885) (#38898)
    • Fix(actions): resolve pull_request_target reusable workflows at the base commit (#38886) (#38897)
    • Refactor: markup render (#38864) (#38869)
    • Fix(deps): update dependency mermaid to v11.16.1 (#38816)
    • Fix(auth): set WebAuthn user verification per request (#38805) (#38810)
    • Fix: render highlight language (#38793) (#38795)
  • ENHANCEMENTS

    • Enhance: add missing npm package metadata properties (#38826) (#38831)
  • BUGFIXES

    • Fix(actions): keep github.event.inputs as strings for workflow_dispatch (#38899) (#38908)
    • Fix(actions): let a rerun of selected jobs read the previous attempt's artifacts (#38857) (#38901)
    • Fix(lfs): accept successful transfer responses (#38866) (#38875)
    • Fix(packages): ignore nested Package.swift (#38788) (#38836)
    • Fix: drop newline-bearing member names in arch ParsePackage (#38102) (#38830)
    • Fix(storage): fix Azure Blob dump failing with file does not exist (#38814) (#38828)
    • Fix(migration): migration deletion returned json redirection (#38796) (#38825)
    • Fix(ui): change underlines to default browser style (#38819) (#38823)
    • Fix(actions): allow cancelling runs without running jobs (#35842) (#38812)
    • Fix(actions): evaluate each ${{ }} part on its own (#38754) (#38797)
    • Fix(actions): write an action task report in one transaction (#38792) (#38794)
    • Fix: markup link (#38764) (#38765)
    • Fix: set a minio part size when the content size is unknown (#38753) (#38755)
    • Fix: bad path escape in subpath archive download (#38749) (#38750)
    • Fix: remove the pull merge box from UI when the refreshed page doesn't contain it (#38742) (#38744)
    • Fix(markdown): fix double strikethough on code (#38707) (#38729)
    • Fix(lfs): failed upload deletes a concurrent upload's meta object (#38693) (#38722)
    • Fix: correct full url when using sub-path (#38712) (#38716)
    • Fix: avoid markup render panic (#38698) (#38703)
    • Fix(ui): too many participants shown in commit avatar stacks (#38689) (#38700)
    • Fix: support HEAD requests on Alpine registry APKINDEX.tar.gz (#38686) (#38688)

贡献者​