CVE-2026-19478实战:GitLab GraphQL未认证删库漏洞自查、修复、全套加固教程

发布时间:2026/8/21 20:20:43

CVE-2026-19478实战:GitLab GraphQL未认证删库漏洞自查、修复、全套加固教程
1. 漏洞核心底层原理第一性原理拆解绝大多数运维人员只知道该漏洞可以匿名删库但不清楚具体触发逻辑导致无法理解防护规则、无法自定义拦截策略。所有漏洞的核心成因都是程序对用户可控输入的校验缺失CVE-2026-19478的问题精准定位在GitLab GraphQL自定义指令解析模块。GitLab为了适配多版本API兼容自研了gl_introduced自定义GraphQL指令用于标记不同版本接口的字段兼容逻辑。该指令配置中包含一个fallback降级字段开发者设计逻辑为当客户端请求的API版本过低时自动降级返回兜底数据。开发阶段的代码校验逻辑存在严重疏漏程序仅校验了fallback字段的数据格式完全没有校验字段的数据内容与执行逻辑。攻击者可以在匿名GraphQL请求中构造恶意fallback参数注入合法Ruby代码片段GitLab后端会直接解析并执行这段注入代码。结合GraphQL的Mutation变更请求能力攻击者无需登录即可调用项目删除、数据修改、用户状态变更的后端接口实现任意公开资源的篡改与销毁。整个攻击链路无认证、无权限校验、无交互公网可达即可利用。1.1 漏洞攻击链路流程图actor Attacker as 未认证攻击者network Internet as 公网participant GitLab as 自托管GitLab服务participant DB as GitLab数据库/仓库文件Attacker-Internet: 构造恶意GraphQL请求(含恶意gl_introduced fallback代码)Internet-GitLab: 匿名POST请求 /api/graphqlGitLab-GitLab: 解析GraphQL指令未校验fallback内容GitLab-GitLab: 执行注入的恶意Ruby代码GitLab-DB: 调用底层接口 删除/修改公开项目数据GitLab-Attacker: 返回操作成功结果1.2 漏洞影响边界精准界定很多公开文档模糊描述影响版本导致运维误判漏修。这里精准罗列所有受影响、修复、废弃版本无模糊区间受影响完整版本区间18.2.0 ≤ GitLab CE/EE 18.11.1119.0.0 ≤ GitLab CE/EE 19.0.819.1.0 ≤ GitLab CE/EE 19.1.619.2.0 ≤ GitLab CE/EE 19.2.4官方正式修复版本生产环境稳定可用18.11 分支最终修复版18.11.1119.0 分支最终修复版19.0.819.1 分支最终修复版19.1.619.2 分支最终修复版19.2.4关键风险补充18.2~18.10所有子版本官方已停止维护无专属补丁包这类旧实例无法原地小版本补丁升级必须跨版本升级至18.11.11及以上这是很多老旧服务器的高危盲区。关联漏洞联动修复本次升级同步修复CVE-2026-19650CVSS 7.1该漏洞为GraphQL多路复用CSRF漏洞需要用户交互触发危害低于本次漏洞无需单独处理升级即可全部闭环。1.3 漏洞利用必要条件对抗式审查核心不是所有受版本的GitLab都能被直接利用我梳理出攻击者必须满足的两个前置条件也是我们临时防护的核心突破口第一服务器公网开放/api/graphqlPOST接口未做IP白名单、未做匿名访问拦截第二实例下存在任意Public公开项目、公开用户资料。私有仓库、私有用户资料不会被该漏洞操作但攻击者仍可通过漏洞遍历实例资源探测有效公开资产依旧存在数据泄露风险不能侥幸规避修复。2. 全套零依赖自查工具可直接生产落地网上多数检测脚本仅做版本比对无法识别接口暴露状态误报率极高。我编写两套实战脚本本地深度核查脚本版本接口风险资产检测、远程无损探测脚本同时补充手动核查标准流程适配所有部署环境。2.1 本地全能自查脚本Omnibus专属生产推荐该脚本不仅检测版本还自动校验GraphQL接口开放状态、统计公开项目数量、输出风险等级规避单纯版本比对的误判问题。#!/bin/bash# CVE-2026-19478 全能自查脚本# 适配GitLab Omnibus部署 18.x/19.x 全版本# 功能版本检测、漏洞风险判定、GraphQL接口探测、公开项目统计set-eecho GitLab CVE-2026-19478 深度自查 DATE$(date%Y-%m-%d %H:%M:%S)echo检测时间$DATE# 1. 获取GitLab版本get_gitlab_ver(){ifcommand-vgitlab-rake/dev/null;thengitlab-rake gitlab:env:info2/dev/null|grepGitLab version|awk{print $3}elifcommand-vgitlab-ctl/dev/null;thengitlab-ctl show-config|grepgitlab_version|awk{print $2}elseechoUNKNOWNfi}VER$(get_gitlab_ver)echo当前GitLab版本$VER# 版本比较函数$1 $2 返回0ver_ge(){printf%s\n%s\n$2$1|sort-V|head-n1|grep-q^$2$}# 风险版本区间定义VULN_FLAG0ifver_ge$VER18.2.0;thenif(ver_ge$VER18.11.0!ver_ge$VER18.11.11);thenVULN_FLAG1elif(ver_ge$VER19.0.0!ver_ge$VER19.0.8);thenVULN_FLAG1elif(ver_ge$VER19.1.0!ver_ge$VER19.1.6);thenVULN_FLAG1elif(ver_ge$VER19.2.0!ver_ge$VER19.2.4);thenVULN_FLAG1fifi# 2. 检测GraphQL接口匿名访问状态echo-e\n[1/3] 检测GraphQL匿名访问权限GITLAB_URLhttp://127.0.0.1:80GRAPHQL_CHECK$(curl-s-o/dev/null-w%{http_code}${GITLAB_URL}/api/graphql-XPOST)if[$GRAPHQL_CHECK!403][$GRAPHQL_CHECK!401];thenecho风险GraphQL接口支持匿名访问可被漏洞利用GRAPHQL_RISK1elseecho安全GraphQL匿名访问已拦截GRAPHQL_RISK0fi# 3. 统计公开项目数量echo-e\n[2/3] 统计实例公开风险项目PUBLIC_PROJECTS$(gitlab-rails runnerputs Project.public_only.count2/dev/null)echo当前实例公开项目总数${PUBLIC_PROJECTS}个if[${PUBLIC_PROJECTS}-gt0];thenPROJECT_RISK1echo风险存在公开项目满足漏洞利用前置条件elsePROJECT_RISK0echo安全无公开项目漏洞无法落地利用fi# 4. 综合风险判定echo-e\n[3/3] 最终风险评级if[$VULN_FLAG-eq1][$GRAPHQL_RISK-eq1][$PROJECT_RISK-eq1];thenecho-e\033[31m【高危】实例完全满足漏洞利用条件可被匿名删库篡改数据立即升级\033[0melif[$VULN_FLAG-eq1][$GRAPHQL_RISK-eq1];thenecho-e\033[33m【中危】版本脆弱且接口开放无公开项目仍存在潜在风险建议尽快升级\033[0melif[$VULN_FLAG-eq1];thenecho-e\033[34m【低危】版本存在漏洞但已做防护拦截仍需计划内升级修复\033[0melseecho-e\033[32m【安全】版本已修复无CVE-2026-19478漏洞风险\033[0mfiecho-e\n 检测结束 脚本使用方法1. 保存文件vim gitlab_cve_scan.sh2. 授权执行chmod x gitlab_cve_scan.sh3. 特权运行sudo ./gitlab_cve_scan.sh2.2 远程无损探测脚本内网批量巡检专用适用于运维批量扫描多台GitLab服务器仅读取公开版本接口无任何攻击行为合规安全可用于企业资产批量巡检。#!/bin/bash# 远程GitLab CVE-2026-19478 批量无损探测脚本# 用法./remote_scan.sh https://gitlab.xxx.comTARGET$1if[-z$TARGET];thenecho使用示例$0https://gitlab.example.comexit1fiver_ge(){printf%s\n%s\n$2$1|sort-V|head-n1|grep-q^$2$}# 获取远程版本RES$(curl-s-m8${TARGET}/api/v4/version)REMOTE_VER$(echo$RES|grep-oversion:[^]*|cut-d-f4)if[-z$REMOTE_VER];thenecho[$TARGET] 无法获取版本接口屏蔽或非GitLab实例exit2fiecho[$TARGET] 检测版本$REMOTE_VERRISK0ifver_ge$REMOTE_VER18.2.0;thenif(ver_ge$REMOTE_VER18.11.0!ver_ge$REMOTE_VER18.11.11);thenRISK1;fiif(ver_ge$REMOTE_VER19.0.0!ver_ge$REMOTE_VER19.0.8);thenRISK1;fiif(ver_ge$REMOTE_VER19.1.0!ver_ge$REMOTE_VER19.1.6);thenRISK1;fiif(ver_ge$REMOTE_VER19.2.0!ver_ge$REMOTE_VER19.2.4);thenRISK1;fifiif[$RISK-eq1];thenecho-e\033[31m[$TARGET] 存在CVE-2026-19478高危漏洞立即修复\033[0melseecho-e\033[32m[$TARGET] 版本安全无漏洞风险\033[0mfi2.3 Docker部署GitLab手动核查方案Docker容器化部署无法直接使用Omnibus脚本采用两步核查1. 进入容器查看版本docker exec -it gitlab gitlab-rake gitlab:env:info2. 宿主机curl探测GraphQL接口curl -X POST http://容器IP/api/graphql返回200/400状态码代表接口开放存在风险返回401/403代表拦截安全。3. 多环境漏洞修复升级实战教程修复优先级生产环境优先临时防护再执行备份最后升级版本。绝对禁止无备份直接升级GitLab跨版本极易出现数据库迁移异常、配置丢失问题。3.1 升级前置强制备份流程所有环境通用备份分为数据备份、配置备份、日志备份缺一不可用于升级失败回滚、入侵事后溯源。# 1. GitLab全量数据备份sudogitlab-backup create# 2. 配置文件完整备份sudocp-r/etc/gitlab /etc/gitlab.bak.$(date%Y%m%d%H%M)# 3. 日志目录备份用于事后排查sudocp-r/var/log/gitlab /var/log/gitlab.bak.$(date%Y%m%d%H%M)3.2 Debian/Ubuntu 系统升级APT方式适配90%企业生产环境Omnibus部署CE社区版、EE企业版分开命令直接复制执行。# 更新软件源sudoaptupdate# 【CE社区版】升级至稳定修复版19.2.4sudoaptinstallgitlab-ce19.2.4-ce.0-y# 【EE企业版】升级至稳定修复版19.2.4# sudo apt install gitlab-ee19.2.4-ee.0 -y# 重载配置并重启服务sudogitlab-ctl reconfiguresudogitlab-ctl restart3.3 CentOS/RHEL 系统升级DNF/YUM方式# 刷新软件源缓存sudodnf clean allsudodnf update# CE社区版升级sudodnfinstallgitlab-ce-19.2.4-ce.0.el9-y# EE企业版升级# sudo dnf install gitlab-ee-19.2.4-ee.0.el9 -y# 服务重构重启sudogitlab-ctl reconfiguresudogitlab-ctl restart3.4 Docker容器部署升级实战Docker升级核心是保留数据卷、替换镜像版本避免数据丢失步骤如下# 1. 停止并删除旧容器数据卷保留dockerstop gitlabdockerrmgitlab# 2. 拉取修复版本镜像dockerpull gitlab/gitlab-ce:19.2.4-ce.0# 3. 启动新容器沿用原有数据卷、配置dockerrun-d\--namegitlab\--restartalways\-v/srv/gitlab/config:/etc/gitlab\-v/srv/gitlab/logs:/var/log/gitlab\-v/srv/gitlab/data:/var/opt/gitlab\-p80:80-p443:443-p22:22\gitlab/gitlab-ce:19.2.4-ce.03.5 升级后校验标准流程升级完成后必须执行三项校验确认漏洞彻底修复1. 版本校验sudo gitlab-rake gitlab:env:info | grep version确认版本落在修复版本区间2. 服务校验sudo gitlab-ctl status所有组件无异常报错3. 接口校验匿名访问/api/graphql无法触发代码执行接口异常请求被拦截。3.6 跨大版本升级风险规避方案18.x升级19.x存在数据库结构变更直接跨版本升级会导致服务瘫痪。老旧18.2-18.10版本必须先中转升级至18.11.x稳定版再迭代升级至19.x修复版本禁止跳级升级。4. 临时应急防护方案无法立即升级场景部分生产环境因业务迭代、合规审批无法立刻升级可部署临时防护措施100%拦截漏洞利用请求。所有防护为过渡方案不替代版本升级。4.1 Nginx匿名GraphQL请求拦截最优应急方案通过反向代理规则禁止所有无授权头的匿名POST请求访问GraphQL接口不影响已登录用户、合法第三方授权调用。location /api/graphql { # 拦截无认证头部的匿名请求 if ($http_authorization ) { return 403; } # 原有代理规则不变 proxy_pass http://127.0.0.1:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }配置生效命令nginx -t systemctl restart nginx4.2 业务层风险收敛1. 批量将非业务必需的公开仓库改为私有消除漏洞利用目标2. 关闭公开用户资料展示权限阻断用户数据篡改链路3. 前置WAF规则拦截含gl_introduced关键字的恶意请求。4.3 网络层防护公网暴露的GitLab实例临时配置防火墙IP白名单仅允许办公网、开发网IP访问核心接口封禁全网匿名访问。5. 入侵溯源与事后排查全套方案若你的GitLab长期公网暴露、版本老旧大概率已被自动化扫描器探测攻击必须做全面排查避免后门留存、代码被篡改。5.1 日志精准检索命令# 1. 筛选所有匿名GraphQL POST攻击请求grep-igraphql/var/log/gitlab/nginx/gitlab_access.log|grep-vAuthorization|grepPOST# 2. 筛选项目删除、权限变更操作日志grep-Edestroy|delete|update_project|change_permission/var/log/gitlab/gitlab-rails/production.log# 3. 筛选用户状态篡改日志grep-Eblock_user|unblock_user|update_user/var/log/gitlab/gitlab-rails/production.log5.2 仓库完整性审计1. 核对所有公开仓库的最近10条提交记录、分支保护配置检查是否存在陌生commit、强制推送记录2. 核查CI/CD流水线配置、Runner注册信息排查是否植入恶意自动化任务3. 比对历史备份代码哈希值确认核心业务代码无篡改、无后门植入。5.3 入侵处置闭环流程确认入侵后先切断公网访问恢复可信备份升级漏洞版本重置所有用户Token、AccessKey、Runner密钥最后复盘攻击入口加固防护策略。6. 长期架构级加固方案彻底杜绝同类漏洞单次漏洞修复只能解决当下问题企业自托管GitLab的高危风险本质是公网裸奔、权限宽松、运维滞后导致。以下为可落地的长期加固规范。6.1 访问架构加固禁止GitLab直接暴露公网前置WAF、零信任网关、VPN访问控制核心开发接口仅内网可信IP可访问公网仅开放必要的静态页面访问权限。6.2 权限体系加固严格管控公开仓库权限企业内部项目全部私有仅开源展示类项目可公开且必须开启分支保护、禁止匿名操作、禁止外部用户提交代码。6.3 运维机制加固建立GitLab版本巡检机制每月自动检测版本漏洞跟进官方安全公告废弃停止维护的老旧版本避免漏洞长期潜伏。6.4 数据安全加固开启异地定时备份保留至少30天备份快照开启全量操作审计日志日志异地留存满足入侵溯源与合规要求。7. 漏洞防护整体架构图恶意GraphQL请求拦截匿名恶意请求放行合法授权请求公网攻击者WAF/防火墙拦截拒绝访问GitLab服务版本漏洞修复接口访问权限管控仓库权限私有化彻底杜绝漏洞利用文末互动提问1. 你的自托管GitLab目前是哪个部署架构Omnibus/Docker/源码是否已经完成版本升级修复2. 你平时会对GitLab公开仓库做权限收敛吗有没有遇到过匿名接口扫描攻击的情况

