@remnux/mcp-server 0.1.71 → 0.1.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -342,9 +342,12 @@ All three connection modes (docker, ssh, local) execute commands inside a dispos
342
342
  | Archive zip-slip (path traversal in archives) | Analysis session | Post-extraction validation rejects path escape attempts |
343
343
  | SSH injection | SSH connection | Proper shell escaping using single quotes |
344
344
  | Host-side file read via `upload_from_host` (docker/ssh mode) | Analyst's workstation (outside isolation) | Opt-in `--sandbox` confines the source to `--ingest-root` (realpath-resolved). See the disclosure below. |
345
+ | Host-side command execution via a file transfer (docker mode) | Analyst's workstation (outside isolation) | Every host-side `docker` invocation runs as an argument vector with no shell, so a path can never be parsed as a command. See "The server process is part of the trusted computing base" below. |
345
346
 
346
347
  **Where `upload_from_host` reads from, and why it matters.** The relevant boundary is **connector mode (`local` vs `docker`/`ssh`), not transport**. In `local` mode (including HTTP transport with the local connector), the AI already has shell-level read on the REMnux box by design: `run_tool` executes arbitrary commands there, so `upload_from_host` reading a file outside the samples directory adds nothing beyond what the model already grants. In `docker`/`ssh` mode, `upload_from_host` is the one tool that reads from the machine where the server runs, the analyst's workstation, via `docker cp` or SFTP. That read happens outside the container/VM isolation that bounds everything else, so a prompt-injected client could stage a host file such as `~/.ssh/id_rsa` or `~/.aws/credentials` into REMnux. Enable `--sandbox` with `--ingest-root=<host staging dir>` to confine that read. In docker/ssh mode, `--ingest-root` is required when `--sandbox` is set, because the samples directory lives inside REMnux rather than on the host.
347
348
 
349
+ **The server process is part of the trusted computing base.** Container/VM isolation is the boundary, and in docker/ssh mode this server is the control plane that mediates it: it runs on the analyst's workstation, outside that isolation, and it handles paths and filenames that originate inside REMnux. So the code that invokes `docker` is itself security-relevant, independent of anything the container can or cannot do. Every host-side `docker` call is therefore executed as an argument vector (`execFileSync`, no shell), which is what keeps a filename a filename. Building those calls as shell command strings was [GHSA-qp43-2vqh-w88w](https://github.com/REMnux/remnux-mcp-server/security/advisories/GHSA-qp43-2vqh-w88w): POSIX single-quote escaping is inert under `cmd.exe`, so on a Windows workstation a crafted filename reached by `download_file` became host command execution. The mitigation is removing the shell, not escaping better. Escaping is shell-specific and was silently wrong on one platform, and a filter strict enough to be safe under `cmd.exe` would have to reject characters that are legal in filenames analysts really encounter (`%VAR%` alone is expanded before metacharacters are parsed). Argument-vector execution makes the question moot: a filename stays a filename.
350
+
348
351
  **Other considerations:** A theoretical TOCTOU race exists between path validation and tool execution; container isolation is the primary mitigation (use immutable sample storage for high-security contexts). The `upload_from_host` confinement closes its own check-vs-read race by reading the realpath it validated. Tool description poisoning is mitigated by using build-time constants rather than runtime lookups from external sources.
349
352
 
