chainwall 2.2.5 → 2.2.7
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/dist/auditor/cli-detector.d.ts +1 -1
- package/dist/auditor/cli-detector.d.ts.map +1 -1
- package/dist/auditor/cli-detector.js +5 -9
- package/dist/auditor/cli-detector.js.map +1 -1
- package/dist/auditor/mcp-detector.d.ts.map +1 -1
- package/dist/auditor/mcp-detector.js +10 -3
- package/dist/auditor/mcp-detector.js.map +1 -1
- package/dist/auditor/miner-detector.d.ts +10 -0
- package/dist/auditor/miner-detector.d.ts.map +1 -1
- package/dist/auditor/miner-detector.js +152 -41
- package/dist/auditor/miner-detector.js.map +1 -1
- package/dist/auditor/remediation.d.ts +6 -2
- package/dist/auditor/remediation.d.ts.map +1 -1
- package/dist/auditor/remediation.js +182 -45
- package/dist/auditor/remediation.js.map +1 -1
- package/dist/auditor/tool-detector.d.ts.map +1 -1
- package/dist/auditor/tool-detector.js +3 -2
- package/dist/auditor/tool-detector.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +12 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/monitor.js +5 -5
- package/dist/commands/monitor.js.map +1 -1
- package/dist/mcp-server/tools/capture-baseline.js +5 -5
- package/dist/mcp-server/tools/capture-baseline.js.map +1 -1
- package/dist/mcp-server/tools/monitor-snapshot.js +5 -5
- package/dist/mcp-server/tools/monitor-snapshot.js.map +1 -1
- package/dist/mcp-server/tools/scan-file.js +2 -2
- package/dist/mcp-server/tools/scan-file.js.map +1 -1
- package/dist/monitor/browser-scanner.d.ts.map +1 -1
- package/dist/monitor/browser-scanner.js +24 -0
- package/dist/monitor/browser-scanner.js.map +1 -1
- package/dist/monitor/clipboard-scanner.d.ts +1 -1
- package/dist/monitor/clipboard-scanner.d.ts.map +1 -1
- package/dist/monitor/clipboard-scanner.js +18 -4
- package/dist/monitor/clipboard-scanner.js.map +1 -1
- package/dist/monitor/exec-async.d.ts +6 -0
- package/dist/monitor/exec-async.d.ts.map +1 -0
- package/dist/monitor/exec-async.js +13 -0
- package/dist/monitor/exec-async.js.map +1 -0
- package/dist/monitor/known-good.d.ts +1 -1
- package/dist/monitor/known-good.d.ts.map +1 -1
- package/dist/monitor/known-good.js +7 -7
- package/dist/monitor/known-good.js.map +1 -1
- package/dist/monitor/network-scanner.d.ts +4 -2
- package/dist/monitor/network-scanner.d.ts.map +1 -1
- package/dist/monitor/network-scanner.js +32 -9
- package/dist/monitor/network-scanner.js.map +1 -1
- package/dist/monitor/persistence-scanner.d.ts +1 -1
- package/dist/monitor/persistence-scanner.d.ts.map +1 -1
- package/dist/monitor/persistence-scanner.js +78 -20
- package/dist/monitor/persistence-scanner.js.map +1 -1
- package/dist/monitor/process-scanner.d.ts +2 -2
- package/dist/monitor/process-scanner.d.ts.map +1 -1
- package/dist/monitor/process-scanner.js +22 -12
- package/dist/monitor/process-scanner.js.map +1 -1
- package/dist/reporter/sarif-report.d.ts.map +1 -1
- package/dist/reporter/sarif-report.js +2 -1
- package/dist/reporter/sarif-report.js.map +1 -1
- package/dist/scanner/permission-checker.d.ts.map +1 -1
- package/dist/scanner/permission-checker.js +2 -1
- package/dist/scanner/permission-checker.js.map +1 -1
- package/dist/scanner/skill-scanner.js +1 -1
- package/dist/scanner/skill-scanner.js.map +1 -1
- package/dist/scanner/system-targets.d.ts.map +1 -1
- package/dist/scanner/system-targets.js +10 -1
- package/dist/scanner/system-targets.js.map +1 -1
- package/dist/tui/components/Footer.js +2 -2
- package/dist/tui/components/Footer.js.map +1 -1
- package/dist/tui/hooks/useAudit.d.ts.map +1 -1
- package/dist/tui/hooks/useAudit.js +2 -1
- package/dist/tui/hooks/useAudit.js.map +1 -1
- package/dist/tui/hooks/useMonitor.d.ts.map +1 -1
- package/dist/tui/hooks/useMonitor.js +5 -6
- package/dist/tui/hooks/useMonitor.js.map +1 -1
- package/dist/tui/hooks/useScan.d.ts.map +1 -1
- package/dist/tui/hooks/useScan.js +7 -5
- package/dist/tui/hooks/useScan.js.map +1 -1
- package/dist/tui/screens/AuditPanel.d.ts.map +1 -1
- package/dist/tui/screens/AuditPanel.js +12 -5
- package/dist/tui/screens/AuditPanel.js.map +1 -1
- package/dist/tui/screens/MonitorPanel.d.ts.map +1 -1
- package/dist/tui/screens/MonitorPanel.js +16 -3
- package/dist/tui/screens/MonitorPanel.js.map +1 -1
- package/dist/tui/screens/ScanPanel.d.ts.map +1 -1
- package/dist/tui/screens/ScanPanel.js +4 -3
- package/dist/tui/screens/ScanPanel.js.map +1 -1
- package/dist/tui/screens/ScanResultsPanel.d.ts.map +1 -1
- package/dist/tui/screens/ScanResultsPanel.js +42 -5
- package/dist/tui/screens/ScanResultsPanel.js.map +1 -1
- package/dist/tui/screens/SettingsPanel.d.ts.map +1 -1
- package/dist/tui/screens/SettingsPanel.js +6 -0
- package/dist/tui/screens/SettingsPanel.js.map +1 -1
- package/dist/tui/utils/open-file.d.ts.map +1 -1
- package/dist/tui/utils/open-file.js +22 -13
- package/dist/tui/utils/open-file.js.map +1 -1
- package/dist/utils/platform.d.ts +16 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +42 -0
- package/dist/utils/platform.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-detector.d.ts","sourceRoot":"","sources":["../../src/auditor/cli-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-detector.d.ts","sourceRoot":"","sources":["../../src/auditor/cli-detector.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,GAAG,YAAY,CAAC;CACtC;AA2CD,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAoB5C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { isWindows, whichCommand } from '../utils/platform.js';
|
|
2
3
|
const KNOWN_AI_CLIS = ['aider', 'codex', 'cursor', 'continue', 'cline', 'claude', 'amazon-q', 'augment', 'bolt'];
|
|
3
4
|
// Normalize npm package names to their CLI/canonical names for dedup
|
|
4
5
|
const NAME_MAP = {
|
|
@@ -7,13 +8,7 @@ const NAME_MAP = {
|
|
|
7
8
|
'@openai/codex': 'codex',
|
|
8
9
|
};
|
|
9
10
|
function tryWhich(name) {
|
|
10
|
-
|
|
11
|
-
const result = execFileSync('which', [name], { timeout: 5000, encoding: 'utf-8' }).trim();
|
|
12
|
-
return result || null;
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
11
|
+
return whichCommand(name);
|
|
17
12
|
}
|
|
18
13
|
const KNOWN_NPM_AI_PACKAGES = [
|
|
19
14
|
'@anthropic-ai/claude-code',
|
|
@@ -26,7 +21,8 @@ const KNOWN_NPM_AI_PACKAGES = [
|
|
|
26
21
|
function tryNpmGlobal() {
|
|
27
22
|
const clis = [];
|
|
28
23
|
try {
|
|
29
|
-
const
|
|
24
|
+
const npmCmd = isWindows() ? 'npm.cmd' : 'npm';
|
|
25
|
+
const raw = execFileSync(npmCmd, ['list', '-g', '--depth=0', '--json'], { timeout: 5000, encoding: 'utf-8' });
|
|
30
26
|
const parsed = JSON.parse(raw);
|
|
31
27
|
if (!parsed.dependencies)
|
|
32
28
|
return clis;
|
|
@@ -46,7 +42,7 @@ export function detectAICLIs() {
|
|
|
46
42
|
for (const name of KNOWN_AI_CLIS) {
|
|
47
43
|
const path = tryWhich(name);
|
|
48
44
|
if (path) {
|
|
49
|
-
clis.push({ name, path, source: '
|
|
45
|
+
clis.push({ name, path, source: 'path-lookup' });
|
|
50
46
|
}
|
|
51
47
|
}
|
|
52
48
|
clis.push(...tryNpmGlobal());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-detector.js","sourceRoot":"","sources":["../../src/auditor/cli-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-detector.js","sourceRoot":"","sources":["../../src/auditor/cli-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQ/D,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAEjH,qEAAqE;AACrE,MAAM,QAAQ,GAA2B;IACvC,YAAY,EAAE,OAAO;IACrB,2BAA2B,EAAE,QAAQ;IACrC,eAAe,EAAE,OAAO;CACzB,CAAC;AAEF,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B,2BAA2B;IAC3B,eAAe;IACf,YAAY;IACZ,OAAO;IACP,SAAS;IACT,MAAM;CACP,CAAC;AAEF,SAAS,YAAY;IACnB,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/C,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9G,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA+C,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAEtC,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACxC,IAAI,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAkB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;IAE7B,uEAAuE;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-detector.d.ts","sourceRoot":"","sources":["../../src/auditor/mcp-detector.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;
|
|
1
|
+
{"version":3,"file":"mcp-detector.d.ts","sourceRoot":"","sources":["../../src/auditor/mcp-detector.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAoFD,wBAAgB,gBAAgB,IAAI,kBAAkB,CAsBrD"}
|
|
@@ -14,11 +14,18 @@ function getMCPConfigPaths() {
|
|
|
14
14
|
if (plat === 'darwin') {
|
|
15
15
|
paths.push(join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'));
|
|
16
16
|
}
|
|
17
|
-
else if (plat === '
|
|
17
|
+
else if (plat === 'win32') {
|
|
18
|
+
const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');
|
|
19
|
+
paths.push(join(appData, 'Claude', 'claude_desktop_config.json'));
|
|
20
|
+
paths.push(join(appData, 'Cursor', 'mcp.json'));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
18
23
|
paths.push(join(home, '.config', 'claude', 'claude_desktop_config.json'));
|
|
19
24
|
}
|
|
20
|
-
// Cursor MCP config
|
|
21
|
-
|
|
25
|
+
// Cursor MCP config (Unix-style fallback; Windows handled above)
|
|
26
|
+
if (plat !== 'win32') {
|
|
27
|
+
paths.push(join(home, '.cursor', 'mcp.json'));
|
|
28
|
+
}
|
|
22
29
|
return paths;
|
|
23
30
|
}
|
|
24
31
|
function extractServers(config, sourceFile, definitions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../src/auditor/mcp-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAoBrD,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9G,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAEnF,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;KACvB,CAAC;IAEF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;IACnG,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"mcp-detector.js","sourceRoot":"","sources":["../../src/auditor/mcp-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,16 @@ export declare function parseProcessList(output: string): ProcessInfo[];
|
|
|
28
28
|
* Shared by miner-detector and monitor/persistence-scanner.
|
|
29
29
|
*/
|
|
30
30
|
export declare function parseCrontabOutput(output: string): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Parse `tasklist /V /FO CSV` output into ProcessInfo[].
|
|
33
|
+
* Windows equivalent of parseProcessList. Note: no PPID/CPU%/MEM% from tasklist.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseTasklistCSV(output: string): ProcessInfo[];
|
|
36
|
+
/**
|
|
37
|
+
* Parse `schtasks /query /FO CSV /V` output into task command lines.
|
|
38
|
+
* Windows equivalent of parseCrontabOutput.
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseSchtasksCSV(output: string): string[];
|
|
31
41
|
/**
|
|
32
42
|
* Detect running cryptocurrency mining processes and suspicious crontab entries.
|
|
33
43
|
* Uses execFileSync (no shell injection risk) for both ps and crontab.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"miner-detector.d.ts","sourceRoot":"","sources":["../../src/auditor/miner-detector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"miner-detector.d.ts","sourceRoot":"","sources":["../../src/auditor/miner-detector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED,eAAO,MAAM,iBAAiB,UAI7B,CAAC;AAEF,eAAO,MAAM,aAAa,QAEzB,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAmC,CAAC;AAClE,eAAO,MAAM,eAAe,QAA+B,CAAC;AAC5D,eAAO,MAAM,YAAY,QAAkD,CAAC;AAE5E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAoC9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CA8B9D;AAqCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAezD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,oBAAoB,CAInD"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { basename } from 'node:path';
|
|
3
|
+
import { isWindows } from '../utils/platform.js';
|
|
2
4
|
export const KNOWN_MINER_NAMES = [
|
|
3
5
|
'xmrig', 'ethminer', 'cgminer', 'bfgminer', 'phoenixminer',
|
|
4
6
|
'cpuminer', 'minerd', 'claymore', 't-rex', 'lolminer',
|
|
@@ -32,7 +34,7 @@ export function parseProcessList(output) {
|
|
|
32
34
|
// lstart occupies fields 5-9 (5 tokens: day-of-week month day time year)
|
|
33
35
|
const startTime = parts.slice(5, 10).join(' ');
|
|
34
36
|
const command = parts.slice(10).join(' ');
|
|
35
|
-
const name = parts[10]
|
|
37
|
+
const name = basename(parts[10]);
|
|
36
38
|
results.push({
|
|
37
39
|
pid: isNaN(pid) ? 0 : pid,
|
|
38
40
|
ppid: isNaN(ppid) ? 0 : ppid,
|
|
@@ -55,6 +57,96 @@ export function parseCrontabOutput(output) {
|
|
|
55
57
|
.map((l) => l.trim())
|
|
56
58
|
.filter((l) => l && !l.startsWith('#'));
|
|
57
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse `tasklist /V /FO CSV` output into ProcessInfo[].
|
|
62
|
+
* Windows equivalent of parseProcessList. Note: no PPID/CPU%/MEM% from tasklist.
|
|
63
|
+
*/
|
|
64
|
+
export function parseTasklistCSV(output) {
|
|
65
|
+
const results = [];
|
|
66
|
+
const lines = output.split('\n');
|
|
67
|
+
for (let i = 1; i < lines.length; i++) {
|
|
68
|
+
const line = lines[i].trim();
|
|
69
|
+
if (!line)
|
|
70
|
+
continue;
|
|
71
|
+
// CSV with quoted fields: "Image Name","PID","Session Name","Session#","Mem Usage","Status","User Name","CPU Time","Window Title"
|
|
72
|
+
const fields = parseCSVLine(line);
|
|
73
|
+
if (fields.length < 2)
|
|
74
|
+
continue;
|
|
75
|
+
const name = fields[0];
|
|
76
|
+
const pid = parseInt(fields[1], 10);
|
|
77
|
+
const user = fields.length > 6 ? fields[6] : '';
|
|
78
|
+
const command = name; // tasklist only gives image name, not full command
|
|
79
|
+
results.push({
|
|
80
|
+
pid: isNaN(pid) ? 0 : pid,
|
|
81
|
+
ppid: 0,
|
|
82
|
+
user,
|
|
83
|
+
cpu: 0,
|
|
84
|
+
mem: 0,
|
|
85
|
+
startTime: '',
|
|
86
|
+
command,
|
|
87
|
+
name: name.replace(/\.exe$/i, ''),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return results;
|
|
91
|
+
}
|
|
92
|
+
/** Parse a single CSV line with quoted fields. */
|
|
93
|
+
function parseCSVLine(line) {
|
|
94
|
+
const fields = [];
|
|
95
|
+
let i = 0;
|
|
96
|
+
while (i < line.length) {
|
|
97
|
+
if (line[i] === '"') {
|
|
98
|
+
i++;
|
|
99
|
+
let field = '';
|
|
100
|
+
while (i < line.length) {
|
|
101
|
+
if (line[i] === '"' && line[i + 1] === '"') {
|
|
102
|
+
field += '"';
|
|
103
|
+
i += 2;
|
|
104
|
+
}
|
|
105
|
+
else if (line[i] === '"') {
|
|
106
|
+
i++;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
field += line[i];
|
|
111
|
+
i++;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
fields.push(field);
|
|
115
|
+
if (line[i] === ',')
|
|
116
|
+
i++;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const next = line.indexOf(',', i);
|
|
120
|
+
if (next === -1) {
|
|
121
|
+
fields.push(line.slice(i));
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
fields.push(line.slice(i, next));
|
|
125
|
+
i = next + 1;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return fields;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Parse `schtasks /query /FO CSV /V` output into task command lines.
|
|
132
|
+
* Windows equivalent of parseCrontabOutput.
|
|
133
|
+
*/
|
|
134
|
+
export function parseSchtasksCSV(output) {
|
|
135
|
+
const commands = [];
|
|
136
|
+
const lines = output.split('\n');
|
|
137
|
+
for (let i = 1; i < lines.length; i++) {
|
|
138
|
+
const line = lines[i].trim();
|
|
139
|
+
if (!line)
|
|
140
|
+
continue;
|
|
141
|
+
const fields = parseCSVLine(line);
|
|
142
|
+
// The "Task To Run" field is typically at index 8
|
|
143
|
+
const taskToRun = fields[8] ?? '';
|
|
144
|
+
if (taskToRun && taskToRun !== 'N/A') {
|
|
145
|
+
commands.push(taskToRun);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return commands;
|
|
149
|
+
}
|
|
58
150
|
/**
|
|
59
151
|
* Detect running cryptocurrency mining processes and suspicious crontab entries.
|
|
60
152
|
* Uses execFileSync (no shell injection risk) for both ps and crontab.
|
|
@@ -67,55 +159,74 @@ export function detectMiners() {
|
|
|
67
159
|
function detectRunningMiners() {
|
|
68
160
|
const miners = [];
|
|
69
161
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
74
|
-
});
|
|
75
|
-
const lines = output.split('\n');
|
|
76
|
-
// Skip header line
|
|
77
|
-
for (let i = 1; i < lines.length; i++) {
|
|
78
|
-
const line = lines[i].trim();
|
|
79
|
-
if (!line)
|
|
80
|
-
continue;
|
|
81
|
-
// Check if the process matches known miner names
|
|
82
|
-
if (!MINER_PATTERN.test(line) && !STRATUM_PATTERN.test(line))
|
|
83
|
-
continue;
|
|
84
|
-
// Parse ps aux output: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
|
|
85
|
-
const parts = line.split(/\s+/);
|
|
86
|
-
if (parts.length < 11)
|
|
87
|
-
continue;
|
|
88
|
-
const pid = parseInt(parts[1], 10);
|
|
89
|
-
const cpuPercent = parseFloat(parts[2]);
|
|
90
|
-
const command = parts.slice(10).join(' ');
|
|
91
|
-
// Extract the process name from the command
|
|
92
|
-
const cmdName = parts[10].split('/').pop() ?? parts[10];
|
|
93
|
-
// Skip our own process
|
|
94
|
-
if (command.includes('chainwall') || command.includes('vitest'))
|
|
95
|
-
continue;
|
|
96
|
-
miners.push({
|
|
97
|
-
pid,
|
|
98
|
-
name: cmdName,
|
|
99
|
-
command: command.length > 120 ? command.slice(0, 120) + '...' : command,
|
|
100
|
-
cpuPercent: isNaN(cpuPercent) ? undefined : cpuPercent,
|
|
162
|
+
if (isWindows()) {
|
|
163
|
+
const output = execFileSync('tasklist', ['/V', '/FO', 'CSV'], {
|
|
164
|
+
timeout: 5000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
101
165
|
});
|
|
166
|
+
const procs = parseTasklistCSV(output);
|
|
167
|
+
for (const proc of procs) {
|
|
168
|
+
if (!MINER_PATTERN.test(proc.command) && !STRATUM_PATTERN.test(proc.name))
|
|
169
|
+
continue;
|
|
170
|
+
if (proc.command.includes('chainwall') || proc.command.includes('vitest'))
|
|
171
|
+
continue;
|
|
172
|
+
miners.push({
|
|
173
|
+
pid: proc.pid,
|
|
174
|
+
name: proc.name,
|
|
175
|
+
command: proc.command.length > 120 ? proc.command.slice(0, 120) + '...' : proc.command,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
const output = execFileSync('ps', ['aux'], {
|
|
181
|
+
timeout: 5000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
182
|
+
});
|
|
183
|
+
const lines = output.split('\n');
|
|
184
|
+
for (let i = 1; i < lines.length; i++) {
|
|
185
|
+
const line = lines[i].trim();
|
|
186
|
+
if (!line)
|
|
187
|
+
continue;
|
|
188
|
+
if (!MINER_PATTERN.test(line) && !STRATUM_PATTERN.test(line))
|
|
189
|
+
continue;
|
|
190
|
+
const parts = line.split(/\s+/);
|
|
191
|
+
if (parts.length < 11)
|
|
192
|
+
continue;
|
|
193
|
+
const pid = parseInt(parts[1], 10);
|
|
194
|
+
const cpuPercent = parseFloat(parts[2]);
|
|
195
|
+
const command = parts.slice(10).join(' ');
|
|
196
|
+
const cmdName = basename(parts[10]);
|
|
197
|
+
if (command.includes('chainwall') || command.includes('vitest'))
|
|
198
|
+
continue;
|
|
199
|
+
miners.push({
|
|
200
|
+
pid,
|
|
201
|
+
name: cmdName,
|
|
202
|
+
command: command.length > 120 ? command.slice(0, 120) + '...' : command,
|
|
203
|
+
cpuPercent: isNaN(cpuPercent) ? undefined : cpuPercent,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
102
206
|
}
|
|
103
207
|
}
|
|
104
208
|
catch {
|
|
105
|
-
// ps not available or failed — graceful degradation
|
|
209
|
+
// ps/tasklist not available or failed — graceful degradation
|
|
106
210
|
}
|
|
107
211
|
return miners;
|
|
108
212
|
}
|
|
109
213
|
function detectSuspiciousCrontabs() {
|
|
110
214
|
const suspicious = [];
|
|
111
215
|
try {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
216
|
+
let taskLines;
|
|
217
|
+
if (isWindows()) {
|
|
218
|
+
const output = execFileSync('schtasks', ['/query', '/FO', 'CSV', '/V'], {
|
|
219
|
+
timeout: 10000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
220
|
+
});
|
|
221
|
+
taskLines = parseSchtasksCSV(output);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
const output = execFileSync('crontab', ['-l'], {
|
|
225
|
+
timeout: 5000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
226
|
+
});
|
|
227
|
+
taskLines = parseCrontabOutput(output);
|
|
228
|
+
}
|
|
229
|
+
for (const trimmed of taskLines) {
|
|
119
230
|
if (MINER_PATTERN.test(trimmed)) {
|
|
120
231
|
suspicious.push({
|
|
121
232
|
line: trimmed.length > 120 ? trimmed.slice(0, 120) + '...' : trimmed,
|
|
@@ -137,7 +248,7 @@ function detectSuspiciousCrontabs() {
|
|
|
137
248
|
}
|
|
138
249
|
}
|
|
139
250
|
catch {
|
|
140
|
-
// crontab
|
|
251
|
+
// crontab/schtasks not available or no entries = clean
|
|
141
252
|
}
|
|
142
253
|
return suspicious;
|
|
143
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"miner-detector.js","sourceRoot":"","sources":["../../src/auditor/miner-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"miner-detector.js","sourceRoot":"","sources":["../../src/auditor/miner-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,8 @@ import type { VSCodeExtension } from './vscode-extension-scanner.js';
|
|
|
3
3
|
import type { EnvExposure } from './env-auditor.js';
|
|
4
4
|
import type { ScanFinding } from '../rules/types.js';
|
|
5
5
|
import type { PoisoningFinding } from './mcp-poison-detector.js';
|
|
6
|
-
import type { RunningMiner } from './miner-detector.js';
|
|
6
|
+
import type { RunningMiner, SuspiciousCrontab } from './miner-detector.js';
|
|
7
|
+
import type { AITool } from './types.js';
|
|
7
8
|
import type { MonitorFinding } from '../monitor/types.js';
|
|
8
9
|
export type RiskLevel = 'safe' | 'caution';
|
|
9
10
|
export interface RemediationAction {
|
|
@@ -25,9 +26,12 @@ export declare function getActionsForMCPServer(server: MCPServer): RemediationAc
|
|
|
25
26
|
export declare function getActionsForVSCodeExtension(ext: VSCodeExtension): RemediationAction[];
|
|
26
27
|
export declare function getActionsForEnvExposure(env: EnvExposure): RemediationAction[];
|
|
27
28
|
export declare function getActionsForPermissionFinding(finding: ScanFinding): RemediationAction[];
|
|
29
|
+
export declare function getActionsForScanFinding(finding: ScanFinding): RemediationAction[];
|
|
30
|
+
export declare function getActionsForDetectedTool(tool: AITool): RemediationAction[];
|
|
28
31
|
export declare function getActionsForExposure(filePath: string): RemediationAction[];
|
|
29
|
-
export declare function getActionsForPoisoningFinding(finding: PoisoningFinding): RemediationAction[];
|
|
32
|
+
export declare function getActionsForPoisoningFinding(finding: PoisoningFinding, mcpServers?: MCPServer[]): RemediationAction[];
|
|
30
33
|
export declare function getActionsForRunningMiner(miner: RunningMiner): RemediationAction[];
|
|
34
|
+
export declare function getActionsForSuspiciousCrontab(crontab: SuspiciousCrontab): RemediationAction[];
|
|
31
35
|
export declare function createLocateAction(finding: MonitorFinding): RemediationAction | null;
|
|
32
36
|
export declare function getActionsForMonitorProcess(finding: MonitorFinding): RemediationAction[];
|
|
33
37
|
export declare function getActionsForMonitorNetwork(finding: MonitorFinding): RemediationAction[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/auditor/remediation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"remediation.d.ts","sourceRoot":"","sources":["../../src/auditor/remediation.ts"],"names":[],"mappings":"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"}
|