Gitea 1.27.2 已发布
· 阅读需 11 分钟
我们很高兴宣布发布 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
-
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)
