原文发布时间:2026 年 10 月 23 日 18:20(UTC+8)。以下为该次分析的整理,不代表新的事件进展。
据慢雾(SlowMist)威胁情报团队分析,GitHub 仓库 Hylance/sol-live 以 Solidity 面试练习项目为掩护,在 VS Code 工作区配置中植入下载执行命令。其远程载荷具有收集浏览器数据库、钱包扩展存储、macOS 钥匙串文件,以及上传本地文件、监控剪贴板和执行远程命令的能力。
但这并不等于相关凭据已被成功窃取或解密。慢雾的结论来自归档源码、留存的 HTTP 响应和离线还原脚本;分析期间未执行恶意样本、未建立命令与控制(C2)会话,也未访问分析主机的浏览器数据、钥匙串或剪贴板。由于缺少受害主机记录,实际感染范围、数据外传情况及凭据解密结果均无法确认。
入口不是合约代码,而是工作区终端配置
项目 README 列出 8 道练习题,宣称每题预计耗时 5 至 10 分钟。与练习无关的命令则藏在 .vscode/settings.json 中:攻击者在命令前填入数百个空格,并通过 files.exclude 中的 **/.vscode 规则隐藏配置目录。
这一规则只影响 VS Code 文件树的显示,不会删除文件,也不会阻止编辑器读取工作区设置。
恶意配置分别使用 zsh、bash 和 powershell 等常见名称,但不同系统的触发条件并不相同:
- macOS、Linux:项目没有设置默认终端配置。用户需要主动选择项目定义的 zsh 或 bash 配置,并用它启动终端,才会触发相应命令。仅打开项目不能直接等同于已执行该链路。
- Windows:项目将 powershell 设为默认配置,并尝试通过隐藏窗口启动。不过,静态分析发现其单引号字符串会保留反斜杠,可能使写入
app.js的代码无法作为合法 JavaScript 解析。该链路未在 Windows 上运行验证,能否完成远程代码执行尚未确认。
慢雾同时区分了另一类工作区风险:Cos 此前公开的 vscode_tasks_command_execute_poc 使用 .vscode/tasks.json 自动任务,通过 runOn: folderOpen 关联文件夹打开事件,在自动任务获准运行时触发,不要求手动打开终端。它与 sol-live 的配置入口、触发条件不同,不能混为一谈。
下载后直接执行:信任边界在哪里被跨越
在已分析的 macOS、Linux 链路中,启动命令先检查 Node.js 和 npm。环境缺失时,它会调用 nvm-sh/nvm v0.40.3 官方安装器安装 nvm,再安装 Node.js LTS。
随后,命令安装 axios、写入 app.js,向固定地址发送不带请求体的 POST 请求,并把响应直接交给 eval 执行,没有校验响应内容。整个链路以当前用户权限运行,无需管理员授权;外层通过 nohup、输出重定向和后台执行降低可见性。
这里有一个影响取证定位的细节:命令将路径写成 "~/.vscode/cache"。由于双引号中的 ~ 不会被 bash 或 zsh 展开为用户主目录,实际落地位置是终端启动工作目录下的 ./~/.vscode/cache,通常位于项目目录内。只检查用户主目录下的 .vscode/cache,可能漏掉 app.js。
慢雾本次获取的远程响应约为 4 MB。离线还原显示,主程序可启动三个后台进程,分别处理浏览器数据收集、文件扫描上传和远程控制,并在系统临时目录记录进程 ID 与启动时间:
- 浏览器数据收集:
pid.2.1.lock - 文件扫描上传:
pid.2.2.lock - 远程控制:
pid.2.3.lock
在已分析代码中,未发现 macOS 开机自启服务、Windows 计划任务或 Linux 定时任务等系统启动机制。进程脱离父进程、记录进程信息以及调用 unref(),本身不代表系统重启后能够自动恢复;再次使用恶意终端配置则仍可能重新触发执行。
钱包扩展被复制,不等于私钥已被解密
浏览器数据收集模块内置 13 种 Chromium 系浏览器的路径规则,并检查 41 个硬编码扩展 ID 对应的本地存储目录,目标包括 MetaMask、Phantom、TronLink、Rabby 等钱包扩展。
其收集范围还包括浏览器 Login Data、Login Data For Account、Web Data 数据库,Brave 的 Local Storage/leveldb,以及 macOS 的 ~/Library/Keychains/login.keychain-db。在 WSL 环境下,代码还会尝试访问 Windows 用户目录中的浏览器配置。
需要明确三条能力边界:
- 浏览器密码解密函数
decryptPassword()在入口直接返回空字符串,后续 AES-GCM 和 DPAPI 分支不可达。因此,当前版本的该函数不会在本机还原浏览器明文密码。代码仍会提取网址、用户名和加密密码值,将加密值转换为 Base64 后写入p_encrypted字段。 - 钱包扩展本地数据是否加密,取决于扩展实现。复制扩展目录不等于已经获得助记词或私钥,原分析未验证这些数据能否解密。
- 获取
login.keychain-db不等于取得其中的明文凭据。该文件仍受用户登录密码保护,后续解密还取决于攻击者是否掌握相应密码或系统访问权限。
代码另有获取浏览器密码加密主密钥的函数,但其有效性受系统格式、权限和服务名影响,未经过运行验证。
收集文件被配置为上传至 172[.]86[.]112[.]107:8085/upload。请求使用硬编码密钥计算 HMAC-SHA256 校验值,但这只用于验证请求是否来自持有相应密钥的一方,不提供内容加密;上传采用明文 HTTP。该模块最多执行 11 个循环,间隔 30 秒,每三个循环查询一次数据库。
文件扫描与远控扩大了暴露范围
文件扫描上传模块在启动约 1 秒后开始工作,而非代码注释所写的“10 minutes”。它优先扫描桌面、文档、下载、云盘、Projects、Development、Code 等目录。优先目录中的文件,只要未被扩展名规则排除且不超过 5 MiB,就可进入上传队列,无需匹配敏感关键词。
随后,模块递归扫描用户主目录的其他位置,此时才要求路径匹配助记词、私钥、钱包、.env、配置、数据库、文档或截图等敏感规则。Windows 扫描范围扩展至所有磁盘,WSL 的 /mnt 也被列为优先扫描范围。最大递归深度为 20 层,单个文件上传失败后最多重试两次,即总计最多尝试三次。
虽然该扫描器跳过 .ssh、.aws、.gnupg、.kube、.config 等目录,但这些排除规则并不约束远程控制模块。后者仍可读取当前用户权限允许访问的指定文件,不能据此排除 SSH 密钥或云服务凭据风险。
远控模块的代码能力包括目录枚举、指定文件读取与上传、上传指定目录下一层的文件、执行服务器下发命令,以及交互式远程终端。其中,指定目录上传分支的单文件上限为 25 MiB。跨平台终端实现的实际效果未经过运行验证。
剪贴板监控逻辑则每秒读取一次内容;内容非空且与上次不同时,发送至配置的日志接口。服务器还可停止三类后台模块,但已获取代码中的启动控制逻辑只支持重新启动文件扫描上传模块。
排查与处置:先确认执行,再从可信设备处理凭据
慢雾建议优先排查曾使用相关恶意终端配置的主机,并将“仅打开项目”与“实际触发配置”区分开。
- 检查执行痕迹:结合终端操作、进程与网络日志,检查实际工作目录下的
./~/.vscode/cache/app.js、系统临时目录中的三个pid.2.*.lock文件,以及 Node.js 进程是否连接相关 IP。 - 隔离并保留信息:对已确认或无法排除执行的主机,先隔离并保留排查所需信息,再从可信设备进行钱包迁移和凭据轮换。
- 按风险处置钱包:对这类主机中使用或存储的助记词、私钥,按已泄露处理,在可信设备创建新钱包并迁移资产,同时核查旧地址的链上合约授权,撤销不再需要或存在风险的授权。这是预防性处置,不代表原分析已证实私钥泄露。
- 轮换其他凭据:包括浏览器账号密码、交易所 API 密钥、SSH 密钥和云服务凭据。macOS 用户还应更改登录密码,并轮换钥匙串中相关密码和密钥;更改登录密码不会让此前已被复制的旧钥匙串文件失效。
- 审查项目配置:接收面试题或练习项目时,先检查
.vscode/settings.json中的默认终端、自定义配置及启动参数。重点识别下载后直接执行、nohup后台运行、写入$PROFILE和调用eval等行为。未设置默认终端并不意味着安全,审查完成前不要启动项目定义的终端。
对其他含 Windows 配置的关联项目,应按各自实际命令检查 $PROFILE、%temp%\settings.cmd、Defender 排除项及连接记录,不能把不同项目的痕迹直接等同。
排查指标与关联项目范围
原文列出的域名包括 www[.]enabledomain[.]app、codeprettier[.]pro、www[.]configs[.]live、www[.]tanxilabs[.]com,IP 为 172[.]86[.]112[.]107。主要通信端口包括用于浏览器数据上传的 8085、文件扫描上传的 8086,以及远控通知、WebSocket 连接和剪贴板日志使用的 8087。
文件指纹如下:
sol-live.zip:SHA256 为573c5060ec782e3ec43d8db7be5042c2ed384017f90c6392799429d88e964c7d;MD5 为bb28e10c8d08cf302f0a51f8e3a2202c。enabledomain-post:SHA256 为79fca3decd09b7c86ffd4d05862e2ae76d0fbb90e705ff3f7ebf36f4c81ddd31。
除 Hylance/sol-live 外,慢雾还发现 8 个包含类似终端配置的仓库:zzz6519003/code-interview-js、Liao1/solidity、stockx-fi/stockx_v1、KchTT/javascipt-live、chicodias/python-live、moyea/javascript-live、Echo-skill-ai/go-live 和 pedromtcosta/tech-assignment。对这些项目的检查仅限于初步配置分析,未逐一获取并深入分析全部远程载荷。
完整 URL 指标见原文。仓库地址用于项目定位、取证和举报,不应据此封禁整个 github.com 域名,也不应将这些项目下载到日常工作环境中直接打开。
这起分析揭示的核心信任边界是:项目工作区配置可以影响本机终端如何启动,而终端一旦把未经校验的远程响应作为代码执行,风险便不再局限于练习项目本身。对钱包用户而言,判断损害时仍须区分代码具备的能力、实际执行证据,以及凭据是否真正被解密。
来源:慢雾《威胁情报|警惕!Web3 面试题暗藏盗窃后门》,原文发布于 2026 年 10 月 23 日 18:20(UTC+8)。