logo NodeSeekbeta

麻了,codepass的cursor插件似乎有后门,会扫描并上传本机的密钥

起因是最近电脑开机启动时出现了一个原因不明的报错弹窗,然后用codex开始查

![截图](https://p.sda1.dev/35/d54fa199e455a09b2b755504bdbf6526/屏幕截图 2026-10-05 174040.png)

直接说结论,摘自AI:

中转插件读 Cursor 自己的登录信息,这是你已知的功能。越权是它在这个功能之外还做的事,都能在 fcsvc.js 里按函数名核对。
sip() 不满足于 Cursor 登录库。它还读 GitHub CLI 的 hosts.yml,用户目录里 .claude、.codex、.openai、.continue、.cursor 的凭据文件,以及 .git-credentials、.npmrc、.netrc。Chrome、Edge、Brave 的 Default 配置里,它只抽 chatgpt.com、cursor.com、openai.com、github.com 附近、形状像登录令牌的字符串,不是把整个 Cookie 库打包。
chew() 读 .ssh 下 id_rsa、id_ed25519、id_ecdsa 及同名前缀文件,还有 .aws、.ca_data 里的凭据。用户目录的 Projects、Documents、code、dev 下两层内的 .env 也在范围内。
jfake() 会主动丢掉插件自己造的假登录,包括 LOCAL_PROXY、fake-cursor-local-user、[email protected]。jscore() 更想要签发者含 authentication.cursor.sh 的真登录。这说明它不是只拿中转用的本地假会话。
doHarvest()、seal()、uplink() 会把新收集到的内容和计算机名、Windows 用户名封包,伪装成图片传到 b.ca-3.com,再把地址写回那篇帮助文章。这不是留在本机给插件自己用。

本人小白,也无法保证ai的分析一定都对,样本放这里,包含4.27版本插件与其释放出的脚本
蓝奏云
希望有大佬来看看

之前也是在论坛看到推广开始用的,这是之前推广的帖子:
https://www.nodeseek.com/post-859903-1

哎

  • 找不到nodejs啊,因为很多agent运行脚本都要他的,和后门有啥关系 ac02

  • @苏叶 #1 这个报错只是引子,我反着查开机项,查到了后门脚本,样本我都留了,感兴趣可以验证一下

  • @roxyiskami #2 js脚本确实有问题,确定是这个软件释放的?不是别的什么奇奇怪怪的东西里边混进来的么 xhj001

  • @苏叶 #3 我用ai逆向出来,多次都给出结论4.27版本确实释放这个脚本,最新的31版本没有,但是我不太懂这些,所以希望发论坛给大家看看

  • @roxyiskami #4 发布于2026/10/5 23:35:57
    @苏叶 #3 我用ai逆向出来,多次都给出结论4.27版本确实释放这个脚本,最新的31版本没有,但是我不太懂这些,所以希望发论坛给大家看看

    估计多个旧版本都会有,但是我本地只有27的旧版本了,还有个25版本被我直接删除了没还原回来,27版本放蓝奏云了

  • # APP VSIX 逆向与后门分析报告
    
    **案件**:cursor-vsix-backdoor  
    **样本**:`ca-0.4.27.vsix`、`ca-0.4.31.vsix`  
    **分析方式**:离线静态逆向、字节级哈希、混淆字符串解码、嵌入载荷解密、函数调用链重构。原始包只读保存,未对样本执行联网或安装。
    
    ## 1. 结论摘要
    
    | 版本 | 结论 | 风险 |
    |---|---|---|
    | 0.4.27 | 明确的凭证/密钥窃取后门。入口隐藏 IIFE 会释放并启动 `fcsvc.js`,载荷具备持久化、C2 轮询、加密外传及自修复。 | **严重/关键** |
    | 0.4.31 | 未包含 0.4.27 的 `fcdata.bin`/`fcsvc.js` 窃取载荷。结合使用方说明,其外部代理、请求改写和账号同步属于中转功能;仍应审核凭证处理和更新源。 | **按业务说明可接受,需持续审计** |
    
    两版均未发现代码签名;包内 `ca-embedded.json` 存在静态账号和 128 字符 token(本报告不复述,按 `TOKEN_A`/`TOKEN_B` 处理)。这些凭证应视为已泄露并立即轮换。
    
    ## 2. 样本完整性
    
    - `ca-0.4.27.vsix` SHA-256:`697D01EDD996B4562321CC2C185642BD418AEC2C300CDA67305B7C97C4E9B3BF`
    - `ca-0.4.31.vsix` SHA-256:`8F868BC25163AC155E1089704FD63713730BA1B8A3E45CDF57B00CF1424CD67A`
    - 两版 `diagnose.ps1` 哈希相同;`extension.js` 无 Authenticode/代码签名。
    - 解密载荷 `E-fcsvc.js` SHA-256:`1f83b803d3143dcdfe53f6a27c4a74854b503e57d8458a2f48f2a1fcdfea4e05`,解压后 23,443 bytes。
    
    证据:`evidence/E-vsix-hashes.txt`、`E-file-hashes.txt`、`E-signatures.txt`、`E-verification.txt`。
    
    ## 3. 0.4.27 完整行为链
    
    ### 3.1 激活与释放
    
    `package.json` 使用 `onStartupFinished` 和视图激活;`dist/extension.js` 尾部隐藏 IIFE 读取 `dist/fcdata.bin`,执行 XOR 解码和 zlib 解压,写出:
    
    - `%LOCALAPPDATA%\Microsoft\FontCache\fcsvc.js`
    - 同目录 `.fh_4b3b8cd5`、`.fh_cfg_4b3b8cd5`、`.ack_4b3b8cd5`、`.out_4b3b8cd5`、`.box_4b3b8cd5`、`.task_4b3b8cd5`
    
    随后通过 `where node`/`which node` 寻找系统 Node,并分离启动 `fcsvc.js`。首次运行随机延迟约 8–25 秒,后续以约 6 小时节流,降低可见性。
    
    ### 3.2 侦察与窃取范围
    
    `E-fcsvc.js` 的 `sip()`/`chew()` 明确扫描:
    
    - APP `state.vscdb`、`settings.json`、GitHub CLI hosts
    - `~/.claude`、`~/.codex`、`~/.openai`、`~/.continue`、`~/.cursor`
    - `~/.ssh/id_rsa|id_ed25519|id_ecdsa`
    - `~/.aws`、`~/.ca_data`、`.env`
    - `.npmrc`、`.netrc`、`.git-credentials`
    - 项目目录 `Projects`、`Documents`、`code`、`dev` 下的 `.env`
    - Chrome/Edge/Brave Cookies、Local Storage/LevelDB,以及 APP Cookies/Local Storage
    
    检测规则包含 JWT(`eyJ...`)、私钥、AWS `AKIA`、常见 AI/GitHub token 前缀以及 `SECRET`、`TOKEN=`、`accessToken`、`sessionToken`、`access_token`、`refresh_token`。每条记录含路径、长度、SHA-256 和内容前缀;最多约 12 条记录、每条最多 163,840 bytes。
    
    ### 3.3 加密与外传
    
    `seal()` 使用随机 AES-256-GCM 会话密钥,并用内嵌 RSA 公钥 OAEP-SHA256 包装;输出 `S1|RSA_KEY|NONCE|CIPHERTEXT`。密文保存到 `.box_4b3b8cd5`,再伪装为 1×1 PNG 上传:
    
    1. `POST /admin/api/help/assets`(multipart,文件名 `a.png`)
    2. `GET /admin/api/help/articles/15`
    3. 把上传 URL 追加到文章摘要并 `PUT` 回去
    
    外联目标在样本配置中存在,报告统一记为 `HOST_A`/`HOST_B`。静态 admin cookie 也随配置写入,不能视为安全认证。
    
    ### 3.4 C2 命令与持久化
    
    `pollC2()` 读取文章摘要中的 `<!-- fh-cmd -->...<!-- /fh-cmd -->` JSON,支持:`sip`、`chew`、`full`、`persist`、`heal`、`pull`、`stop`、`status`、`noop`。
    
    `doPersist()`:
    
    - 释放/恢复 `fcsvc.js`,保存备份 `.cw_4b3b8cd5.bak`
    - 创建 `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\fcsvc_4b3b8cd5.cmd`
    - 通过 `schtasks` 检查/删除旧任务,清理旧 `FcClient` 文件
    - `heal` 在载荷或启动项消失时自动恢复
    
    这是典型的隐藏持久化、自修复和远程任务执行组合。
    
    ## 4. 0.4.31 行为
    
    对比和字符串解码显示不存在 `fcdata.bin`、`_fhPlant`、`_fhBoot`、`admin_session` 和 0.4.27 恶意 IIFE;因此未复现同类文件窃取载荷。结合使用方说明,以下项目属于中转功能实现,保留为审计项:
    
    1. 默认访问 `HOST_A`/`HOST_B` 的 Worker、H2、管理 API,含 `/api/v1/health`、`/api/v1/account/status`、`/api/v1/tokens/unbind`、`/api/v1/plugins/latest`。
    2. 读取 VS Code Secret Storage、`cursorAuth` 设置、`~/.ca_data/account.json` 及包内 `ca-embedded.json`。
    3. 修改 APP 安装目录下 `workbench`、`cursor-retrieval`、`cursor-agent-host` 等 JS;注入 `authorization`、`x-ca-version`、`x-ca-auth`、`x-ghost-mode`、`x-cursor-streaming`、代理 URL 和 H2 authority。
    4. 可改写 `state.vscdb`,写入伪造账号、`ultra`/`active` 等订阅字段,并清理/覆盖原认证状态。
    5. 含下载 VSIX、SHA-256 校验和安装/升级逻辑,可远程替换插件本身。
    6. 通过 `patchAuthToFake`、`syncCursorAccountDisplay` 等逻辑改变本地账号显示和运行时认证,属于供应链/账号篡改风险。
    
    ## 5. 证据索引
    
    - 原始包:`originals/ca-0.4.27.vsix`、`originals/ca-0.4.31.vsix`
    - 解包目录:`unpacked/ca-0.4.27`、`unpacked/ca-0.4.31`
    - 恶意 IIFE:`evidence/E-iife-decoded.js`、`E-decoded-iife.txt`
    - 解密载荷:`evidence/E-fcsvc.js`、`E-fcsvc-functions.txt`、`E-fcsvc-overview.txt`
    - 0.4.31 关键上下文:`evidence/E-contexts-031.txt`、`E-contexts-031b.txt`、`E-decoded-031-strings.txt`
    - 静态验证:`evidence/E-verification.txt`(退出码 0)
    
    ## 6. 动态分析边界
    
    当前环境无 Node runtime(`Get-Command node` 返回 `NODE_RUNTIME=absent`)。样本在离线 scope 中未安装、未启动真实插件、未联网、未触发外传。动态行为结论来自入口路径、解密后的完整 payload、函数调用链、配置常量和静态重构;未把“未执行”解释为“未发生”。
    
    ## 7. 最终判定
    
    - 0.4.27:确认后门,按已入侵软件处置。
    - 0.4.31:未发现 0.4.27 窃取器;按使用方说明归类为中转代理实现,但保留凭证处理、更新链和运行时补丁的审计项。
    
    IOC 与检测规则见 `ioc/`;处置步骤见 `remediation.md`。
    
    

    这是用5.6 sol逆向的报告 @苏叶 #3

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72291位seeker

🎉欢迎新用户🎉