Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/abraxas/gitea-git-redir-ssrf
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试实验室与实践
GitHubabraxas/gitea-git-redir-ssrf

gitea-git-redir-ssrf

针对 Gitea 仓库迁移端点中经身份验证的 SSRF 的概念验证与实验环境,其中 git 会跟随 HTTP 重定向进入回环 git HTTP,并泄露内部对象。

查看仓库
177天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - gitea-git-redir-ssrf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  gitea-git-redir-ssrf

技术分析文章:https://abraxaslabs.tech/research/gitea-git-redir-ssrf

gitea-git-redir-ssrf

Gitea 1.27.3 - Gitea

IsMigrateURLAllowed 只是对你输入的 URL 执行一次性的 net.LookupIP。随后数据会经过 git clone --mirror 处理。HandleGitCmdHTTPRedirection 本应阻止 git 跟随该跳转。但它什么也没做。注释本身就是发现:他们因为 GitLab 在没有 .git 时会返回 301,所以没有设置 http.followRedirects=false。拉取镜像(pull-mirror)的 fetch 调用的是同一个空操作。

已登录用户可以从允许列表中的诱饵主机发起迁移,git 会跟随 302 跳转进入回环地址上的 git HTTP 服务。内部对象会落入他们自己拥有的仓库中。

ID暂无 CVE
CWECWE-918
CVSS高危:7.7 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
产品Gitea
受影响版本至 v1.27.3(146cc3e)
认证已认证(默认开放注册)
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1

攻击者能做什么

注册账号,从一个看似外部的 URL 发起迁移,该 URL 会 302 跳转到 http://127.0.0.1:.../internal.git。直接迁移到回环地址会被拒绝。但跟随重定向的克隆不会被拒绝。见证文件会落入他们自己的仓库。

不是 file:// 磁盘读取。不是对 /api/internal 使用 X-Gitea-Internal-Auth(git 不会设置该请求头)。不是未认证 RCE。不是元数据 RCE,除非你另外证明 git 存储了响应体。

同一标签下的遗留问题:keys IDOR、hostmatcher 0.0.0.0/8。

我是如何发现的

v1.27.3 修复了 2026 年 GHSA 浪潮:CVE-2026-60004(diffpatch 钩子 RCE,CISA KEV)、CVE-2026-59774(未认证 Org-mode #+INCLUDE)、fork-PR Actions 门控、反向代理 X-WEBAUTH-USER 默认值。针对这些问题请保持在 1.27.3+。但我还是盯上了那个标签。

CVE-2026-59765 修复了 Go 的 uri.Open。CVE-2026-22874 修复了 Go 的 reservedIPNets。Git 的重定向器仍然是一个 FIXME。更新日志中的“disable HTTP redirects on pull mirror sync”并不是指这个函数。

实验环境将 Gitea 放在 8.8.4.2 上,这样位于 8.8.4.10 的诱饵主机对 hostmatcher 来说看起来是外部的。内部 git HTTP 仅绑定在 Gitea 网络命名空间(netns)的回环地址上(network_mode: service:gitea,端口 9418)。直接迁移到 127.0.0.1 必须失败。跟随重定向的克隆必须成功。redir.py 将 /bait.git 以 302 跳转到 http://127.0.0.1:9418/internal.git。见证文件 WITNESS 包含 GHSA-GITEA-GIT-REDIR-SSRF。

已记录的弯路:ALLOW_LOCALNETWORKS true(这样允许列表就没了);file://;X-Gitea-Internal-Auth;反弹 shell。都是做戏。直接回环迁移被拒绝才是对照基准。

客户端 bug 看起来像产品 bug。一个遮蔽 http.client 的辅助程序从不发送数据包。对 HTTPResponse 调用 .recv() 并不等于 .read()。我提这一点是因为它浪费了时间,而且有一瞬间看起来像是 1.27.3 已经完成了修复。

实验环境

cd lab
./run.sh

仅针对 http://127.0.0.1:18103。ALLOW_LOCALNETWORKS=false。

negative-loopback status=422 You can not import from disallowed hosts
migrate-bait status=201 clone_addr=http://8.8.4.10/bait.git
fetch raw/WITNESS status=200 GHSA-GITEA-GIT-REDIR-SSRF
SUCCESS Gitea #2 git HTTP redirect SSRF

修复方案

不要将提交时的 DNS 解析视为边界。强制设置 http.followRedirects=false(并将克隆 URL 规范化为 .git,以便 GitLab 仍能正常工作),或者通过一个在每一跳都重新运行 hostmatcher 的拨号器代理 git HTTP 流量。

参考资料

  • github.com/go-gitea/gitea 标签 v1.27.3
  • HandleGitCmdHTTPRedirection · IsMigrateURLAllowed
  • 附近已修补: CVE-2026-59765 · CVE-2026-22874
  • CWE-918

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。不提供任何担保。

下载工具