@node9/proxy 1.6.0 → 1.7.1
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 +0 -4
- package/dist/cli.js +545 -37
- package/dist/cli.mjs +545 -37
- package/dist/index.js +80 -1
- package/dist/index.mjs +80 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -411,6 +411,84 @@ var SHIELDS = {
|
|
|
411
411
|
],
|
|
412
412
|
dangerousWords: []
|
|
413
413
|
},
|
|
414
|
+
"bash-safe": {
|
|
415
|
+
name: "bash-safe",
|
|
416
|
+
description: "Blocks high-risk bash patterns: pipe-to-shell, rm -rf /, disk overwrites, eval",
|
|
417
|
+
aliases: ["bash", "shell"],
|
|
418
|
+
smartRules: [
|
|
419
|
+
{
|
|
420
|
+
name: "shield:bash-safe:block-pipe-to-shell",
|
|
421
|
+
tool: "bash",
|
|
422
|
+
conditions: [
|
|
423
|
+
{
|
|
424
|
+
field: "command",
|
|
425
|
+
op: "matches",
|
|
426
|
+
value: "(curl|wget)\\s+[^|]*\\|\\s*(bash|sh|zsh|fish|python3?|ruby|perl|node)",
|
|
427
|
+
flags: "i"
|
|
428
|
+
}
|
|
429
|
+
],
|
|
430
|
+
verdict: "block",
|
|
431
|
+
reason: "Pipe-to-shell is a common supply-chain attack vector \u2014 blocked by bash-safe shield"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
name: "shield:bash-safe:block-obfuscated-exec",
|
|
435
|
+
tool: "bash",
|
|
436
|
+
conditions: [
|
|
437
|
+
{
|
|
438
|
+
field: "command",
|
|
439
|
+
op: "matches",
|
|
440
|
+
value: "base64\\s+(-d|--decode).*\\|\\s*(bash|sh|zsh)",
|
|
441
|
+
flags: "i"
|
|
442
|
+
}
|
|
443
|
+
],
|
|
444
|
+
verdict: "block",
|
|
445
|
+
reason: "Obfuscated execution via base64 decode \u2014 blocked by bash-safe shield"
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
name: "shield:bash-safe:block-rm-root",
|
|
449
|
+
tool: "bash",
|
|
450
|
+
conditions: [
|
|
451
|
+
{
|
|
452
|
+
field: "command",
|
|
453
|
+
op: "matches",
|
|
454
|
+
value: "rm\\s+(-[a-zA-Z]*r[a-zA-Z]*f|-[a-zA-Z]*f[a-zA-Z]*r)[a-zA-Z]*\\s+(\\/|~|\\$HOME|\\$\\{HOME\\})\\s*$",
|
|
455
|
+
flags: "i"
|
|
456
|
+
}
|
|
457
|
+
],
|
|
458
|
+
verdict: "block",
|
|
459
|
+
reason: "rm -rf of root or home directory is catastrophic \u2014 blocked by bash-safe shield"
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
name: "shield:bash-safe:block-disk-overwrite",
|
|
463
|
+
tool: "bash",
|
|
464
|
+
conditions: [
|
|
465
|
+
{
|
|
466
|
+
field: "command",
|
|
467
|
+
op: "matches",
|
|
468
|
+
value: "dd\\s+.*of=\\/dev\\/(sd|nvme|hd|vd|xvd)",
|
|
469
|
+
flags: "i"
|
|
470
|
+
}
|
|
471
|
+
],
|
|
472
|
+
verdict: "block",
|
|
473
|
+
reason: "Writing directly to a block device is irreversible \u2014 blocked by bash-safe shield"
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
name: "shield:bash-safe:review-eval",
|
|
477
|
+
tool: "bash",
|
|
478
|
+
conditions: [
|
|
479
|
+
{
|
|
480
|
+
field: "command",
|
|
481
|
+
op: "matches",
|
|
482
|
+
value: '\\beval\\s+[\\$`("]',
|
|
483
|
+
flags: "i"
|
|
484
|
+
}
|
|
485
|
+
],
|
|
486
|
+
verdict: "review",
|
|
487
|
+
reason: "eval of dynamic content requires human approval (bash-safe shield)"
|
|
488
|
+
}
|
|
489
|
+
],
|
|
490
|
+
dangerousWords: []
|
|
491
|
+
},
|
|
414
492
|
filesystem: {
|
|
415
493
|
name: "filesystem",
|
|
416
494
|
description: "Protects the local filesystem from dangerous AI operations",
|
|
@@ -517,7 +595,7 @@ var DANGEROUS_WORDS = [
|
|
|
517
595
|
var DEFAULT_CONFIG = {
|
|
518
596
|
version: "1.0",
|
|
519
597
|
settings: {
|
|
520
|
-
mode: "
|
|
598
|
+
mode: "standard",
|
|
521
599
|
autoStartDaemon: true,
|
|
522
600
|
enableUndo: true,
|
|
523
601
|
// 🔥 ALWAYS TRUE BY DEFAULT for the safety net
|
|
@@ -2721,6 +2799,7 @@ async function authorizeHeadless(toolName, args, meta, options) {
|
|
|
2721
2799
|
await notifyActivity({
|
|
2722
2800
|
id: actId,
|
|
2723
2801
|
tool: toolName,
|
|
2802
|
+
args,
|
|
2724
2803
|
ts: actTs,
|
|
2725
2804
|
status: result.approved ? "allow" : result.blockedByLabel?.includes("DLP") ? "dlp" : result.blockedByLabel?.includes("Taint") ? "taint" : "block",
|
|
2726
2805
|
label: result.blockedByLabel,
|
package/dist/index.mjs
CHANGED
|
@@ -381,6 +381,84 @@ var SHIELDS = {
|
|
|
381
381
|
],
|
|
382
382
|
dangerousWords: []
|
|
383
383
|
},
|
|
384
|
+
"bash-safe": {
|
|
385
|
+
name: "bash-safe",
|
|
386
|
+
description: "Blocks high-risk bash patterns: pipe-to-shell, rm -rf /, disk overwrites, eval",
|
|
387
|
+
aliases: ["bash", "shell"],
|
|
388
|
+
smartRules: [
|
|
389
|
+
{
|
|
390
|
+
name: "shield:bash-safe:block-pipe-to-shell",
|
|
391
|
+
tool: "bash",
|
|
392
|
+
conditions: [
|
|
393
|
+
{
|
|
394
|
+
field: "command",
|
|
395
|
+
op: "matches",
|
|
396
|
+
value: "(curl|wget)\\s+[^|]*\\|\\s*(bash|sh|zsh|fish|python3?|ruby|perl|node)",
|
|
397
|
+
flags: "i"
|
|
398
|
+
}
|
|
399
|
+
],
|
|
400
|
+
verdict: "block",
|
|
401
|
+
reason: "Pipe-to-shell is a common supply-chain attack vector \u2014 blocked by bash-safe shield"
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
name: "shield:bash-safe:block-obfuscated-exec",
|
|
405
|
+
tool: "bash",
|
|
406
|
+
conditions: [
|
|
407
|
+
{
|
|
408
|
+
field: "command",
|
|
409
|
+
op: "matches",
|
|
410
|
+
value: "base64\\s+(-d|--decode).*\\|\\s*(bash|sh|zsh)",
|
|
411
|
+
flags: "i"
|
|
412
|
+
}
|
|
413
|
+
],
|
|
414
|
+
verdict: "block",
|
|
415
|
+
reason: "Obfuscated execution via base64 decode \u2014 blocked by bash-safe shield"
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
name: "shield:bash-safe:block-rm-root",
|
|
419
|
+
tool: "bash",
|
|
420
|
+
conditions: [
|
|
421
|
+
{
|
|
422
|
+
field: "command",
|
|
423
|
+
op: "matches",
|
|
424
|
+
value: "rm\\s+(-[a-zA-Z]*r[a-zA-Z]*f|-[a-zA-Z]*f[a-zA-Z]*r)[a-zA-Z]*\\s+(\\/|~|\\$HOME|\\$\\{HOME\\})\\s*$",
|
|
425
|
+
flags: "i"
|
|
426
|
+
}
|
|
427
|
+
],
|
|
428
|
+
verdict: "block",
|
|
429
|
+
reason: "rm -rf of root or home directory is catastrophic \u2014 blocked by bash-safe shield"
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
name: "shield:bash-safe:block-disk-overwrite",
|
|
433
|
+
tool: "bash",
|
|
434
|
+
conditions: [
|
|
435
|
+
{
|
|
436
|
+
field: "command",
|
|
437
|
+
op: "matches",
|
|
438
|
+
value: "dd\\s+.*of=\\/dev\\/(sd|nvme|hd|vd|xvd)",
|
|
439
|
+
flags: "i"
|
|
440
|
+
}
|
|
441
|
+
],
|
|
442
|
+
verdict: "block",
|
|
443
|
+
reason: "Writing directly to a block device is irreversible \u2014 blocked by bash-safe shield"
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
name: "shield:bash-safe:review-eval",
|
|
447
|
+
tool: "bash",
|
|
448
|
+
conditions: [
|
|
449
|
+
{
|
|
450
|
+
field: "command",
|
|
451
|
+
op: "matches",
|
|
452
|
+
value: '\\beval\\s+[\\$`("]',
|
|
453
|
+
flags: "i"
|
|
454
|
+
}
|
|
455
|
+
],
|
|
456
|
+
verdict: "review",
|
|
457
|
+
reason: "eval of dynamic content requires human approval (bash-safe shield)"
|
|
458
|
+
}
|
|
459
|
+
],
|
|
460
|
+
dangerousWords: []
|
|
461
|
+
},
|
|
384
462
|
filesystem: {
|
|
385
463
|
name: "filesystem",
|
|
386
464
|
description: "Protects the local filesystem from dangerous AI operations",
|
|
@@ -487,7 +565,7 @@ var DANGEROUS_WORDS = [
|
|
|
487
565
|
var DEFAULT_CONFIG = {
|
|
488
566
|
version: "1.0",
|
|
489
567
|
settings: {
|
|
490
|
-
mode: "
|
|
568
|
+
mode: "standard",
|
|
491
569
|
autoStartDaemon: true,
|
|
492
570
|
enableUndo: true,
|
|
493
571
|
// 🔥 ALWAYS TRUE BY DEFAULT for the safety net
|
|
@@ -2691,6 +2769,7 @@ async function authorizeHeadless(toolName, args, meta, options) {
|
|
|
2691
2769
|
await notifyActivity({
|
|
2692
2770
|
id: actId,
|
|
2693
2771
|
tool: toolName,
|
|
2772
|
+
args,
|
|
2694
2773
|
ts: actTs,
|
|
2695
2774
|
status: result.approved ? "allow" : result.blockedByLabel?.includes("DLP") ? "dlp" : result.blockedByLabel?.includes("Taint") ? "taint" : "block",
|
|
2696
2775
|
label: result.blockedByLabel,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node9/proxy",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.1",
|
|
4
4
|
"description": "The Sudo Command for AI Agents. Execution Security for Claude Code & MCP.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -75,6 +75,7 @@
|
|
|
75
75
|
"picomatch": "^4.0.3",
|
|
76
76
|
"safe-regex2": "^5.1.0",
|
|
77
77
|
"sh-syntax": "^0.5.8",
|
|
78
|
+
"smol-toml": "^1.6.1",
|
|
78
79
|
"zod": "^3.25.76"
|
|
79
80
|
},
|
|
80
81
|
"devDependencies": {
|