Apifox 供应链投毒安全事件预警与排查
猎户攻防实验室 2026-03-27 10:50 北京

字数 2830,阅读大约需 15 分钟
Apifox 供应链投毒安全事件预警与排查
一、事件概述
1.1 Apifox 产品简介
Apifox 是一款国产 API 一体化协作平台,集 API 文档、API 调试、API Mock、API 自动化测试于一体。该工具在国内开发社区拥有广泛的用户基础,被大量开发团队用于接口管理、前后端联调、自动化测试等场景。
项目 | 说明 |
| 产品定位 | API 一体化协作平台 |
| 核心功能 | API 文档、API 调试、Mock 服务、自动化测试 |
| 技术架构 | 桌面端基于 Electron 框架开发 |
| 支持平台 | Windows、macOS、Linux |
| 部署方式 | 公网 SaaS 版、私有化部署版 |
| 用户群体 | 国内大量开发团队、前后端工程师、测试工程师 |
由于 Apifox 在国内开发者群体中具有较高的普及度,此次供应链投毒事件的潜在影响范围较大,涉及大量开发者的核心敏感凭证。 |
1.2 事件基本信息
项目 | 详情 |
| 受影响产品 | Apifox 公网 SaaS 版桌面客户端(Windows/macOS/Linux) |
| 攻击时间窗口 | 2026年3月4日 - 2026年3月22日(持续 18天) |
| 攻击类型 | 供应链投毒 / CDN 脚本篡改 |
| 攻击载体 | 官方 CDN 托管的前端脚本文件被注入恶意 JavaScript 代码 |
| 恶意域名 | apifox.it.com(托管于 Cloudflare) |
1.3 事件描述
在 2026年3月4日至3月22日期间,Apifox 公网 SaaS 版桌面客户端动态加载的一个外部 JavaScript 文件(事件统计/追踪脚本)被恶意攻击者篡改。
正常情况下,Apifox 启动时会加载:
https://cdn.apifox.com/www/assets/js/apifox-app-event-tracking.min.js该文件正常大小为 34KB,但在投毒期间可能请求到被篡改版本(77KB,追加了约 42KB 的恶意代码)。
二、攻击技术简析
2.1 攻击链

