chvancooten/code-needle

GitHub: chvancooten/code-needle

通过本地 HTTP 端点在 VS Code 环境中静默执行任意 JavaScript 代码的扩展,用于授权红队评估中的后渗透操作。

Stars: 22 | Forks: 1

# CodeNeedle:轻量级 VS Code 扩展,用于隐蔽的运行时代码执行 ![CodeNeedle Low-Effort AI art header](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/43099dfe23161108.png) ## 概述 CodeNeedle 是一个 VS Code 扩展,可通过本地 HTTP 端点静默暴露 JavaScript 代码执行能力。加载到目标的 VS Code 实例后,扩展会在 localhost 上监听传入的 JSON-RPC 请求,执行任意 JavaScript 代码,并将结果返回给调用方。代码在隔离的子进程中以完整的 Node.js 权限运行,可访问文件系统、环境变量和系统上安装的任何 Node 模块。目标完全不知道扩展的存在,因为它完全在后台运行,没有 UI、命令或控制台输出。 专为需要开发环境内代码执行的后渗透攻击安全评估而设计。评估进程为 VS Code(`code`),这是受信任且广泛使用的工具,人们预期它会表现出各种行为(难以检测)。由于该扩展运行纯 JavaScript 代码,没有平台特定代码,因此可以在安装 VS Code 的任何平台上运行(Windows、Mac、Linux)。 ## 工作原理 当 VS Code 加载此扩展时,它会静默地在 localhost 端口 7672(默认)上启动 HTTP 服务器。外部工具(如植入物)通过 HTTP 上的 JSON-RPC 进行通信,发送要执行的 JavaScript 代码(或文件)。扩展通过 Node IPC 将每个请求分发到托管的子进程,代码在 `vm` 上下文中运行,可完全访问 Node.js 内置模块(fs、path、os、process、Buffer、crypto、require 等)。结果序列化为 JSON 并返回给调用方。如果代码无限挂起,进程会被终止并重新生成。如果 VS Code 关闭,HTTP 服务器会自动关闭。 ## 架构 ``` ┌─────────────────────────────────────────────────┐ │ VS Code Extension Host │ │ │ │ ┌──────────────┐ ┌────────────────────────┐ │ │ │ extension.ts │─▶│ EvaluatorManager │ │ │ │ (activate) │ │ (spawn/manage child) │ │ │ └──────┬───────┘ └──────────┬─────────────┘ │ │ │ │ Node IPC │ │ ┌──────┴───────┐ ┌──────────▼────────────┐ │ │ │ HttpRpcServer│ │ evaluator.js │ │ │ │ :7672 (local)│ │ (child process) │ │ │ │ JSON-RPC + │ │ vm.runInContext() │ │ │ │ multipart │ │ + Node std lib │ │ │ └──────────────┘ └───────────────────────┘ │ │ │ └─────────────────────────────────────────────────┘ ▲ │ HTTP POST (JSON-RPC 2.0 or multipart/form-data) │ External caller (curl, Node, Python, etc.) ``` ## 项目结构 ``` src/ ├── extension.ts # Entry point (activate/deactivate, starts HTTP server) ├── evaluatorManager.ts # Spawns and manages evaluator child process ├── evaluator.ts # Child process – executes JS in vm context with Node globals ├── httpServer.ts # HTTP server: JSON-RPC + multipart/form-data file upload └── types.ts # Shared types, JSON-RPC protocol definitions ``` ## 快速开始(开发) 以下步骤适用于 **Windows、macOS 和 Linux**。 ### 1. 安装依赖 ``` bun install ``` ### 2. 编译 ``` bun run compile ``` 或以监视模式运行: ``` bun run watch ``` ### 3. 在扩展开发主机中运行 1. 在 VS Code 中打开此文件夹 2. 按 **F5**(或运行 → 开始调试) 3. HTTP 服务器自动在端口 7672 上启动 ### 4. 从命令行测试 ``` # 健康检查 curl http://127.0.0.1:7672/health # 评估 JavaScript (JSON-RPC) curl -X POST http://127.0.0.1:7672 \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "eval", "params": { "language": "js", "code": "console.log(\"hello\"); return 2 + 2;" } }' # 评估 JavaScript (文件上传) curl -X POST http://127.0.0.1:7672 \ -F "script=@my-script.js" \ -F 'params={"timeoutMs": 5000}' ``` 使用包含的测试脚本: ``` bun test-client.js # Node.js test suite bash test-curl.sh # Quick curl smoke tests ``` ## 生产部署 要部署此扩展以供操作使用: ``` bun run package ``` 这会生成一个 `.vsix` 文件(例如 `code-needle-0.2.0.vsix`),可供分发。通过 VS Code 扩展菜单(从 VSIX 安装)或以编程方式安装。 **重要提示:**此扩展不会隐藏其身份或目的。运营者负责: - 打包和分发扩展(托管、传递机制) - 欺骗或伪装扩展元数据(清单、图标、名称、发布者)以使其看起来像合法、可信的扩展 - 通过社会工程或其他攻击向量部署 - 管理与此插件通信的 C2 植入物或后渗透有效载荷 ## 配置 | 设置 | 默认值 | 描述 | |---|---|---| | `codeNeedle.httpPort` | `7672` | HTTP JSON-RPC 服务器端口 | | `codeNeedle.defaultTimeoutMs` | `30000` | 默认执行超时时间(毫秒) | ## JSON-RPC 协议 ### 方法 1:JSON-RPC POST(application/json) #### 请求 ``` { "jsonrpc": "2.0", "id": 1, "method": "eval", "params": { "language": "js", "code": "return 2 + 2;", "timeoutMs": 30000, "context": { "name": "Alice", "count": 5 }, "dependencies": ["crypto", "url"] } } ``` | 字段 | 类型 | 必填 | 描述 | |---|---|---|---| | `language` | `"js"` | 是 | 要评估的语言(仅 JavaScript) | | `code` | `string` | 是 | 要执行的代码。使用 `return` 返回结果值。 | | `timeoutMs` | `number` | 否 | 超时时间(毫秒)(默认:30000) | | `context` | `object` | 否 | 注入到执行作用域的变量 | | `dependencies` | `string[]` | 否 | 要加载并注入到作用域的 Node.js 内置模块 | ### 方法 2:文件上传(multipart/form-data) 对于大型脚本(100KB+),使用文件上传以避免 JSON 转义开销: ``` # 简单文件上传 curl -X POST http://127.0.0.1:7672 \ -F "script=@my-script.js" # 文件上传与参数 (context, timeout, dependencies) curl -X POST http://127.0.0.1:7672 \ -F "script=@my-script.js" \ -F 'params={"timeoutMs": 5000, "context": {"key": "value"}, "dependencies": ["crypto"]}' ``` | 表单字段 | 类型 | 必填 | 描述 | |---|---|---|---| | `script` | 文件 | 是 | 要执行的 JavaScript 文件(最大 10MB,必须是 UTF-8 文本) | | `params` | 文本(JSON) | 否 | 包含 `timeoutMs`、`context`、`dependencies` 的 JSON 字符串 | 两种方法返回相同的 JSON-RPC 响应格式。 ### 成功响应 ``` { "jsonrpc": "2.0", "id": 1, "result": { "value": 4, "logs": ["hello"] } } ``` ### 错误响应 ``` { "jsonrpc": "2.0", "id": 1, "error": { "code": -32001, "message": "ReferenceError: x is not defined", "data": { "stack": "..." } } } ``` ### 错误代码 | 代码 | 含义 | |---|---| | -32700 | 解析错误(无效 JSON) | | -32600 | 无效请求 | | -32601 | 方法未找到 | | -32602 | 无效参数 | | -32603 | 内部错误 | | -32000 | 评估超时 | | -32001 | 评估错误(用户代码中的运行时错误) | | -32002 | 评估器崩溃 | ## 支持的全局变量 以下 Node.js 内置模块在每次评估中默认可用——无需导入或 `require()`: | 全局变量 | 描述 | 示例 | |---|---|---| | `fs` | 文件系统操作 | `fs.readFileSync('./data.json', 'utf8')` | | `path` | 路径工具 | `path.join('a', 'b', 'c')` | | `os` | 操作系统信息 | `os.platform()`, `os.tmpdir()` | | `process` | 进程信息 | `process.cwd()`, `process.env.HOME` | | `Buffer` | 二进制数据处理 | `Buffer.from('hello').toString('base64')` | | `util` | 工具函数 | `util.inspect(obj)` | | `require()` | 加载任何 Node.js 模块 | `require('crypto')`, `require('zlib')` | | `console` | 捕获的控制台输出 | `console.log('hello')`(在 `logs` 中返回) | | `setTimeout` | 定时器函数 | `setTimeout(() => {}, 1000)` | | `setInterval` | 间隔函数 | `setInterval(() => {}, 1000)` | ## 运行时依赖 通过 `dependencies` 参数请求额外的 Node.js 内置模块。这些通过 `require()` 加载并注入到评估作用域中: ``` { "jsonrpc": "2.0", "id": 1, "method": "eval", "params": { "language": "js", "code": "const hash = crypto.createHash('sha256').update('hello').digest('hex'); return hash;", "dependencies": ["crypto"] } } ``` 支持的模块包括所有 Node.js 标准库模块:`fs`、`path`、`os`、`util`、`crypto`、`http`、`https`、`url`、`querystring`、`stream`、`zlib`、`events`、`net`、`dns`、`tls`、`child_process` 等。 由于 `require()` 也可直接在用户代码中使用,您可以内联加载模块: ``` const zlib = require('zlib'); const compressed = zlib.gzipSync(Buffer.from('hello')); return compressed.length; ``` ## 测试 执行集成测试套件: ``` bun test ``` 这将运行全面测试,涵盖: - 基本评估和控制台捕获 - 健康检查和错误处理 - 超时检测和进程终止 - Node.js 全局变量(fs、path、os、process、Buffer) - 运行时依赖注入 - 大型脚本的多部分文件上传(100KB+) 测试使用端口 17672 上的独立服务器,无需运行 VS Code 实例。
标签:GNU通用公共许可证, HTTP工具, HTTP服务器, IP 地址批量处理, JavaScript执行器, JSON-RPC, MITM代理, Node.js, SSH蜜罐, 后渗透工具, 后门工具, 安全测试, 恶意扩展, 恶意软件, 攻击性安全, 文件系统访问, 无线安全, 本地提权, 环境变量窃取, 网络信息收集, 网络安全审计, 自动化攻击, 跨平台恶意软件, 运行时代码执行, 进程注入, 隐蔽执行, 隐蔽渗透