350
353
  **What does NOT need protection (container/VM's job):** REMnux filesystem, packages, services, privileges, network config, devices, mounts, and path traversal inside REMnux — all disposable and container-isolated.
@@ -353,7 +356,7 @@ All three connection modes (docker, ssh, local) execute commands inside a dispos
353
356
 
354
357
  1. **Container/VM isolation**: REMnux runs isolated — the primary security boundary (user responsibility)
355
358
  2. **Command guards**: Block null-byte injection and catastrophic session-wipe commands (`mkfs`, `rm -rf /`). Shell metacharacters (`$()`, backticks, `${}`, pipes) are intentionally allowed because container/VM isolation, not in-band filtering, is the boundary
356
- 3. **Shell escaping**: Proper single-quote escaping for SSH commands
359
+ 3. **No host-side shell**: Host-side `docker` invocations (including every `docker cp` file transfer) run as argument vectors with no shell, so paths and filenames cannot be parsed as commands on the analyst's workstation. Single-quote escaping applies only to commands sent to the remote POSIX shell inside REMnux, never to host-side execution
357
360
  4. **Timeouts**: Long-running processes terminated (default 5 min)
358
361
  5. **Output budgets**: Per-tool (40KB default) and total (120KB) limits prevent AI context exhaustion
359
362
  6. **Path sandboxing** (opt-in via `--sandbox`): Restricts file operations to samples/output dirs
@@ -12,6 +12,10 @@ export declare class DockerConnector implements Connector {
12
12
  buildTimeoutWrappedCommand(command: string[], timeoutMs: number): string[];
13
13
  buildRootChownArgv(remotePath: string): string[] | null;
14
14
  buildEnsureDirsArgvs(): string[][];
15
+ buildCopyToContainerArgv(hostPath: string, remotePath: string): string[];
16
+ buildCopyFromContainerArgv(remotePath: string, hostPath: string): string[];
17
+ private dockerBinary;
18
+ private resolveDockerBinary;
15
19
  private runDocker;
16
20
  private ensureBaseDirsOwned;
17
21
  private chownToExecUser;
@@ -1 +1 @@
1
- {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/connectors/docker.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAI/B,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKrE,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,eAAe,CAAS;gBAQ9B,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAW,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM;IA8BpB,sBAAsB,CACpB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,WAAgB,GACxB,MAAM,CAAC,iBAAiB;IAkB3B,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ1E,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQvD,oBAAoB,IAAI,MAAM,EAAE,EAAE;YAUpB,SAAS;YAQT,mBAAmB;YAenB,eAAe;IAUvB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAkK1E,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgD7D,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActE,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgB7E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
1
+ {"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/connectors/docker.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,WAAW,CAAC;AAI/B,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMrE,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,eAAe,CAAS;gBAQ9B,aAAa,EAAE,MAAM,EACrB,QAAQ,SAAW,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM;IA8BpB,sBAAsB,CACpB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,GAAE,WAAgB,GACxB,MAAM,CAAC,iBAAiB;IAkB3B,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAQ1E,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQvD,oBAAoB,IAAI,MAAM,EAAE,EAAE;IAalC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAMxE,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAO1E,OAAO,CAAC,YAAY,CAAuB;IAW3C,OAAO,CAAC,mBAAmB;YAgCb,SAAS;YAQT,mBAAmB;YAenB,eAAe;IAUvB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAkK1E,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyC7D,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtE,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgB7E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -2,6 +2,7 @@ import Docker from "dockerode";
2
2
  import { writeFileSync, unlinkSync, mkdtempSync } from "fs";
3
3
  import { tmpdir } from "os";
4
4
  import { join, basename } from "path";
5
+ import { resolveExecutable } from "./resolve-executable.js";
5
6
  // Output size limit (10MB)
6
7
  const MAX_OUTPUT_SIZE = 10 * 1024 * 1024;
7
8
  export class DockerConnector {
@@ -84,11 +85,62 @@ export class DockerConnector {
84
85
  ["exec", "-u", "0", this.containerName, "chown", this.execUser, ...this.baseDirs],
85
86
  ];
86
87
  }
88
+ // Build the `docker cp` argv that copies a host file INTO the container. Pure and
89
+ // testable. Each operand is a single argv element, so no character in a path is
90
+ // ever parsed as SHELL syntax. (Docker still parses its own options and the
91
+ // `container:path` notation — callers pass absolute host paths, and the
92
+ // container-side operand is always `name:`-prefixed, so no operand reads as a flag.)
93
+ buildCopyToContainerArgv(hostPath, remotePath) {
94
+ return ["cp", hostPath, `${this.containerName}:${remotePath}`];
95
+ }
96
+ // Build the `docker cp` argv that copies a container file OUT to the host. Same
97
+ // guarantee as above, and the direction that reaches the analyst's workstation.
98
+ buildCopyFromContainerArgv(remotePath, hostPath) {
99
+ return ["cp", `${this.containerName}:${remotePath}`, hostPath];
100
+ }
101
+ // Fully qualified path to the docker CLI, resolved from PATH on first use and
102
+ // cached for the life of this connector. Lazy rather than eager so constructing
103
+ // a connector never requires Docker to be installed.
104
+ dockerBinary = null;
105
+ // Resolve `docker` to an absolute path, deliberately NOT letting the platform
106
+ // do it. A bare name handed to execFileSync is resolved by libuv, which on
107
+ // Windows searches the process's current directory BEFORE PATH (and tries
108
+ // `.com` before `.exe`) — so a sample unpacked into the analyst's working
109
+ // directory could plant a `docker.com` that this server would then run on the
110
+ // host. See resolve-executable.ts for the libuv citation.
111
+ //
112
+ // Never falls back to the bare name: that would restore the very search this
113
+ // avoids. A missing docker is a startup-shaped problem and says so.
114
+ resolveDockerBinary() {
115
+ if (this.dockerBinary)
116
+ return this.dockerBinary;
117
+ const resolved = resolveExecutable("docker", {
118
+ pathEnv: process.env.PATH ?? process.env.Path,
119
+ platform: process.platform,
120
+ });
121
+ if (!resolved) {
122
+ throw new Error("Could not find the 'docker' executable in PATH. Install Docker, or add " +
123
+ "its directory to PATH using a fully qualified path. Note that the " +
124
+ "current working directory is intentionally not searched.");
125
+ }
126
+ this.dockerBinary = resolved;
127
+ return resolved;
128
+ }
87
129
  // Run `docker <argv>` via execFileSync — no shell, so values cannot inject commands.
88
- // Best-effort: callers swallow failures so ownership repair never blocks analysis.
130
+ // This is the security boundary for every host-side docker invocation, not a
131
+ // defense-in-depth nicety: the MCP server process runs on the analyst's workstation,
132
+ // outside the container isolation the threat model relies on, and it handles paths
133
+ // derived from container-side data. A shell here (cmd.exe on Windows, where POSIX
134
+ // single-quote escaping is inert) turns a filename into host command execution —
135
+ // GHSA-qp43-2vqh-w88w. `shell: false` is execFileSync's default and is passed
136
+ // explicitly so the invariant is visible and testable.
137
+ //
138
+ // Throws on failure. Callers that are best-effort (ownership repair) catch for
139
+ // themselves; the file-transfer callers deliberately do not, so a failed copy
140
+ // surfaces to the analyst.
89
141
  async runDocker(argv) {
90
142
  const { execFileSync } = await import("child_process");
91
- execFileSync("docker", argv, { stdio: "pipe" });
143
+ execFileSync(this.resolveDockerBinary(), argv, { stdio: "pipe", shell: false });
92
144
  }
93
145
  // Idempotently make the samples/output dirs owned by the exec user. Runs once per
94
146
  // connector. Best-effort: the dirs may already be correct, or docker may be
@@ -275,13 +327,9 @@ export class DockerConnector {
275
327
  try {
276
328
  // Write content to temp file
277
329
  writeFileSync(tempPath, content);
278
- // Use docker cp to copy into container
279
- // docker cp tempPath containerName:remotePath
280
- // Escape single quotes in paths for shell safety (defense-in-depth)
281
- const escapedTempPath = tempPath.replace(/'/g, "'\\''");
282
- const escapedRemotePath = remotePath.replace(/'/g, "'\\''");
283
- const { execSync } = await import("child_process");
284
- execSync(`docker cp '${escapedTempPath}' '${this.containerName}:${escapedRemotePath}'`, { stdio: "pipe" });
330
+ // Copy into the container as an argv — no shell, so nothing in either path
331
+ // can be parsed as a command (see runDocker).
332
+ await this.runDocker(this.buildCopyToContainerArgv(tempPath, remotePath));
285
333
  // docker cp preserves the host file's numeric UID/GID and mode (NOT the exec
286
334
  // user), so a file that is not world/group readable on the host would be
287
335
  // unreadable by a non-root exec user. Chown the copied path to the exec user so
@@ -302,19 +350,13 @@ export class DockerConnector {
302
350
  }
303
351
  async writeFileFromPath(remotePath, hostPath) {
304
352
  await this.ensureBaseDirsOwned();
305
- const escapedRemotePath = remotePath.replace(/'/g, "'\\''");
306
- const escapedHostPath = hostPath.replace(/'/g, "'\\''");
307
- const { execSync } = await import("child_process");
308
- execSync(`docker cp '${escapedHostPath}' '${this.containerName}:${escapedRemotePath}'`, { stdio: "pipe" });
353
+ await this.runDocker(this.buildCopyToContainerArgv(hostPath, remotePath));
309
354
  // docker cp preserves the host uid/mode, which may not grant the non-root exec
310
355
  // user access. Chown the copied path to the exec user so tools can read it.
311
356
  await this.chownToExecUser(remotePath);
312
357
  }
313
358
  async readFileToPath(remotePath, hostPath) {
314
- const escapedRemotePath = remotePath.replace(/'/g, "'\\''");
315
- const escapedHostPath = hostPath.replace(/'/g, "'\\''");
316
- const { execSync } = await import("child_process");
317
- execSync(`docker cp '${this.containerName}:${escapedRemotePath}' '${escapedHostPath}'`, { stdio: "pipe" });
359
+ await this.runDocker(this.buildCopyFromContainerArgv(remotePath, hostPath));
318
360
  }
319
361
  async executeShell(command, options = {}) {
320
362
  // Calculate shell timeout (slightly shorter than client timeout to fire first)
@@ -1 +1 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/connectors/docker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/connectors/docker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Shell-free executable resolution that never consults the current directory.
3
+ *
4
+ * WHY THIS EXISTS
5
+ *
6
+ * Handing a bare program name to child_process.execFile/spawn is not neutral on
7
+ * Windows. libuv's uv_spawn resolves it with its own search, and from
8
+ * libuv/src/win/process.c:
9
+ *
10
+ * "- If there's really only a filename, check the current directory for file,
11
+ * then search all path directories."
12
+ *
13
+ * if (NeedCurrentDirectoryForExePathW(L"")) {
14
+ * // The file is really only a name; look in cwd first, then scan path
15
+ *
16
+ * That branch is taken unless the NoDefaultCurrentDirectoryInExePath environment
17
+ * variable is set, which it is not by default. libuv also appends ".com" before
18
+ * ".exe" (path_search_walk_ext), so a planted `docker.com` wins over a genuine
19
+ * `docker.exe` sitting on PATH.
20
+ *
21
+ * This matters here specifically: an analyst plausibly runs their AI client from
22
+ * a directory where a malware sample was unpacked, which makes the process cwd
23
+ * attacker-influenced. A sample that drops `docker.com` next to itself would then
24
+ * be executed by this server, on the host, outside the container isolation the
25
+ * threat model depends on.
26
+ *
27
+ * Passing a FULLY QUALIFIED path removes the search entirely. libuv takes its
28
+ * `file_has_dir` branch (which consults neither cwd nor PATH), and
29
+ * search_path_join_test zeroes the cwd for an absolute path with a drive letter.
30
+ *
31
+ * The resolution below is therefore deliberately stricter than the platform's:
32
+ * only fully qualified PATH directories are considered, so no candidate can ever
33
+ * depend on where the process happens to be running.
34
+ *
35
+ * SCOPE. This removes cwd-dependent DISCOVERY of the executable. It does not
36
+ * establish that the resolved binary is trustworthy: a PATH directory writable by
37
+ * the attacker is still a PATH directory, and DLL search order for the resolved
38
+ * executable is the Windows loader's business, not ours.
39
+ */
40
+ export interface ResolveExecutableOptions {
41
+ /** Raw PATH value. Undefined or empty means "do not guess" — resolution fails. */
42
+ pathEnv: string | undefined;
43
+ platform: NodeJS.Platform;
44
+ /**
45
+ * Existence/executability probe. Injectable so both platform branches can be
46
+ * exercised on any runner; defaults to a real filesystem check.
47
+ */
48
+ isExecutableFile?: (candidate: string) => boolean;
49
+ }
50
+ /**
51
+ * True only for a path that resolves identically regardless of the process's
52
+ * current directory AND current drive.
53
+ *
54
+ * `path.win32.isAbsolute()` is NOT usable for this: it returns true for "\tools"
55
+ * and "/tools", which libuv resolves against the current drive
56
+ * (search_path_join_test sets cwd_len = 2 for them), leaving cwd in play.
57
+ */
58
+ export declare function isFullyQualified(entry: string, platform: NodeJS.Platform): boolean;
59
+ /**
60
+ * Split a raw PATH value into entries.
61
+ *
62
+ * Windows PATH entries may be quoted, and a quoted entry may itself contain the
63
+ * ';' delimiter — a naive split corrupts those. Empty entries are dropped: on
64
+ * both platforms an empty entry means "the current directory".
65
+ */
66
+ export declare function splitPathEnv(pathEnv: string | undefined, platform: NodeJS.Platform): string[];
67
+ /**
68
+ * Candidate filenames to try inside each directory, in libuv's order.
69
+ *
70
+ * From path_search_walk_ext: the literal name is tried first ONLY when it
71
+ * already carries a non-empty extension, then ".com" is appended, then ".exe".
72
+ * A bare "docker" is therefore never tried as an extensionless file, because
73
+ * CreateProcess cannot run one.
74
+ */
75
+ export declare function candidateNames(name: string, platform: NodeJS.Platform): string[];
76
+ /**
77
+ * Resolve a bare executable name to a fully qualified path using PATH only.
78
+ *
79
+ * Returns null when nothing is found. Callers MUST NOT fall back to the bare
80
+ * name on null: that hands resolution straight back to the cwd-first search
81
+ * this function exists to bypass.
82
+ */
83
+ export declare function resolveExecutable(name: string, options: ResolveExecutableOptions): string | null;
84
+ //# sourceMappingURL=resolve-executable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-executable.d.ts","sourceRoot":"","sources":["../../src/connectors/resolve-executable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAIH,MAAM,WAAW,wBAAwB;IACvC,kFAAkF;IAClF,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CACnD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAgBlF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB,MAAM,EAAE,CA2CV;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CAgBhF;AAkBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,wBAAwB,GAChC,MAAM,GAAG,IAAI,CAyBf"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Shell-free executable resolution that never consults the current directory.
3
+ *
4
+ * WHY THIS EXISTS
5
+ *
6
+ * Handing a bare program name to child_process.execFile/spawn is not neutral on
7
+ * Windows. libuv's uv_spawn resolves it with its own search, and from
8
+ * libuv/src/win/process.c:
9
+ *
10
+ * "- If there's really only a filename, check the current directory for file,
11
+ * then search all path directories."
12
+ *
13
+ * if (NeedCurrentDirectoryForExePathW(L"")) {
14
+ * // The file is really only a name; look in cwd first, then scan path
15
+ *
16
+ * That branch is taken unless the NoDefaultCurrentDirectoryInExePath environment
17
+ * variable is set, which it is not by default. libuv also appends ".com" before
18
+ * ".exe" (path_search_walk_ext), so a planted `docker.com` wins over a genuine
19
+ * `docker.exe` sitting on PATH.
20
+ *
21
+ * This matters here specifically: an analyst plausibly runs their AI client from
22
+ * a directory where a malware sample was unpacked, which makes the process cwd
23
+ * attacker-influenced. A sample that drops `docker.com` next to itself would then
24
+ * be executed by this server, on the host, outside the container isolation the
25
+ * threat model depends on.
26
+ *
27
+ * Passing a FULLY QUALIFIED path removes the search entirely. libuv takes its
28
+ * `file_has_dir` branch (which consults neither cwd nor PATH), and
29
+ * search_path_join_test zeroes the cwd for an absolute path with a drive letter.
30
+ *
31
+ * The resolution below is therefore deliberately stricter than the platform's:
32
+ * only fully qualified PATH directories are considered, so no candidate can ever
33
+ * depend on where the process happens to be running.
34
+ *
35
+ * SCOPE. This removes cwd-dependent DISCOVERY of the executable. It does not
36
+ * establish that the resolved binary is trustworthy: a PATH directory writable by
37
+ * the attacker is still a PATH directory, and DLL search order for the resolved
38
+ * executable is the Windows loader's business, not ours.
39
+ */
40
+ import { accessSync, statSync, constants } from "fs";
41
+ /**
42
+ * True only for a path that resolves identically regardless of the process's
43
+ * current directory AND current drive.
44
+ *
45
+ * `path.win32.isAbsolute()` is NOT usable for this: it returns true for "\tools"
46
+ * and "/tools", which libuv resolves against the current drive
47
+ * (search_path_join_test sets cwd_len = 2 for them), leaving cwd in play.
48
+ */
49
+ export function isFullyQualified(entry, platform) {
50
+ if (!entry)
51
+ return false;
52
+ if (platform !== "win32") {
53
+ return entry.startsWith("/");
54
+ }
55
+ // UNC: \\server\share or //server/share
56
+ if (/^[\\/]{2}[^\\/]/.test(entry))
57
+ return true;
58
+ // Drive-qualified: X:\... or X:/... — the separator after the colon is what
59
+ // separates this from the drive-RELATIVE "C:tools", which resolves against
60
+ // that drive's own working directory.
61
+ if (/^[A-Za-z]:[\\/]/.test(entry))
62
+ return true;
63
+ return false;
64
+ }
65
+ /**
66
+ * Split a raw PATH value into entries.
67
+ *
68
+ * Windows PATH entries may be quoted, and a quoted entry may itself contain the
69
+ * ';' delimiter — a naive split corrupts those. Empty entries are dropped: on
70
+ * both platforms an empty entry means "the current directory".
71
+ */
72
+ export function splitPathEnv(pathEnv, platform) {
73
+ if (!pathEnv)
74
+ return [];
75
+ const delimiter = platform === "win32" ? ";" : ":";
76
+ const entries = [];
77
+ let current = "";
78
+ let quote = null;
79
+ let atEntryStart = true;
80
+ for (const ch of pathEnv) {
81
+ // libuv only honours a quote that OPENS an entry:
82
+ // dir_start = dir_end; if (*dir_start == L'"' || *dir_start == L'\'') ...
83
+ // Treating a quote anywhere would make an apostrophe in an ordinary
84
+ // directory name (C:\Users\O'Brien\bin) swallow the following delimiter and
85
+ // merge it with the next entry, hiding a real Docker installation.
86
+ if (platform === "win32" && atEntryStart && quote === null && (ch === '"' || ch === "'")) {
87
+ quote = ch;
88
+ atEntryStart = false;
89
+ continue;
90
+ }
91
+ if (quote !== null && ch === quote) {
92
+ quote = null;
93
+ continue;
94
+ }
95
+ if (ch === delimiter && quote === null) {
96
+ entries.push(current);
97
+ current = "";
98
+ atEntryStart = true;
99
+ continue;
100
+ }
101
+ current += ch;
102
+ atEntryStart = false;
103
+ }
104
+ entries.push(current);
105
+ // Whitespace: cmd.exe preserves it, and so do we on POSIX, where a trailing
106
+ // space is a legal part of a directory name and trimming would silently point
107
+ // at a different directory. On Windows a path component cannot end in a space
108
+ // (the API strips it), while "C:\a; C:\b" spacing is common in real PATHs, so
109
+ // trimming there only helps find Docker and can never widen what we accept:
110
+ // every entry still has to clear isFullyQualified.
111
+ const cleaned = platform === "win32" ? entries.map((e) => e.trim()) : entries;
112
+ return cleaned.filter((e) => e.length > 0);
113
+ }
114
+ /**
115
+ * Candidate filenames to try inside each directory, in libuv's order.
116
+ *
117
+ * From path_search_walk_ext: the literal name is tried first ONLY when it
118
+ * already carries a non-empty extension, then ".com" is appended, then ".exe".
119
+ * A bare "docker" is therefore never tried as an extensionless file, because
120
+ * CreateProcess cannot run one.
121
+ */
122
+ export function candidateNames(name, platform) {
123
+ if (platform !== "win32")
124
+ return [name];
125
+ // libuv uses wcschr — the FIRST dot, not the last — and requires a character
126
+ // after it for the name to count as already having an extension.
127
+ const dot = name.indexOf(".");
128
+ const hasExtension = dot !== -1 && dot < name.length - 1;
129
+ // "Add a dot if the filename didn't end with one": a name already ending in a
130
+ // dot reuses it rather than gaining a second.
131
+ const join = (ext) => name.endsWith(".") ? `${name}${ext}` : `${name}.${ext}`;
132
+ return hasExtension
133
+ ? [name, join("com"), join("exe")]
134
+ : [join("com"), join("exe")];
135
+ }
136
+ function defaultIsExecutableFile(candidate, platform) {
137
+ try {
138
+ // statSync follows symlinks, which is required: package managers and Docker
139
+ // Desktop both install the CLI as a symlink in common setups.
140
+ if (!statSync(candidate).isFile())
141
+ return false;
142
+ if (platform === "win32")
143
+ return true;
144
+ accessSync(candidate, constants.X_OK);
145
+ return true;
146
+ }
147
+ catch {
148
+ return false;
149
+ }
150
+ }
151
+ /**
152
+ * Resolve a bare executable name to a fully qualified path using PATH only.
153
+ *
154
+ * Returns null when nothing is found. Callers MUST NOT fall back to the bare
155
+ * name on null: that hands resolution straight back to the cwd-first search
156
+ * this function exists to bypass.
157
+ */
158
+ export function resolveExecutable(name, options) {
159
+ const { pathEnv, platform } = options;
160
+ const probe = options.isExecutableFile ?? ((c) => defaultIsExecutableFile(c, platform));
161
+ const separator = platform === "win32" ? "\\" : "/";
162
+ const candidates = candidateNames(name, platform);
163
+ for (const entry of splitPathEnv(pathEnv, platform)) {
164
+ if (!isFullyQualified(entry, platform))
165
+ continue;
166
+ // Strip one trailing separator so we do not emit a doubled one. Backslash
167
+ // counts only on Windows: on POSIX it is an ordinary filename character,
168
+ // and treating it as a separator would point at a different directory.
169
+ const isTrailingSeparator = entry.endsWith("/") || (platform === "win32" && entry.endsWith("\\"));
170
+ const base = isTrailingSeparator ? entry.slice(0, -1) : entry;
171
+ for (const candidate of candidates) {
172
+ const full = `${base}${separator}${candidate}`;
173
+ if (probe(full))
174
+ return full;
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ //# sourceMappingURL=resolve-executable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-executable.js","sourceRoot":"","sources":["../../src/connectors/resolve-executable.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-file.d.ts","sourceRoot":"","sources":["../../src/handlers/analyze-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAgBnD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,SAAS,EAAE,eAAe,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;CACtE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,WAAW,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAyFV;AA+ID;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA0BlD,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,eAAe;;;;;;GAmctB"}
1
+ {"version":3,"file":"analyze-file.d.ts","sourceRoot":"","sources":["../../src/handlers/analyze-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAgBnD,UAAU,OAAO;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,SAAS,EAAE,eAAe,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;CACtE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,YAAY,EAAE,WAAW,EAAE,EAC3B,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,CAyFV;AA+ID;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA0BlD,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,eAAe;;;;;;GAqctB"}
@@ -8,8 +8,8 @@ import { formatResponse, formatError } from "../response.js";
8
8
  import { REMnuxError } from "../errors/remnux-error.js";
9
9
  import { toREMnuxError } from "../errors/error-mapper.js";
10
10
  import { extractIOCs } from "../ioc/extractor.js";
11
+ import { sanitizeToolOutputForIOCScan } from "../utils/metadata-filter.js";
11
12
  import { filterStderrNoise } from "../utils/stderr-filter.js";
12
- import { filterMetadataLines } from "../utils/metadata-filter.js";
13
13
  import { resolveSamplePath } from "../utils/resolve-sample-path.js";
14
14
  import { checkFileExists } from "../utils/check-file-exists.js";
15
15
  import { getPreprocessors } from "../tools/preprocessors.js";
@@ -348,6 +348,8 @@ export async function handleAnalyzeFile(deps, args) {
348
348
  // indicator that sits past a tool's display budget (e.g. a C2 URL deep in
349
349
  // webcrack's deobfuscated output) is still extracted, not just saved to file.
350
350
  const fullOutputs = [];
351
+ // Per-tool copies with the tool's own provenance stripped; the IOC corpus is built from these.
352
+ const iocScanOutputs = [];
351
353
  let totalOutputSize = 0;
352
354
  // Step 3: Run each tool
353
355
  for (const tool of tools) {
@@ -498,6 +500,10 @@ export async function handleAnalyzeFile(deps, args) {
498
500
  }
499
501
  }
500
502
  fullOutputs.push(fullOutput.length > IOC_SCAN_CAP ? fullOutput.slice(0, IOC_SCAN_CAP) : fullOutput);
503
+ // Strip the tool's own provenance BEFORE the size cap. capa emits one JSON document, so
504
+ // truncating first would leave unparseable JSON and the provenance would flow through.
505
+ const scanOutput = sanitizeToolOutputForIOCScan(tool.name, fullOutput);
506
+ iocScanOutputs.push(scanOutput.length > IOC_SCAN_CAP ? scanOutput.slice(0, IOC_SCAN_CAP) : scanOutput);
501
507
  toolsRun.push({
502
508
  name: tool.name,
503
509
  command: cmd,
@@ -521,16 +527,11 @@ export async function handleAnalyzeFile(deps, args) {
521
527
  }
522
528
  }
523
529
  }
524
- const combinedOutput = fullOutputs.join("\n\n")
530
+ const combinedOutput = iocScanOutputs.join("\n\n")
525
531
  .replace(/^\s*"command":\s*".*"$/gm, "");
526
- // Filter metadata lines (author, reference, namespace, etc.) to prevent false IOC extraction
527
- // from tool/rule metadata (e.g., capa authors, YARA rule references)
528
- const filteredOutput = filterMetadataLines(combinedOutput);
529
- const iocResult = extractIOCs(filteredOutput);
530
- // Filter out the analyzed file's own hashes from IOC results
531
- if (ownHashes.size > 0) {
532
- iocResult.iocs = iocResult.iocs.filter((ioc) => !ownHashes.has(ioc.value.toLowerCase()));
533
- }
532
+ // The file's own hashes are excluded during extraction rather than after it, so an excluded
533
+ // hash cannot take a slot under the per-type cap and hide a real indicator behind it.
534
+ const iocResult = extractIOCs(combinedOutput, ownHashes.size > 0 ? { exclude: ownHashes } : undefined);
534
535
  // Generate triage summary and next steps
535
536
  const triageSummary = generateTriageSummary(category.name, toolsRun, iocResult.iocs.length);
536
537
  const suggestedNextSteps = generateNextSteps(category.name, depth, toolsRun, toolsSkipped, iocResult.iocs.length);
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-file.js","sourceRoot":"","sources":["../../src/handlers/analyze-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze-file.js","sourceRoot":"","sources":["../../src/handlers/analyze-file.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,15 @@
5
5
  */
6
6
  import { type NoiseFilterOptions } from "./noise.js";
7
7
  /** Options for IOC extraction */
8
- export type ExtractOptions = NoiseFilterOptions;
8
+ export interface ExtractOptions extends NoiseFilterOptions {
9
+ /**
10
+ * Values to drop before scoring and capping — in practice the analyzed file's own hashes,
11
+ * which are not indicators OF the sample. Compared lower-cased. Applied here rather than to
12
+ * the returned list so an excluded value cannot occupy a slot under the per-type cap and hide
13
+ * a real indicator behind it.
14
+ */
15
+ exclude?: Set<string>;
16
+ }
9
17
  export interface IOCEntry {
10
18
  value: string;
11
19
  type: string;
@@ -18,6 +26,13 @@ export interface IOCResult {
18
26
  total: number;
19
27
  noise_filtered: number;
20
28
  by_type: Record<string, number>;
29
+ /**
30
+ * What the noise filter rejected, per type. `analyze_file` returns `iocs` but not `noise`, so
31
+ * without this a filtered indicator disappears with no trace — and the domain rules in
32
+ * particular reject plausible-looking values. This says how many of each type were dropped,
33
+ * so the omission is visible; `extract_iocs` with `include_noise` returns the values.
34
+ */
35
+ noise_by_type?: Record<string, number>;
21
36
  truncated?: string[];
22
37
  };
23
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/ioc/extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG9D,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAwBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAwF7E"}
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/ioc/extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAW,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG9D,iCAAiC;AACjC,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC;;;;;WAKG;QACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAwBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAgG7E"}
@@ -28,7 +28,8 @@ const TYPE_MAP = {
28
28
  };
29
29
  const NOISE_THRESHOLD = 0.3;
30
30
  export function extractIOCs(text, options) {
31
- // 1. Standard extraction
31
+ // 1. Standard extraction. The text is scanned exactly as given; callers that pass tool output
32
+ // sanitize it first with sanitizeToolOutputForIOCScan().
32
33
  const libResult = extractIOC(text);
33
34
  // 2. Collect all entries (value, type) avoiding duplicates
34
35
  const seen = new Set();
@@ -66,6 +67,8 @@ export function extractIOCs(text, options) {
66
67
  const iocs = [];
67
68
  const noise = [];
68
69
  for (const entry of allEntries) {
70
+ if (options?.exclude?.has(entry.value.toLowerCase()))
71
+ continue;
69
72
  if (isNoise(entry.value, entry.type, options) || entry.confidence <= NOISE_THRESHOLD) {
70
73
  noise.push(entry);
71
74
  }
@@ -95,6 +98,10 @@ export function extractIOCs(text, options) {
95
98
  for (const entry of cappedIocs) {
96
99
  byType[entry.type] = (byType[entry.type] || 0) + 1;
97
100
  }
101
+ const noiseByType = {};
102
+ for (const entry of noise) {
103
+ noiseByType[entry.type] = (noiseByType[entry.type] || 0) + 1;
104
+ }
98
105
  return {
99
106
  iocs: cappedIocs,
100
107
  noise,
@@ -102,6 +109,7 @@ export function extractIOCs(text, options) {
102
109
  total: cappedIocs.length,
103
110
  noise_filtered: noise.length,
104
111
  by_type: byType,
112
+ ...(noise.length > 0 && { noise_by_type: noiseByType }),
105
113
  ...(truncatedTypes.length > 0 && { truncated: truncatedTypes }),
106
114
  },
107
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/ioc/extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/ioc/extractor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/ioc/noise.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoFH,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAmH1F"}
1
+ {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/ioc/noise.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmIH,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAsH1F"}
package/dist/ioc/noise.js CHANGED
@@ -75,6 +75,52 @@ function isLikelyVersionString(ip) {
75
75
  const nums = parts.map((p) => parseInt(p, 10));
76
76
  return nums.every((n) => n >= 0 && n <= 20) && nums.some((n) => n === 0);
77
77
  }
78
+ /**
79
+ * Reject "domains" that are really fragments of high-entropy binary data.
80
+ *
81
+ * Scanning a packed executable produces a long tail of two-label strings that satisfy a domain
82
+ * regex but cannot be registrations — "0dpC.Nf", "A.Ad", "C.MS", "Cr.nr". They crowd genuine
83
+ * domains out of the per-type IOC cap, so they are demoted to noise.
84
+ *
85
+ * The signal is casing and label shape rather than a TLD allowlist: every one of these carries a
86
+ * real ccTLD, so an allowlist does not separate them, while DNS references in tool output are
87
+ * written lowercase and registrable labels are not one random capital letter.
88
+ *
89
+ * Each rule is written to spare the real domains that look superficially similar — "t.co" and
90
+ * "qq.com" (short but lowercase), "163.com" (all-digit label of three characters), and
91
+ * "EVIL.COM" (an uppercase configuration string, which malware really does embed).
92
+ */
93
+ function isImplausibleDomainShape(value) {
94
+ // Every rule below applies only to a bare two-label string, which is the shape this noise
95
+ // takes. A deeper hostname is left alone for two reasons: in "CDN.example.co.uk" the
96
+ // second-to-last label is the public suffix "co" rather than the registrable name, so reading
97
+ // it as one would reject an ordinary host; and a multi-label name is far likelier to be a real
98
+ // reference than a fragment of binary data.
99
+ const labels = value.split(".");
100
+ if (labels.length !== 2)
101
+ return false;
102
+ const tld = labels[1];
103
+ const registrable = labels[0];
104
+ // A capitalized TLD inside an otherwise mixed-case string ("0dpC.Nf", "ANA.Bg", "8.tK").
105
+ // A uniformly uppercase string such as "EVIL.COM" is exempt — that is a plausible config
106
+ // string — and so is ordinary title case such as "Bit.ly", whose TLD stays lowercase.
107
+ if (/[A-Z]/.test(tld) && /[a-z]/.test(value))
108
+ return true;
109
+ // A single-digit registrable label ("0.cl", "3.NZ"). Two and three digits are left alone,
110
+ // because "58.com", "22.cn", "51.la", and "163.com" are real registrations.
111
+ if (/^\d$/.test(registrable))
112
+ return true;
113
+ // A registrable label of one or two characters in a string carrying a capital ("B.ms", "C.MS",
114
+ // "Cr.nr", "91.UA"). The lowercase forms "t.co", "x.com", "vk.com", and "qq.com" are untouched,
115
+ // and a domain referenced by a URL is extracted as a `url` and never reaches this check.
116
+ if (registrable.length <= 2 && /[A-Z]/.test(value))
117
+ return true;
118
+ // A three-character label mixing a digit with a capital ("7-M.gi"). Requiring both spares
119
+ // "Bit.ly" and "Goo.gl".
120
+ if (registrable.length <= 3 && /\d/.test(registrable) && /[A-Z]/.test(registrable))
121
+ return true;
122
+ return false;
123
+ }
78
124
  export function isNoise(value, type, options) {
79
125
  if (type === "ipv4") {
80
126
  // Skip private IP filtering if option is set
@@ -92,6 +138,9 @@ export function isNoise(value, type, options) {
92
138
  return false;
93
139
  }
94
140
  if (type === "domain") {
141
+ // Shape checks run on the ORIGINAL casing, before any lowercasing below.
142
+ if (isImplausibleDomainShape(value))
143
+ return true;
95
144
  const lower = value.toLowerCase();
96
145
  // Reject domains shorter than 4 chars (e.g., "j.Ph", "32.be")
97
146
  if (lower.length < 4)
@@ -1 +1 @@
1
- {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/ioc/noise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/ioc/noise.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE1G,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,eAAe;IACf,cAAc;IACd,wBAAwB;IACxB,mBAAmB;IACnB,YAAY;IACZ,YAAY;IACZ,gBAAgB;IAChB,qBAAqB;IACrB,aAAa;IACb,QAAQ;CACT,CAAC,CAAC;AAEH,iDAAiD;AACjD,MAAM,yBAAyB,GAAG;IAChC,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU;IAC5D,KAAK,EAAE,WAAW,EAAE,cAAc;CACnC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,QAAQ,EAAE,oBAAoB,EAAE,WAAW;CAC5C,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,eAAe;IACf,kCAAkC;IAClC,gBAAgB;IAChB,0CAA0C;IAC1C,kBAAkB;IAClB,kEAAkE;IAClE,YAAY;IACZ,kCAAkC;IAClC,0CAA0C;IAC1C,kEAAkE;CACnE,CAAC,CAAC;AAEH,oDAAoD;AACpD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,kCAAkC;IAClC,qCAAqC;IACrC,qCAAqC;IACrC,mCAAmC;IACnC,kCAAkC;IAClC,mCAAmC;CACpC,CAAC,CAAC;AAEH,6EAA6E;AAC7E,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,QAAQ,EAAE,SAAS,EAAE,SAAS;CAC/B,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,sBAAsB,EAAE,cAAc,EAAE,eAAe;IACvD,cAAc,EAAE,eAAe,EAAE,cAAc;IAC/C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU;IACpD,eAAe,EAAE,YAAY,EAAE,oBAAoB;CACpD,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,iBAAiB,GAAG,gLAAgL,CAAC;AAE3M;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,EAAU;IACvC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,wBAAwB,CAAC,KAAa;IAC7C,0FAA0F;IAC1F,qFAAqF;IACrF,8FAA8F;IAC9F,+FAA+F;IAC/F,4CAA4C;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAE9B,yFAAyF;IACzF,yFAAyF;IACzF,sFAAsF;IACtF,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1D,0FAA0F;IAC1F,4EAA4E;IAC5E,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAE1C,+FAA+F;IAC/F,gGAAgG;IAChG,yFAAyF;IACzF,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,0FAA0F;IAC1F,yBAAyB;IACzB,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhG,OAAO,KAAK,CAAC;AACf,CAAC;AAQD,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,IAAY,EAAE,OAA4B;IAC/E,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,6CAA6C;QAC7C,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACrG,8EAA8E;QAC9E,IAAI,qBAAqB,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,2FAA2F;QAC3F,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,yEAAyE;QACzE,IAAI,wBAAwB,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,8DAA8D;QAC9D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,qDAAqD;QACrD,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1F,6BAA6B;QAC7B,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,iDAAiD;QACjD,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,qEAAqE;QACrE,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,kFAAkF;QAClF,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrD,4EAA4E;QAC5E,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC/C,gGAAgG;QAChG,2DAA2D;QAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,gDAAgD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACvG,OAAO,0BAA0B,CAAC,IAAI,CACpC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CAC7D,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACvD,mBAAmB;YACnB,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAC9B,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,0BAA0B,CAAC,IAAI,CACpC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CACnE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChF,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,gDAAgD;QAChD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,iCAAiC;QACjC,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,6EAA6E;QAC7E,4DAA4D;QAC5D,uCAAuC;QACvC,IAAI,mCAAmC,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClE,IAAI,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7D,yEAAyE;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACrC,iCAAiC;QACjC,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iEAAiE;IACjE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACvD,IAAI,WAAW,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC/C,WAAW,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CACnD,EAAE,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Filters out lines that contain tool/rule metadata (author, reference, namespace, etc.)
3
- * to prevent false IOC extraction from capa/YARA rule metadata.
2
+ * Builds the copy of a tool's output that is scanned for IOCs, with the tool's own provenance
3
+ * removed. Only the scan copy is affected — the tool output returned to the caller is untouched.
4
4
  *
5
- * This uses a structural approach (detecting metadata line format) rather than
6
- * domain-specific lists, so it scales without maintenance and works for any tool.
5
+ * Why this exists: capa reports what a detection rule is, who wrote it, which samples it was
6
+ * tested against, and which features it looked for and did NOT find. None of that is evidence
7
+ * about the sample in front of the analyst, and all of it is shaped like an indicator.
7
8
  */
8
9
  /**
9
10
  * Filter out lines that appear to be metadata context (author, reference, etc.)
@@ -13,4 +14,15 @@
13
14
  * @returns Text with metadata lines removed
14
15
  */
15
16
  export declare function filterMetadataLines(text: string): string;
17
+ /**
18
+ * Sanitize one tool's output for IOC scanning.
19
+ *
20
+ * Called per tool and BEFORE any size truncation, because capa's JSON is a single document:
21
+ * truncating it first would leave invalid JSON that cannot be parsed or pruned, and the
22
+ * provenance would flow straight through.
23
+ *
24
+ * @param toolName - Registry name of the tool that produced the output (e.g. "capa", "capa-vv")
25
+ * @param text - The tool's raw output
26
+ */
27
+ export declare function sanitizeToolOutputForIOCScan(toolName: string, text: string): string;
16
28
  //# sourceMappingURL=metadata-filter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-filter.d.ts","sourceRoot":"","sources":["../../src/utils/metadata-filter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuBH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD"}
1
+ {"version":3,"file":"metadata-filter.d.ts","sourceRoot":"","sources":["../../src/utils/metadata-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0CH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAkHD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnF"}
@@ -1,23 +1,43 @@
1
1
  /**
2
- * Filters out lines that contain tool/rule metadata (author, reference, namespace, etc.)
3
- * to prevent false IOC extraction from capa/YARA rule metadata.
2
+ * Builds the copy of a tool's output that is scanned for IOCs, with the tool's own provenance
3
+ * removed. Only the scan copy is affected — the tool output returned to the caller is untouched.
4
4
  *
5
- * This uses a structural approach (detecting metadata line format) rather than
6
- * domain-specific lists, so it scales without maintenance and works for any tool.
5
+ * Why this exists: capa reports what a detection rule is, who wrote it, which samples it was
6
+ * tested against, and which features it looked for and did NOT find. None of that is evidence
7
+ * about the sample in front of the analyst, and all of it is shaped like an indicator.
7
8
  */
8
9
  /**
9
- * Metadata field names that commonly appear in tool output (capa, YARA, etc.)
10
+ * Metadata field names that commonly appear in tool output (capa, YARA, etc.).
11
+ * Plural forms are listed explicitly because capa uses `authors`, `references`, and `examples`.
10
12
  */
11
- const METADATA_FIELDS = "author|reference|namespace|description|scope|category|severity|version|maintainer|contributor|contact|source|created|modified";
13
+ const METADATA_FIELDS = [
14
+ "authors?",
15
+ "references?",
16
+ "examples?",
17
+ "namespaces?",
18
+ "description",
19
+ "scopes?",
20
+ "category",
21
+ "severity",
22
+ "version",
23
+ "maintainers?",
24
+ "contributors?",
25
+ "contact",
26
+ "credits",
27
+ "license",
28
+ "copyright",
29
+ "source",
30
+ "created",
31
+ "modified",
32
+ ].join("|");
12
33
  /**
13
- * Patterns that identify metadata context lines (author, reference, etc.)
14
- * These are typically found in capa results, YARA rule output, and similar tools.
34
+ * Metadata line patterns for text output. Matched against the trimmed line.
15
35
  */
16
36
  const METADATA_CONTEXT_PATTERNS = [
17
37
  // Standard metadata fields with colon or equals separator (text format)
18
- // e.g., "author: someone@example.com" or "reference = https://..."
19
- new RegExp(`^(${METADATA_FIELDS})\\s*[:=]\\s+`, "i"),
20
- // JSON-format metadata (capa uses -j for JSON output)
38
+ // e.g., "author: someone@example.com" or "reference=https://..."
39
+ new RegExp(`^(${METADATA_FIELDS})\\s*[:=]\\s*\\S`, "i"),
40
+ // JSON-format metadata on its own line (pretty-printed JSON)
21
41
  // e.g., '"author": "someone@example.com"' or '"reference": "https://..."'
22
42
  new RegExp(`^\\s*"(${METADATA_FIELDS})"\\s*:\\s*`, "i"),
23
43
  // Comment-prefixed metadata (various languages)
@@ -37,4 +57,177 @@ export function filterMetadataLines(text) {
37
57
  .filter((line) => !METADATA_CONTEXT_PATTERNS.some((p) => p.test(line.trim())))
38
58
  .join("\n");
39
59
  }
60
+ // ---------------------------------------------------------------------------
61
+ // capa
62
+ // ---------------------------------------------------------------------------
63
+ /** Node budget for the capa walk, so a crafted document cannot make it run unbounded. */
64
+ const CAPA_MAX_NODES = 500_000;
65
+ /**
66
+ * Feature fields written by the rule author rather than read out of the sample. Everything else
67
+ * on a capa feature node is sample content and is kept.
68
+ *
69
+ * - `description` annotates the rule;
70
+ * - `match` names another rule, with that rule's content hash appended;
71
+ * - `regex` is the pattern the rule searched for, not the text that matched — an alternation
72
+ * like `good\.com|bad\.com` would otherwise contribute both sides as indicators. The text
73
+ * that actually matched is in `captures`, which is collected separately;
74
+ * - `bytes` is the rule's literal byte pattern, and is hash-shaped.
75
+ *
76
+ * Stated as an exclusion rather than an allow-list on purpose. capa's feature vocabulary is long
77
+ * and grows — `import`, `export`, `class`, `namespace`, and `function name` all carry sample
78
+ * content and appear only for particular formats (`import` shows up on .NET binaries, for
79
+ * instance) — so an allow-list silently drops indicators for any type nobody thought to list,
80
+ * while this set is small, verified against real output, and stable.
81
+ */
82
+ const CAPA_RULE_AUTHORED_FEATURE_KEYS = new Set([
83
+ "type", "description", "match", "regex", "bytes",
84
+ ]);
85
+ /**
86
+ * Reduce a capa result to the feature values that actually matched in this sample.
87
+ *
88
+ * Four things are deliberately left behind, each of which reached the IOC list before:
89
+ *
90
+ * - the run metadata and every rule's `meta` and `source` — rule authors, the reference samples
91
+ * the rule was tested against (`examples`), citations (`references`), and the rule's own YAML;
92
+ * - the rule names, which are the rule's identity rather than the sample's content;
93
+ * - the rule-authored feature fields listed above;
94
+ * - every node whose `success` is false. capa emits its whole feature tree, including the
95
+ * alternatives it looked for and did NOT find, so an unmatched `string` feature names
96
+ * something absent from the sample. Reporting one as an indicator inverts its meaning: it is
97
+ * how "supportxmr.com" and "dwarfpool.com" came to be listed for a sample containing neither.
98
+ *
99
+ * Traversal continues THROUGH an unsuccessful node into its children, because capa serializes
100
+ * every child regardless of the parent's result: a failed `and` can hold a feature that did match
101
+ * and is genuinely present. Only a node's own `success` suppresses its own evidence.
102
+ *
103
+ * Walks iteratively with an explicit stack, so deeply nested input cannot overflow the call stack.
104
+ */
105
+ function extractCapaMatchedFeatures(doc) {
106
+ const out = [];
107
+ const stack = [];
108
+ const rules = doc.rules;
109
+ for (const rule of Object.values(rules)) {
110
+ if (typeof rule === "object" && rule !== null) {
111
+ stack.push(rule.matches);
112
+ }
113
+ }
114
+ const emitFeature = (feature) => {
115
+ if (typeof feature !== "object" || feature === null)
116
+ return;
117
+ for (const [key, featureValue] of Object.entries(feature)) {
118
+ if (typeof featureValue === "string" && !CAPA_RULE_AUTHORED_FEATURE_KEYS.has(key)) {
119
+ out.push(featureValue);
120
+ }
121
+ }
122
+ };
123
+ let budget = CAPA_MAX_NODES;
124
+ while (stack.length > 0 && budget-- > 0) {
125
+ const value = stack.pop();
126
+ if (Array.isArray(value)) {
127
+ for (const child of value)
128
+ stack.push(child);
129
+ continue;
130
+ }
131
+ if (typeof value !== "object" || value === null)
132
+ continue;
133
+ const node = value;
134
+ // Wrapper objects without the flag (address records) carry no evidence of their own.
135
+ const success = typeof node.success === "boolean" ? node.success : true;
136
+ if (success) {
137
+ const inner = node.node;
138
+ emitFeature(inner?.feature);
139
+ // A `count(...)` feature hangs off a range statement rather than appearing as a feature
140
+ // node. A successful range with no locations is a successful count of ZERO — an absence —
141
+ // so its child is only sample content when the node actually matched somewhere.
142
+ const statement = inner?.statement;
143
+ if (statement?.type === "range" &&
144
+ Array.isArray(node.locations) &&
145
+ node.locations.length > 0) {
146
+ emitFeature(statement.child);
147
+ }
148
+ // `captures` is keyed by the captured substring, which is the text a regex actually matched.
149
+ if (typeof node.captures === "object" && node.captures !== null) {
150
+ for (const captured of Object.keys(node.captures)) {
151
+ out.push(captured);
152
+ }
153
+ }
154
+ }
155
+ if (Array.isArray(node.children))
156
+ stack.push(node.children);
157
+ }
158
+ return out.join("\n");
159
+ }
160
+ /**
161
+ * Sanitize one tool's output for IOC scanning.
162
+ *
163
+ * Called per tool and BEFORE any size truncation, because capa's JSON is a single document:
164
+ * truncating it first would leave invalid JSON that cannot be parsed or pruned, and the
165
+ * provenance would flow straight through.
166
+ *
167
+ * @param toolName - Registry name of the tool that produced the output (e.g. "capa", "capa-vv")
168
+ * @param text - The tool's raw output
169
+ */
170
+ export function sanitizeToolOutputForIOCScan(toolName, text) {
171
+ if (toolName === "capa" || toolName.startsWith("capa-")) {
172
+ return sanitizeCapaOutput(text);
173
+ }
174
+ return filterMetadataLines(text);
175
+ }
176
+ /**
177
+ * Sanitize capa output, in either of the two shapes capa emits.
178
+ *
179
+ * JSON-looking capa output that cannot be structurally handled yields an EMPTY corpus rather than
180
+ * the raw text. capa's `-j` output is a single line beginning with `{`, so the line-based filter
181
+ * cannot remove anything from it: falling back would hand the whole provenance-laden document to
182
+ * the extractor, which is the original defect. A truncated document has already lost its tail;
183
+ * losing the rest costs the matched features, and keeping it costs a wrong IOC list.
184
+ */
185
+ function sanitizeCapaOutput(text) {
186
+ const trimmed = text.trim();
187
+ if (!trimmed.startsWith("{"))
188
+ return filterCapaTextMetadata(text);
189
+ let parsed;
190
+ try {
191
+ parsed = JSON.parse(trimmed);
192
+ }
193
+ catch {
194
+ return "";
195
+ }
196
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed))
197
+ return "";
198
+ const doc = parsed;
199
+ // A run with no matches has an empty `rules` object, which is still a capa document.
200
+ if (typeof doc.rules !== "object" || doc.rules === null)
201
+ return "";
202
+ return extractCapaMatchedFeatures(doc);
203
+ }
204
+ /**
205
+ * capa's `-vv` renderer writes metadata column-aligned with no separator character
206
+ * ("author 0x534a@mailbox.org") and wraps long values onto continuation lines indented to
207
+ * the value column. Scoped to capa output, because a bare "source 203.0.113.27" in some other
208
+ * tool's output is a row of data, not provenance.
209
+ */
210
+ const CAPA_ALIGNED_METADATA_RE = new RegExp(`^(${METADATA_FIELDS})( {2,})(?=\\S)`, "i");
211
+ function filterCapaTextMetadata(text) {
212
+ const out = [];
213
+ // Column at which the value of the metadata line just dropped began, or -1.
214
+ let continuationColumn = -1;
215
+ for (const line of filterMetadataLines(text).split("\n")) {
216
+ const aligned = CAPA_ALIGNED_METADATA_RE.exec(line);
217
+ if (aligned) {
218
+ continuationColumn = aligned[1].length + aligned[2].length;
219
+ continue;
220
+ }
221
+ if (continuationColumn > 0 && line.trim() !== "") {
222
+ let indent = 0;
223
+ while (indent < line.length && line[indent] === " ")
224
+ indent++;
225
+ if (indent === continuationColumn)
226
+ continue;
227
+ }
228
+ continuationColumn = -1;
229
+ out.push(line);
230
+ }
231
+ return out.join("\n");
232
+ }
40
233
  //# sourceMappingURL=metadata-filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-filter.js","sourceRoot":"","sources":["../../src/utils/metadata-filter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,eAAe,GAAG,+HAA+H,CAAC;AAExJ;;;GAGG;AACH,MAAM,yBAAyB,GAAG;IAChC,wEAAwE;IACxE,mEAAmE;IACnE,IAAI,MAAM,CAAC,KAAK,eAAe,eAAe,EAAE,GAAG,CAAC;IACpD,sDAAsD;IACtD,0EAA0E;IAC1E,IAAI,MAAM,CAAC,UAAU,eAAe,aAAa,EAAE,GAAG,CAAC;IACvD,gDAAgD;IAChD,+CAA+C;IAC/C,IAAI,MAAM,CAAC,wBAAwB,eAAe,WAAW,EAAE,GAAG,CAAC;CACpE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"metadata-filter.js","sourceRoot":"","sources":["../../src/utils/metadata-filter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnux/mcp-server",
3
- "version": "0.1.71",
3
+ "version": "0.1.73",
4
4
  "packageManager": "pnpm@10.33.0",
5
5
  "description": "MCP server for using the REMnux malware analysis toolkit via AI assistants",
6
6
  "type": "module",