2.2 技术特征
技术点 | 说明 |
| 框架利用 | 利用 Electron 框架未启用 |
| 混淆层级 | 7层混淆:字符串数组旋转 + Base64/RC4 双层解密 + 代理函数 + 控制流扁平化 + 死代码注入 + 反调试陷阱 |
| 加密通信 | 内嵌 RSA-2048 私钥,使用 OAEP 填充加密敏感数据 |
| 持久化 | setTimeout在 30分钟 ~ 3小时 随机间隔重新执行 |
| C2 特征 | 域名 |
2.3 被窃取的敏感信息
数据类型 | 路径/内容 | 风险等级 |
SSH 私钥 | ~/.ssh/id_rsa, | 🔴 极高 |
Git 凭证 | ~/.git-credentials | 🔴 极高 |
Shell 历史记录 | ~/.bash_history, | 🟠 高 |
npm Token | ~/.npmrc | 🟠 高 |
进程列表 | 系统进程信息 | 🟡 中 |
Apifox 账户 | 邮箱、姓名、访问令牌 | 🟡 中 |
机器指纹 | MAC地址 + CPU型号 + 主机名 + 用户主目录 SHA-256 | 🟡 中 |
三、恶意域名分析
3.1 域名欺骗性分析
攻击者使用的 C2 域名 apifox.it.com 具有高度欺骗性:
•
.it.com是商业性质的二级域名服务,非意大利国别域名.it• 无公开 WHOIS 信息,注册门槛极低
• 视觉上容易被误认为:
• Apifox 内部测试/研发域名
• Apifox 意大利区域服务域名
• Apifox 官方子产品域名
3.2 DNS 解析历史
IP 地址 | 所属组织 | 首次发现 | 最后发现 |
104.21.2.104 | Cloudflare, Inc. | 2026-03-04 | 2026-03-22 |
172.67.129.21 | Cloudflare, Inc. | 2026-03-04 | 2026-03-22 |
当前状态:DNS 记录已于 2026-03-22 下线,域名不再解析。
四、影响范围评估
4.1 受影响条件
同时满足以下条件的用户可能受影响:
1. ✅ 使用 Apifox 公网 SaaS 版桌面客户端(非网页版)
2. ✅ 在 2026年3月4日 - 3月22日 期间启动过 Apifox
3. ✅ 客户端版本 低于 2.8.19
4. ✅ 网络可访问
apifox.it.com(当时 DNS 生效)
4.2 不受影响的情况
• ❌ 仅使用 Apifox 网页版
• ❌ 使用 私有化部署版本
• ❌ 在攻击时间窗口外使用
• ❌ 已升级至 2.8.19 及以上版本
五、排查指南
5.0 快速判断标准
检测方法 | 判断标准 | 结果 |
| LevelDB 存储键 | 存在 | 🔴 已中招 |
| 网络状态文件 | 包含 | 🔴 已中招 |
| SSH 密钥访问时间 | 攻击窗口期内有异常访问 | 🟠 高度可疑 |
5.1 方法一:检查 LevelDB 存储键(推荐)
恶意代码会将机器指纹存储在 localStorage._rl_mc,攻击载荷相关数据存储在 localStorage._rl_headers,这些数据保存在 LevelDB 数据库中。这是最直接的判断依据。
关键文件路径
平台 | LevelDB 路径 |
| Windows | C:\Users\<用户名>\AppData\Roaming\Apifox\Local Storage\leveldb |
| macOS | ~/Library/Application Support/Apifox/Local Storage/leveldb |
| Linux | ~/.config/apifox/Local Storage/leveldb |
Windows 检测命令
# PowerShell - 检查 leveldb 中是否存在恶意键
Select-String-Path"$env:APPDATA\Apifox\Local Storage\leveldb\*"-Pattern"rl_mc","rl_headers"-List | Select-Object Path# CMD 备用命令
findstr /S /I "rl_mc" "%APPDATA%\Apifox\Local Storage\leveldb\*.*"结果判断:
• 有输出文件路径 → 🔴 已中招
• 无输出 → ✅ 安全
macOS 检测命令
# 检查 leveldb 中是否存在恶意键
grep -arlE "rl_mc|rl_headers" ~/Library/Application\ Support/Apifox/Local\ Storage/leveldb/结果判断:
• 输出文件路径 → 🔴 已中招
• 无输出 → ✅ 安全
Linux 检测命令
# 检查 leveldb 中是否存在恶意键
grep -arlE "rl_mc|rl_headers" ~/.config/apifox/Local\ Storage/leveldb/结果判断:
• 输出文件路径 → 🔴 已中招
• 无输出 → ✅ 安全
5.2 方法二:检查网络持久化状态文件
Chromium/Electron 应用会记录访问过的服务器属性到 Network Persistent State 文件。如果该文件包含恶意域名,说明曾连接过 C2 服务器。
关键文件路径
平台 | Network Persistent State 路径 |
| Windows | C:\Users\<用户名>\AppData\Roaming\apifox\Network\Network Persistent State |
| macOS | ~/Library/Application Support/apifox/Network/Network Persistent State |
| Linux | ~/.config/apifox/Network/Network Persistent State |
Windows 检测命令
# 检查 Network Persistent State 文件中是否包含恶意域名
Get-Content"$env:APPDATA\apifox\Network\Network Persistent State" | Select-String'apifox.it.com'结果判断:
• 有输出内容 → 🔴 已中招
• 无输出 → ✅ 安全
macOS 检测命令
# 检查 Network Persistent State 文件中是否包含恶意域名
grep -a "apifox.it.com" ~/Library/Application\ Support/apifox/Network/Network\ Persistent\ State结果判断:
• 有输出内容 → 🔴 已中招
• 无输出 → ✅ 安全
Linux 检测命令
# 检查 Network Persistent State 文件中是否包含恶意域名
grep -a "apifox.it.com" ~/.config/apifox/Network/Network\ Persistent\ State结果判断:
• 有输出内容 → 🔴 已中招
• 无输出 → ✅ 安全
5.3 方法三:检查 SSH 密钥访问时间(辅助判断)
恶意代码必须读取私钥文件才能窃取,可通过最后访问时间进行辅助判断。
Windows
# 查看私钥文件访问时间
Get-ChildItem-Path"$env:USERPROFILE\.ssh" | Select-Object Name, LastAccessTime
# 检查 .git-credentials
Get-Item-Path"$env:USERPROFILE\.git-credentials"-ErrorAction SilentlyContinue | Select-Object FullName, LastAccessTimemacOS / Linux
# 查看私钥文件最后访问时间
ls -lu ~/.ssh判断标准:
• 关注
id_rsa、id_ed25519等私钥文件(无.pub后缀)• 如果在 2026-03-04 至 2026-03-22 期间有非主动操作的访问记录,需高度警惕
5.4 方法四:检查系统日志(辅助判断)
macOS
# 查询包含恶意域名的系统日志
log show --predicate 'eventMessage contains "apifox.it.com"' --last 30d --info --debug
# 查询 DNS 解析记录
sudolog show --predicate 'eventMessage contains "apifox.it.com" or eventMessage contains "104.21.2.104" or eventMessage contains "172.67.129.21"' --last 30dWindows
# 查看 DNS 缓存(需管理员权限)
ipconfig /displaydns | findstr "apifox.it.com"Linux
# 检查历史命令中的可疑记录
grep -E "apifox.it.com|curl|wget" ~/.bash_history ~/.zsh_history 2>/dev/null
# 检查网络连接历史(需要 root)
sudo journalctl -u NetworkManager --since "2026-03-04" --until"2026-03-23" | grep -i apifox5.5 清理缓存(建议)
建议清理 Apifox 缓存和残留文件。
Windows
# 删除 Apifox 缓存目录
Remove-Item-Path"$env:APPDATA\Apifox"-Recurse-Force-ErrorAction SilentlyContinue
Remove-Item-Path"$env:LOCALAPPDATA\Apifox"-Recurse-Force-ErrorAction SilentlyContinue
Remove-Item-Path"$env:LOCALAPPDATA\com.apifox.app"-Recurse-Force-ErrorAction SilentlyContinuemacOS
# 彻底删除 Apifox 缓存和残留文件
rm -rf ~/Library/Application\ Support/Apifox
rm -rf ~/Library/Caches/com.apifox.app
rm -rf ~/Library/Saved\ Application\ State/com.apifox.app.savedStateLinux
# 清理缓存
rm -rf ~/.config/Apifox
rm -rf ~/.cache/Apifox5.6 网络层检测(企业环境)
在企业网络环境中,可查询防火墙/代理日志:
# 检索恶意域名访问记录
domain: apifox.it.com
# 检索恶意 IP 连接
dst_ip: 104.21.2.104 OR 172.67.129.215.7 排查结果判定汇总
检测结果 | 状态 | 建议操作 |
LevelDB 检测到 | 🔴 已中招 | 立即执行应急处置 |
Network Persistent State 包含 | 🔴 已中招 | 立即执行应急处置 |
SSH 密钥有异常访问时间 | 🟠 高度可疑 | 建议按已中招处理 |
所有检测均无异常 | ✅ 安全 | 升级到最新版本,清理缓存 |
六、处置建议
6.1 立即措施(优先级:🔴 紧急)
序号 | 措施 | 说明 |
1 | 升级 Apifox | 升级至 2.8.19 或更高版本 |
2 | 轮换 SSH 密钥 | 删除旧密钥,生成新密钥并重新部署 |
3 | 轮换 Git 凭证 | 撤销旧的 Personal Access Token,生成新 Token |
4 | 轮换 npm Token | 撤销并重新生成 npm access token |
6.2 短期措施(优先级:🟠 高)
序号 | 措施 | 说明 |
1 | 检查代码仓库 | 审计近期提交是否为本人操作 |
2 | 检查服务器访问 | 审计服务器登录日志,排查异常访问 |
3 | 修改 Apifox 密码 | 更改账户密码,启用双因素认证 |
4 | 清理本地缓存 | 执行 5.1-5.3 中的清理命令 |
6.3 长期措施(优先级:🟡 中)
序号 | 措施 | 说明 |
1 | 部署网络监控 | 使用 LuLu/Little Snitch 等工具监控应用网络行为 |
2 | 建立密钥轮换机制 | 定期更换 SSH 密钥、API Token 等敏感凭证 |
3 | 加强供应链安全意识 | 对动态加载外部脚本保持警惕 |
4 | 实施最小权限原则 | 限制开发工具的网络访问权限 |
七、企业级响应建议
7.1 安全团队行动项