相关新闻

Grok 4.6通过Gauntlet测试:如何评估大模型在复杂任务中的真实能力

Grok 4.6通过Gauntlet测试:如何评估大模型在复杂任务中的真实能力

2026/8/21 20:20:43

最近,AI 圈子里关于“谁更强”的讨论又热闹了起来。但如果你是一个开发者,或者正在考虑将大模型能力集成到自己的产品中,那么“谁更强”可能不是最核心的问题。真正关键的是: 这个模型在特定、复杂的任务上,到底有多可…

CVE-2026-48362实战教程:ColdFusion命令注入检测、漏洞复现与补丁部署全流程

CVE-2026-48362实战教程:ColdFusion命令注入检测、漏洞复现与补丁部署全流程

2026/8/21 20:20:43

前言 2026年8月Adobe官方发布高危安全公告APSB26-90,披露了ColdFusion应用服务器的一处满分严重漏洞CVE-2026-48362。不同于常规需要权限、需要用户交互的漏洞,该漏洞实现了零认证、零交互、全网可达直接RCE,CVSS评分拉满10.0,是本…

Java面试核心:Spring Boot与微服务实战解析

Java面试核心:Spring Boot与微服务实战解析

2026/8/21 20:20:43

1. 项目概述:Java面试的技术纵深与实战突围 刚入行的Java开发者常陷入"学了一堆框架却不知面试官要考什么"的困境。最近辅导几位应届生准备Java岗位面试时,发现企业考察重点已从单纯的语法知识转向技术栈整合能力——特别是Spring Boot在微服务…

