@node9/proxy 2.36.0 → 2.37.0
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/cli.js +305 -3
- package/dist/cli.mjs +305 -3
- package/dist/dashboard.mjs +305 -2
- package/dist/index.js +298 -1
- package/dist/index.mjs +298 -1
- package/dist/scan-ink.mjs +303 -1
- package/package.json +1 -1
package/dist/dashboard.mjs
CHANGED
|
@@ -2691,7 +2691,7 @@ function matchCanaryArgs(args, values) {
|
|
|
2691
2691
|
return null;
|
|
2692
2692
|
}
|
|
2693
2693
|
}
|
|
2694
|
-
var aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, BUILTIN_SHIELDS, SSRF_MAX_HOST, METADATA_ADDRESSES, METADATA_HOSTNAMES, v4Octets, CHECK_TEXT, VERDICTS, CHECK_VERDICT_RANK, ALL, BUILTIN_DANGEROUS_WORDS, PRODUCT_CHECKS, SHIELD_RULE_NAME, SHIELD_RULES_FOLDED_INTO_PRODUCT, CHECKS, CHECK_BY_ID, LEGACY_TO_ID, LEGACY_READERS, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, syntax, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, AST_CACHE_MAX, astCache, PARSE_FAIL, MAX_READING_PAYLOADS, defaultExpansionOps, VARIABLE_READERS, FS_READ_TOOLS, GREP_SHAPE, PATTERN_VERBS, PATTERN_VERB_NAMES, GREP_FILE_OPERANDS, READER_VALUE_LETTERS, FILE_OPERAND_FLAGS, SCP_VALUE_FLAGS, CURL_SOURCE_FLAGS, CURL_VALUE_LETTERS, WGET_VALUE_LETTERS, TAR_VALUE_LETTERS, ZIP_VALUE_LETTERS, RSYNC_VALUE_LETTERS, RSYNC_SKIP, CP_VALUE_LETTERS, INSTALL_VALUE_LETTERS, COPY_VERBS, TAR_MODE_WORD, COPY_VERB_HEADS, FS_OP_PRESCREEN_RE, HOME_CACHE_ALLOWLIST, SENSITIVE_PATH_RULES, AST_FS_REGEX_RULES, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, AND_OP, OR_OP, AND_OR_OPS, MAX_CALL_DEPTH, MAX_CALL_WALKS, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, isReaderWord, positionalAfter, NONE, UNKNOWN, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, syntax2, WRITES, READS, DUP_OUT, HERE_STRING, AND, OR, DEFAULT_OPS, SYSTEM_DIRS, UPLOAD_SYSTEM_DIRS, LEGACY_SYSTEM_PATH_RE, BIP39_ENGLISH, indices, IBAN_LENGTH, IBAN_BBAN_SHAPE, B58, B58_INDEX, XPRV_VERSIONS, B62, CRC32_TABLE, GITHUB_TOKEN_RE, B64URL, B64URL_INDEX, CASK_TWO_ZERO_SUFFIX, CASK_FOUR_ZERO_SUFFIX, CF_ODD, CF_EVEN, ASSIGNMENT_CONTEXT_RE, DLP_STOPWORDS, REFERENCE_VALUE_RE, IDENTIFIER_VALUE_RE, PATH_VALUE_RE, DOTTED_REFERENCE_RE, CONCATENATION_RE, EMAIL_VALUE_RE, FIXTURE_NAME_RE, DERIVATIVE_NAME_RE, QUERY_CREDENTIAL_VALUE_RE, OTP_SECRET_RE, OTP_DOC_SECRETS, ASSIGNED_SECRET_VALUE_RE, ASSIGNED_SECRET_NAME_RE, NAME_KEYWORD_RE, ARN_CONTEXT_RE, CIPHER_KEY_NAME_RE, CIPHER_NAME_PARTS, CIPHER_KEY_VALUE_RE, LARAVEL_KEY_VALUE_RE, SQL_PASSWORD_VALUE_RE, GRAFANA_KEY_VALUE_RE, BASIC_VALUE_RE, BASIC_PAIR_RE, OTP_CAPTURE_RE, DB_URL_PASSWORD_RE, DLP_PATTERNS, DLP_PATTERNS_GLOBAL, SENSITIVE_PATH_PATTERNS, SENSITIVE_PATH_REGEXES, MAX_DEPTH2, MAX_STRING_BYTES, MAX_JSON_PARSE_BYTES, syntax3, EDITOR_HEADS, MANAGER_HEADS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, SOURCE_COMMANDS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, MASKED_KINDS, ENTRY_RE, syntax4, PUBLISH, OWN_HEADS, TERMINAL_ESCAPE_RE, CANARY_MIN_LENGTH, MAX_TEXT, MAX_DEPTH4, MAX_JSON_PARSE, URL_DEPTH, B64_DEPTH, MIN_SEGMENT, SEPARATORS, stripSeparators, looksText, CANARY_DECODERS, VIEWS, LONG_OUTPUT_THRESHOLD_BYTES;
|
|
2694
|
+
var aws_default, bash_safe_default, docker_default, filesystem_default, finance_default, github_default, identity_default, k8s_default, mongodb_default, postgres_default, project_jail_default, publishing_default, redis_default, BUILTIN_SHIELDS, ACTION_SHIELD_NAMES, SSRF_MAX_HOST, METADATA_ADDRESSES, METADATA_HOSTNAMES, v4Octets, CHECK_TEXT, VERDICTS, CHECK_VERDICT_RANK, ALL, BUILTIN_DANGEROUS_WORDS, PRODUCT_CHECKS, SHIELD_RULE_NAME, SHIELD_RULES_FOLDED_INTO_PRODUCT, CHECKS, CHECK_BY_ID, LEGACY_TO_ID, LEGACY_READERS, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, syntax, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, AST_CACHE_MAX, astCache, PARSE_FAIL, MAX_READING_PAYLOADS, defaultExpansionOps, VARIABLE_READERS, FS_READ_TOOLS, GREP_SHAPE, PATTERN_VERBS, PATTERN_VERB_NAMES, GREP_FILE_OPERANDS, READER_VALUE_LETTERS, FILE_OPERAND_FLAGS, SCP_VALUE_FLAGS, CURL_SOURCE_FLAGS, CURL_VALUE_LETTERS, WGET_VALUE_LETTERS, TAR_VALUE_LETTERS, ZIP_VALUE_LETTERS, RSYNC_VALUE_LETTERS, RSYNC_SKIP, CP_VALUE_LETTERS, INSTALL_VALUE_LETTERS, COPY_VERBS, TAR_MODE_WORD, COPY_VERB_HEADS, FS_OP_PRESCREEN_RE, HOME_CACHE_ALLOWLIST, SENSITIVE_PATH_RULES, AST_FS_REGEX_RULES, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, AND_OP, OR_OP, AND_OR_OPS, MAX_CALL_DEPTH, MAX_CALL_WALKS, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, isReaderWord, positionalAfter, NONE, UNKNOWN, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, syntax2, WRITES, READS, DUP_OUT, HERE_STRING, AND, OR, DEFAULT_OPS, SYSTEM_DIRS, UPLOAD_SYSTEM_DIRS, LEGACY_SYSTEM_PATH_RE, BIP39_ENGLISH, indices, IBAN_LENGTH, IBAN_BBAN_SHAPE, B58, B58_INDEX, XPRV_VERSIONS, B62, CRC32_TABLE, GITHUB_TOKEN_RE, B64URL, B64URL_INDEX, CASK_TWO_ZERO_SUFFIX, CASK_FOUR_ZERO_SUFFIX, CF_ODD, CF_EVEN, ASSIGNMENT_CONTEXT_RE, DLP_STOPWORDS, REFERENCE_VALUE_RE, IDENTIFIER_VALUE_RE, PATH_VALUE_RE, DOTTED_REFERENCE_RE, CONCATENATION_RE, EMAIL_VALUE_RE, FIXTURE_NAME_RE, DERIVATIVE_NAME_RE, QUERY_CREDENTIAL_VALUE_RE, OTP_SECRET_RE, OTP_DOC_SECRETS, ASSIGNED_SECRET_VALUE_RE, ASSIGNED_SECRET_NAME_RE, NAME_KEYWORD_RE, ARN_CONTEXT_RE, CIPHER_KEY_NAME_RE, CIPHER_NAME_PARTS, CIPHER_KEY_VALUE_RE, LARAVEL_KEY_VALUE_RE, SQL_PASSWORD_VALUE_RE, GRAFANA_KEY_VALUE_RE, BASIC_VALUE_RE, BASIC_PAIR_RE, OTP_CAPTURE_RE, DB_URL_PASSWORD_RE, DLP_PATTERNS, DLP_PATTERNS_GLOBAL, SENSITIVE_PATH_PATTERNS, SENSITIVE_PATH_REGEXES, MAX_DEPTH2, MAX_STRING_BYTES, MAX_JSON_PARSE_BYTES, syntax3, EDITOR_HEADS, MANAGER_HEADS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, SOURCE_COMMANDS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, MASKED_KINDS, ENTRY_RE, syntax4, PUBLISH, OWN_HEADS, TERMINAL_ESCAPE_RE, CANARY_MIN_LENGTH, MAX_TEXT, MAX_DEPTH4, MAX_JSON_PARSE, URL_DEPTH, B64_DEPTH, MIN_SEGMENT, SEPARATORS, stripSeparators, looksText, CANARY_DECODERS, VIEWS, LONG_OUTPUT_THRESHOLD_BYTES;
|
|
2695
2695
|
var init_dist = __esm({
|
|
2696
2696
|
"packages/policy-engine/dist/index.mjs"() {
|
|
2697
2697
|
"use strict";
|
|
@@ -2996,6 +2996,77 @@ var init_dist = __esm({
|
|
|
2996
2996
|
],
|
|
2997
2997
|
dangerousWords: ["wipefs"]
|
|
2998
2998
|
};
|
|
2999
|
+
finance_default = {
|
|
3000
|
+
name: "finance",
|
|
3001
|
+
description: "Asks before money moves through a payment or banking app (refunds, payouts, transfers, charges, invoices), whatever the request said. Reads are never asked about.",
|
|
3002
|
+
aliases: ["payments", "money"],
|
|
3003
|
+
smartRules: [
|
|
3004
|
+
{
|
|
3005
|
+
name: "shield:finance:review-refund",
|
|
3006
|
+
tool: "{,mcp__*__}{create_refund,refund_payment,refund_charge,refund_order,issue_refund}",
|
|
3007
|
+
conditions: [],
|
|
3008
|
+
verdict: "review",
|
|
3009
|
+
reason: "A refund returns money to a customer. node9 asks before money moves, whatever the request said (Finance shield)."
|
|
3010
|
+
},
|
|
3011
|
+
{
|
|
3012
|
+
name: "shield:finance:review-payout",
|
|
3013
|
+
tool: "{,mcp__*__}{create_payout,send_payout,payout,create_payouts_batch}",
|
|
3014
|
+
conditions: [],
|
|
3015
|
+
verdict: "review",
|
|
3016
|
+
reason: "A payout moves the balance to a bank account. node9 asks before money moves (Finance shield)."
|
|
3017
|
+
},
|
|
3018
|
+
{
|
|
3019
|
+
name: "shield:finance:review-transfer",
|
|
3020
|
+
tool: "{,mcp__*__}{transfer_create,transfer_authorization_create,create_transfer,transfer_money,transfer_funds,send_money,wire_transfer,create_wire,schedule_transaction,update_scheduled_transaction,create_transaction}",
|
|
3021
|
+
conditions: [],
|
|
3022
|
+
verdict: "review",
|
|
3023
|
+
reason: "A transfer moves money between accounts. node9 asks before money moves (Finance shield)."
|
|
3024
|
+
},
|
|
3025
|
+
{
|
|
3026
|
+
name: "shield:finance:review-charge",
|
|
3027
|
+
tool: "{,mcp__*__}{create_payment_intent,confirm_payment_intent,capture_payment_intent,create_charge,create_payment,capture_payment,capture_order,create_order,authorize_order,create_checkout_session}",
|
|
3028
|
+
conditions: [],
|
|
3029
|
+
verdict: "review",
|
|
3030
|
+
reason: "This charges a card or captures a payment. node9 asks before money moves (Finance shield)."
|
|
3031
|
+
},
|
|
3032
|
+
{
|
|
3033
|
+
name: "shield:finance:review-payment-link",
|
|
3034
|
+
tool: "{,mcp__*__}{create_payment_link,create_invoice,finalize_invoice,send_invoice,pay_invoice,create_invoice_item}",
|
|
3035
|
+
conditions: [],
|
|
3036
|
+
verdict: "review",
|
|
3037
|
+
reason: "This bills someone or creates a link that charges a card. node9 asks before money moves (Finance shield)."
|
|
3038
|
+
},
|
|
3039
|
+
{
|
|
3040
|
+
name: "shield:finance:review-subscription",
|
|
3041
|
+
tool: "{,mcp__*__}{create_subscription,cancel_subscription,update_subscription,pause_subscription,resume_subscription}",
|
|
3042
|
+
conditions: [],
|
|
3043
|
+
verdict: "review",
|
|
3044
|
+
reason: "A subscription starts or stops recurring charges. node9 asks before money moves (Finance shield)."
|
|
3045
|
+
},
|
|
3046
|
+
{
|
|
3047
|
+
name: "shield:finance:review-dispute",
|
|
3048
|
+
tool: "{,mcp__*__}{update_dispute,accept_dispute,close_dispute}",
|
|
3049
|
+
conditions: [],
|
|
3050
|
+
verdict: "review",
|
|
3051
|
+
reason: "This answers or concedes a chargeback. node9 asks before money moves (Finance shield)."
|
|
3052
|
+
},
|
|
3053
|
+
{
|
|
3054
|
+
name: "shield:finance:review-card",
|
|
3055
|
+
tool: "{,mcp__*__}{issue_card,create_virtual_card,create_issuing_card,update_card_limit}",
|
|
3056
|
+
conditions: [],
|
|
3057
|
+
verdict: "review",
|
|
3058
|
+
reason: "This issues a card or changes its limit. node9 asks before money moves (Finance shield)."
|
|
3059
|
+
},
|
|
3060
|
+
{
|
|
3061
|
+
name: "shield:finance:review-withdraw",
|
|
3062
|
+
tool: "{,mcp__*__}{withdraw,withdraw_funds,create_withdrawal,request_withdrawal}",
|
|
3063
|
+
conditions: [],
|
|
3064
|
+
verdict: "review",
|
|
3065
|
+
reason: "A withdrawal moves money out. node9 asks before money moves (Finance shield)."
|
|
3066
|
+
}
|
|
3067
|
+
],
|
|
3068
|
+
dangerousWords: []
|
|
3069
|
+
};
|
|
2999
3070
|
github_default = {
|
|
3000
3071
|
name: "github",
|
|
3001
3072
|
description: "Protects GitHub repositories from destructive AI operations",
|
|
@@ -3022,6 +3093,56 @@ var init_dist = __esm({
|
|
|
3022
3093
|
],
|
|
3023
3094
|
dangerousWords: []
|
|
3024
3095
|
};
|
|
3096
|
+
identity_default = {
|
|
3097
|
+
name: "identity",
|
|
3098
|
+
description: "Asks before a password, a key, a token, a role or a user changes in an identity or admin app, whatever the request said. Reads are never asked about.",
|
|
3099
|
+
aliases: ["access", "iam"],
|
|
3100
|
+
smartRules: [
|
|
3101
|
+
{
|
|
3102
|
+
name: "shield:identity:review-password",
|
|
3103
|
+
tool: "{,mcp__*__}{change_password,update_password,reset_password,set_password,expire_password,force_password_reset}",
|
|
3104
|
+
conditions: [],
|
|
3105
|
+
verdict: "review",
|
|
3106
|
+
reason: "This changes or resets a password. node9 asks before credentials change, whatever the request said (Identity shield)."
|
|
3107
|
+
},
|
|
3108
|
+
{
|
|
3109
|
+
name: "shield:identity:review-key",
|
|
3110
|
+
tool: "{,mcp__*__}{rotate_key,rotate_api_key,create_api_key,create_token,create_access_token,create_personal_access_token,regenerate_secret,rotate_secret,create_service_account_key,create_credential}",
|
|
3111
|
+
conditions: [],
|
|
3112
|
+
verdict: "review",
|
|
3113
|
+
reason: "This creates or rotates a key, token or secret. node9 asks before credentials change (Identity shield)."
|
|
3114
|
+
},
|
|
3115
|
+
{
|
|
3116
|
+
name: "shield:identity:review-access",
|
|
3117
|
+
tool: "{,mcp__*__}{grant_access,grant_permission,grant_role,revoke_access,revoke_permission,revoke_role,revoke_token,set_permission,set_permissions,set_role,assign_role,update_role,add_permission,remove_permission,attach_policy,detach_policy}",
|
|
3118
|
+
conditions: [],
|
|
3119
|
+
verdict: "review",
|
|
3120
|
+
reason: "This grants or revokes access. node9 asks before access changes (Identity shield)."
|
|
3121
|
+
},
|
|
3122
|
+
{
|
|
3123
|
+
name: "shield:identity:review-membership",
|
|
3124
|
+
tool: "{,mcp__*__}{add_member,remove_member,add_user_to_group,remove_user_from_group,add_collaborator,remove_collaborator,invite_user,invite_member,invite_user_to_slack,invite_users,add_org_member,remove_org_member,add_team_member,remove_team_member}",
|
|
3125
|
+
conditions: [],
|
|
3126
|
+
verdict: "review",
|
|
3127
|
+
reason: "This changes who belongs where. node9 asks before membership changes (Identity shield)."
|
|
3128
|
+
},
|
|
3129
|
+
{
|
|
3130
|
+
name: "shield:identity:review-user",
|
|
3131
|
+
tool: "{,mcp__*__}{create_user,delete_user,deactivate_user,suspend_user,activate_user,unlock_user,make_admin,promote_user,demote_user,update_user_role}",
|
|
3132
|
+
conditions: [],
|
|
3133
|
+
verdict: "review",
|
|
3134
|
+
reason: "This creates, removes or promotes an account. node9 asks before accounts change (Identity shield)."
|
|
3135
|
+
},
|
|
3136
|
+
{
|
|
3137
|
+
name: "shield:identity:review-mfa",
|
|
3138
|
+
tool: "{,mcp__*__}{reset_mfa,reset_factors,disable_mfa,enroll_factor,deactivate_factor}",
|
|
3139
|
+
conditions: [],
|
|
3140
|
+
verdict: "review",
|
|
3141
|
+
reason: "This changes a second factor. node9 asks before credentials change (Identity shield)."
|
|
3142
|
+
}
|
|
3143
|
+
],
|
|
3144
|
+
dangerousWords: []
|
|
3145
|
+
};
|
|
3025
3146
|
k8s_default = {
|
|
3026
3147
|
name: "k8s",
|
|
3027
3148
|
description: "Protects Kubernetes clusters from destructive AI operations",
|
|
@@ -3354,6 +3475,175 @@ var init_dist = __esm({
|
|
|
3354
3475
|
],
|
|
3355
3476
|
dangerousWords: []
|
|
3356
3477
|
};
|
|
3478
|
+
publishing_default = {
|
|
3479
|
+
name: "publishing",
|
|
3480
|
+
description: "Asks before something goes public or ships outside the organisation (a release, a package, a deploy, a post), whatever the request said. The same switch covers the shell commands that publish.",
|
|
3481
|
+
aliases: ["release", "deploy"],
|
|
3482
|
+
smartRules: [
|
|
3483
|
+
{
|
|
3484
|
+
name: "shield:publishing:review-release",
|
|
3485
|
+
tool: "{,mcp__*__}{create_release,publish_release,create_tag_release,update_release,promote_release}",
|
|
3486
|
+
conditions: [],
|
|
3487
|
+
verdict: "review",
|
|
3488
|
+
reason: "A release ships code to everyone who installs it. node9 asks before publishing, whatever the request said (Publishing shield)."
|
|
3489
|
+
},
|
|
3490
|
+
{
|
|
3491
|
+
name: "shield:publishing:review-package",
|
|
3492
|
+
tool: "{,mcp__*__}{publish_package,npm_publish,pypi_upload,publish_version,publish_extension}",
|
|
3493
|
+
conditions: [],
|
|
3494
|
+
verdict: "review",
|
|
3495
|
+
reason: "This publishes a package. node9 asks before publishing (Publishing shield)."
|
|
3496
|
+
},
|
|
3497
|
+
{
|
|
3498
|
+
name: "shield:publishing:review-deploy",
|
|
3499
|
+
tool: "{,mcp__*__}{deploy,create_deployment,deploy_site,promote_deployment,trigger_deploy,deploy_to_production,rollout}",
|
|
3500
|
+
conditions: [],
|
|
3501
|
+
verdict: "review",
|
|
3502
|
+
reason: "This deploys to an environment other people use. node9 asks before publishing (Publishing shield)."
|
|
3503
|
+
},
|
|
3504
|
+
{
|
|
3505
|
+
name: "shield:publishing:review-post",
|
|
3506
|
+
tool: "{,mcp__*__}{post_tweet,create_tweet,post_webpage,publish_post,create_post,publish_page,send_announcement,post_announcement,create_linkedin_post,schedule_post}",
|
|
3507
|
+
conditions: [],
|
|
3508
|
+
verdict: "review",
|
|
3509
|
+
reason: "This posts outside the organisation. node9 asks before publishing (Publishing shield)."
|
|
3510
|
+
},
|
|
3511
|
+
{
|
|
3512
|
+
name: "shield:publishing:review-visibility",
|
|
3513
|
+
tool: "{,mcp__*__}{set_visibility,make_public,set_public,publish_repository,change_visibility,update_visibility}",
|
|
3514
|
+
conditions: [],
|
|
3515
|
+
verdict: "review",
|
|
3516
|
+
reason: "This makes something public. node9 asks before publishing (Publishing shield)."
|
|
3517
|
+
},
|
|
3518
|
+
{
|
|
3519
|
+
name: "shield:publishing:review-npm-publish",
|
|
3520
|
+
tool: "bash",
|
|
3521
|
+
conditions: [
|
|
3522
|
+
{
|
|
3523
|
+
field: "command",
|
|
3524
|
+
op: "matches",
|
|
3525
|
+
value: "(?:^|[^\\w-])(?:npm|pnpm)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
3526
|
+
flags: "i"
|
|
3527
|
+
}
|
|
3528
|
+
],
|
|
3529
|
+
verdict: "review",
|
|
3530
|
+
reason: "npm publish ships the package to everyone who installs it. node9 asks before publishing (Publishing shield)."
|
|
3531
|
+
},
|
|
3532
|
+
{
|
|
3533
|
+
name: "shield:publishing:review-yarn-publish",
|
|
3534
|
+
tool: "bash",
|
|
3535
|
+
conditions: [
|
|
3536
|
+
{
|
|
3537
|
+
field: "command",
|
|
3538
|
+
op: "matches",
|
|
3539
|
+
value: "(?:^|[^\\w-])(?:yarn)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
3540
|
+
flags: "i"
|
|
3541
|
+
}
|
|
3542
|
+
],
|
|
3543
|
+
verdict: "review",
|
|
3544
|
+
reason: "yarn publish ships the package to everyone who installs it. node9 asks before publishing (Publishing shield)."
|
|
3545
|
+
},
|
|
3546
|
+
{
|
|
3547
|
+
name: "shield:publishing:review-twine-upload",
|
|
3548
|
+
tool: "bash",
|
|
3549
|
+
conditions: [
|
|
3550
|
+
{
|
|
3551
|
+
field: "command",
|
|
3552
|
+
op: "matches",
|
|
3553
|
+
value: "(?:^|[^\\w-])(?:twine)(?![\\w-])[^;&|]{0,200}?\\s(?:upload)(?![\\w-])",
|
|
3554
|
+
flags: "i"
|
|
3555
|
+
}
|
|
3556
|
+
],
|
|
3557
|
+
verdict: "review",
|
|
3558
|
+
reason: "twine upload publishes to PyPI. node9 asks before publishing (Publishing shield)."
|
|
3559
|
+
},
|
|
3560
|
+
{
|
|
3561
|
+
name: "shield:publishing:review-python-publish",
|
|
3562
|
+
tool: "bash",
|
|
3563
|
+
conditions: [
|
|
3564
|
+
{
|
|
3565
|
+
field: "command",
|
|
3566
|
+
op: "matches",
|
|
3567
|
+
value: "(?:^|[^\\w-])(?:poetry|uv|hatch|flit)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
3568
|
+
flags: "i"
|
|
3569
|
+
}
|
|
3570
|
+
],
|
|
3571
|
+
verdict: "review",
|
|
3572
|
+
reason: "This publishes the Python package to PyPI. node9 asks before publishing (Publishing shield)."
|
|
3573
|
+
},
|
|
3574
|
+
{
|
|
3575
|
+
name: "shield:publishing:review-release-tool-publish",
|
|
3576
|
+
tool: "bash",
|
|
3577
|
+
conditions: [
|
|
3578
|
+
{
|
|
3579
|
+
field: "command",
|
|
3580
|
+
op: "matches",
|
|
3581
|
+
value: "(?:^|[^\\w-])(?:lerna|changeset|vsce|ovsx)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
3582
|
+
flags: "i"
|
|
3583
|
+
}
|
|
3584
|
+
],
|
|
3585
|
+
verdict: "review",
|
|
3586
|
+
reason: "This publishes packages or an editor extension through a release tool. node9 asks before publishing (Publishing shield)."
|
|
3587
|
+
},
|
|
3588
|
+
{
|
|
3589
|
+
name: "shield:publishing:review-cargo-publish",
|
|
3590
|
+
tool: "bash",
|
|
3591
|
+
conditions: [
|
|
3592
|
+
{
|
|
3593
|
+
field: "command",
|
|
3594
|
+
op: "matches",
|
|
3595
|
+
value: "(?:^|[^\\w-])(?:cargo)(?![\\w-])[^;&|]{0,200}?\\s(?:publish)(?![\\w-])",
|
|
3596
|
+
flags: "i"
|
|
3597
|
+
}
|
|
3598
|
+
],
|
|
3599
|
+
verdict: "review",
|
|
3600
|
+
reason: "cargo publish ships the crate. node9 asks before publishing (Publishing shield)."
|
|
3601
|
+
},
|
|
3602
|
+
{
|
|
3603
|
+
name: "shield:publishing:review-gem-push",
|
|
3604
|
+
tool: "bash",
|
|
3605
|
+
conditions: [
|
|
3606
|
+
{
|
|
3607
|
+
field: "command",
|
|
3608
|
+
op: "matches",
|
|
3609
|
+
value: "(?:^|[^\\w-])(?:gem)(?![\\w-])[^;&|]{0,200}?\\s(?:push)(?![\\w-])",
|
|
3610
|
+
flags: "i"
|
|
3611
|
+
}
|
|
3612
|
+
],
|
|
3613
|
+
verdict: "review",
|
|
3614
|
+
reason: "gem push publishes to RubyGems. node9 asks before publishing (Publishing shield)."
|
|
3615
|
+
},
|
|
3616
|
+
{
|
|
3617
|
+
name: "shield:publishing:review-docker-push",
|
|
3618
|
+
tool: "bash",
|
|
3619
|
+
conditions: [
|
|
3620
|
+
{
|
|
3621
|
+
field: "command",
|
|
3622
|
+
op: "matches",
|
|
3623
|
+
value: "(?:^|[^\\w-])(?:docker|podman)(?![\\w-])[^;&|]{0,200}?\\s(?:push|--push)(?![\\w-])",
|
|
3624
|
+
flags: "i"
|
|
3625
|
+
}
|
|
3626
|
+
],
|
|
3627
|
+
verdict: "review",
|
|
3628
|
+
reason: "docker push publishes the image to a registry. node9 asks before publishing (Publishing shield)."
|
|
3629
|
+
},
|
|
3630
|
+
{
|
|
3631
|
+
name: "shield:publishing:review-gh-release",
|
|
3632
|
+
tool: "bash",
|
|
3633
|
+
conditions: [
|
|
3634
|
+
{
|
|
3635
|
+
field: "command",
|
|
3636
|
+
op: "matches",
|
|
3637
|
+
value: "(?:^|[^\\w-])(?:gh)(?![\\w-])[^;&|]{0,200}?\\srelease\\s+(?:create|upload|edit)(?![\\w-])",
|
|
3638
|
+
flags: "i"
|
|
3639
|
+
}
|
|
3640
|
+
],
|
|
3641
|
+
verdict: "review",
|
|
3642
|
+
reason: "gh release ships a release on GitHub. node9 asks before publishing (Publishing shield)."
|
|
3643
|
+
}
|
|
3644
|
+
],
|
|
3645
|
+
dangerousWords: []
|
|
3646
|
+
};
|
|
3357
3647
|
redis_default = {
|
|
3358
3648
|
name: "redis",
|
|
3359
3649
|
description: "Protects Redis instances from destructive AI operations",
|
|
@@ -3438,13 +3728,25 @@ var init_dist = __esm({
|
|
|
3438
3728
|
[bash_safe_default.name]: bash_safe_default,
|
|
3439
3729
|
[docker_default.name]: docker_default,
|
|
3440
3730
|
[filesystem_default.name]: filesystem_default,
|
|
3731
|
+
// Dangerous actions as category shields (node9Firewall#385): an MCP app's
|
|
3732
|
+
// money, credential and publishing tools, asked about whatever the request
|
|
3733
|
+
// said. One glob per rule covers the bare name the gateway sends and the
|
|
3734
|
+
// mcp__<server>__ name the agent hook sends.
|
|
3735
|
+
[finance_default.name]: finance_default,
|
|
3441
3736
|
[github_default.name]: github_default,
|
|
3737
|
+
[identity_default.name]: identity_default,
|
|
3442
3738
|
[k8s_default.name]: k8s_default,
|
|
3443
3739
|
[mongodb_default.name]: mongodb_default,
|
|
3444
3740
|
[postgres_default.name]: postgres_default,
|
|
3445
3741
|
[project_jail_default.name]: project_jail_default,
|
|
3742
|
+
[publishing_default.name]: publishing_default,
|
|
3446
3743
|
[redis_default.name]: redis_default
|
|
3447
3744
|
};
|
|
3745
|
+
ACTION_SHIELD_NAMES = /* @__PURE__ */ new Set([
|
|
3746
|
+
"finance",
|
|
3747
|
+
"identity",
|
|
3748
|
+
"publishing"
|
|
3749
|
+
]);
|
|
3448
3750
|
assertBuiltinShieldRegexesAreSafe();
|
|
3449
3751
|
SSRF_MAX_HOST = 253;
|
|
3450
3752
|
METADATA_ADDRESSES = /* @__PURE__ */ new Set([
|
|
@@ -13230,7 +13532,7 @@ function loadShieldStatus() {
|
|
|
13230
13532
|
cfg.policySource === "workspace" ? cfg.policy.appliedShields ?? [] : readActiveShields()
|
|
13231
13533
|
);
|
|
13232
13534
|
const active = all.filter((n) => activeSet.has(n));
|
|
13233
|
-
const inactive = all.filter((n) => !activeSet.has(n));
|
|
13535
|
+
const inactive = all.filter((n) => !activeSet.has(n) && !ACTION_SHIELD_NAMES.has(n));
|
|
13234
13536
|
return { active, inactive };
|
|
13235
13537
|
} catch {
|
|
13236
13538
|
return { active: [], inactive: [] };
|
|
@@ -13601,6 +13903,7 @@ var init_data = __esm({
|
|
|
13601
13903
|
init_blast();
|
|
13602
13904
|
init_daemon();
|
|
13603
13905
|
init_costSync();
|
|
13906
|
+
init_dist();
|
|
13604
13907
|
init_shields();
|
|
13605
13908
|
init_config();
|
|
13606
13909
|
init_decision();
|