7.2 IOC 指标
类型 | 值 |
| 恶意域名 | apifox.it.com |
| 恶意 IP | 104.21.2.104 |
| 恶意 IP | 172.67.129.21 |
| 恶意 URL | https://apifox.it.com/public/apifox-event.js |
| 恶意 URL | https://apifox.it.com/event/0/log |
| 被投毒文件 | apifox-app-event-tracking.min.js(77KB 版本) |
| 本地存储键 | localStorage._rl_mc(存储机器指纹)、 |
八、官方修复说明
8.1 修复版本
• 安全版本:Apifox 桌面客户端 2.8.19 及以上
8.2 修复措施
1. 将相关埋点/统计脚本改为安装包内资源,不再从 CDN 动态拉取
2. 加强了 Electron 框架的安全配置
8.3 官方公告
• Apifox 官方公告 https://docs.apifox.com/8392582m0
九、总结
本次 Apifox 供应链投毒事件是一起典型的软件供应链攻击,攻击者利用 CDN 动态加载机制的缺陷,成功将恶意代码注入到广泛的开发者群体中。
核心教训:
1. 动态加载外部脚本存在重大安全隐患
2. Electron 应用需严格启用沙箱机制
3. 开发者需定期轮换敏感凭证(SSH 密钥、Token 等)
4. 供应链安全是现代软件开发不可忽视的一环
参考资料
1. Apifox 供应链投毒攻击 - 完整技术分析 https://rce.moe/2026/03/25/apifox-supply-chain-attack-analysis/
2. Apifox 官方公告 https://docs.apifox.com/8392582m0
3. Apifox CDN 供应链投毒事件简单复盘 - 离别歌 https://www.leavesongs.com/PENETRATION/apifox-supply-chain-attack-analysis.html
本报告基于公开信息整理,仅供参考。