VRCT 零门槛快速上手:VRChat 实时翻译与语音转录实操指南

VRCT 零门槛快速上手:VRChat 实时翻译与语音转录实操指南

2026/8/21 21:10:45

VRCT 零门槛快速上手:VRChat 实时翻译与语音转录实操指南 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在 VRChat 里跟外国朋友组队,对方打的一长串英文你只能…

微信/QQ/TIM防撤回补丁完整安装指南:PC端撤回消息全留存的免费方案

微信/QQ/TIM防撤回补丁完整安装指南:PC端撤回消息全留存的免费方案

2026/8/21 21:10:45

微信/QQ/TIM防撤回补丁完整安装指南:PC端撤回消息全留存的免费方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https:…

如何免费激活 Office 365 订阅版:Ohook 完整部署指南

如何免费激活 Office 365 订阅版:Ohook 完整部署指南

2026/8/21 21:10:45

如何免费激活 Office 365 订阅版:Ohook 完整部署指南 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh_mirrors/oh/ohook …

SciNav:专为科学计算设计的Agent框架,从代码生成到工作流自动化

SciNav:专为科学计算设计的Agent框架,从代码生成到工作流自动化

2026/8/21 21:10:45

1. 从“AI美女聊天”到科学计算:为什么我们需要一个专门的Agent框架? 最近在技术社区里,关于“Agent Framework”的讨论热度很高,甚至出现了“AI美女聊天”这类偏向娱乐和对话的应用。这让我想起一个老生常谈的问题:当…

