@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/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: "audit",
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: "audit",
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.6.0",
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": {