《数据结构实验指导-C++语言版》 求单链表list中的元素个数,即表长

《数据结构实验指导-C++语言版》 求单链表list中的元素个数,即表长

2026/8/21 21:10:45

题目描述 请编写程序,将 nnn 个整数顺次插入一个初始为空的单链表的表头。最后输出单链表的表长。 本题旨在训练学习者熟悉单链表的基本操作,不建议直接输出 nnn。 输入格式: 输入首先在第一行给出非负整数 nnn(≤15\le 15≤15&am…

RetroBar完整指南:5分钟把Win11任务栏换回XP风格

RetroBar完整指南:5分钟把Win11任务栏换回XP风格

2026/8/21 21:00:45

RetroBar完整指南:5分钟把Win11任务栏换回XP风格 【免费下载链接】RetroBar Classic Windows 95, 98, Me, 2000, XP, Vista taskbar for modern versions of Windows 项目地址: https://gitcode.com/gh_mirrors/re/RetroBar 你正盯着Win11千篇一律的任务栏发…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/20 21:07:35

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

091、主从同步控制策略

091、主从同步控制策略

2026/8/21 0:09:47

091、主从同步控制策略:从一次多轴抖动事故说起 去年调试一台四轴龙门平台,Z轴和两个X轴做主从同步。电机选的是台达A2系列,驱动器工作在位置模式,主站发脉冲指令,从站硬线跟随。调试时发现一个诡异现象:当主站以500rpm匀速运行时,从站电流波形每隔几秒会出现一次毛刺,…

向量检索实验失败后该查什么

向量检索实验失败后该查什么

2026/8/21 0:09:47

向量检索实验失败后该查什么 这篇要解决什么 向量检索实验失败后该查什么讨论的是一个可复查的工程问题。向量检索实验失败后该查什么不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理向量检索实验失败后该查…

提示词发布过程中的止损边界

提示词发布过程中的止损边界

2026/8/21 0:09:47

提示词发布过程中的止损边界 这篇要解决什么 提示词发布过程中的止损边界讨论的是一个可复查的工程问题。提示词发布过程中的止损边界不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理提示词发布过程中的止损…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…