@node9/proxy 2.54.0 → 2.55.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/index.js CHANGED
@@ -957,12 +957,46 @@ function wordValues(word, state) {
957
957
  if (!dynamic) return out.map(asWord);
958
958
  return out.filter((piece) => piece.value !== "").map((piece) => ({ value: piece.value, pattern: piece.pattern + "*", dynamic: true }));
959
959
  }
960
+ function sedSubstitutions(script) {
961
+ const out = [];
962
+ for (const raw of script.split(/\r?\n|;/)) {
963
+ const cmd = raw.trim();
964
+ if (cmd === "") continue;
965
+ const m = /^(?:(?:\d+|\$|\/(?:\\.|[^\\/])*\/)(?:,(?:\d+|\$|\/(?:\\.|[^\\/])*\/))?)?s(.)/.exec(
966
+ cmd
967
+ );
968
+ if (!m) return null;
969
+ const delimiter = m[1];
970
+ if (delimiter === "\\") return null;
971
+ const parts = [];
972
+ let cur = "";
973
+ let i = m[0].length;
974
+ for (; i < cmd.length && parts.length < 2; i++) {
975
+ const ch = cmd[i];
976
+ if (ch === "\\" && i + 1 < cmd.length) {
977
+ cur += ch + cmd[++i];
978
+ continue;
979
+ }
980
+ if (ch === delimiter) {
981
+ parts.push(cur);
982
+ cur = "";
983
+ continue;
984
+ }
985
+ cur += ch;
986
+ }
987
+ if (parts.length < 2) return null;
988
+ if (!/^[gpiImM0-9]*$/.test(cmd.slice(i))) return null;
989
+ out.push(parts[1].replace(/\\(.)/g, "$1"));
990
+ }
991
+ return out.length > 0 ? out : null;
992
+ }
960
993
  function collectShellFileAccesses(command, context = {}) {
961
994
  const out = [];
962
995
  let payloads = 256;
963
996
  const functions = /* @__PURE__ */ new Map();
964
997
  const seenCalls = /* @__PURE__ */ new Set();
965
998
  const pipedStdin = /* @__PURE__ */ new WeakMap();
999
+ let currentStdin = null;
966
1000
  let callWalks2 = MAX_CALL_WALKS;
967
1001
  const initial = {
968
1002
  cwd: [context.cwd ?? ""],
@@ -1057,8 +1091,9 @@ function collectShellFileAccesses(command, context = {}) {
1057
1091
  }
1058
1092
  const locate = (p) => tokens.find((w) => w?.value === p) ?? { value: p };
1059
1093
  if (name === "sed") {
1060
- let inplace = false, hasScript = false, ended = false;
1094
+ let inplace = false, hasScript = false, ended = false, scriptUnknown = false;
1061
1095
  const files = [];
1096
+ const scriptParts = [];
1062
1097
  for (let i = 0; i < args.length; i++) {
1063
1098
  const token = args[i];
1064
1099
  if (!token) {
@@ -1076,7 +1111,11 @@ function collectShellFileAccesses(command, context = {}) {
1076
1111
  hasScript = true;
1077
1112
  const eq = value.indexOf("=");
1078
1113
  const script = eq < 0 ? args[++i] : { value: value.slice(eq + 1) };
1079
- if (value.startsWith("--file") && script) add("read", script, state);
1114
+ if (value.startsWith("--file")) {
1115
+ scriptUnknown = true;
1116
+ if (script) add("read", script, state);
1117
+ } else if (script?.value) scriptParts.push(script.value);
1118
+ else scriptUnknown = true;
1080
1119
  }
1081
1120
  continue;
1082
1121
  }
@@ -1091,7 +1130,11 @@ function collectShellFileAccesses(command, context = {}) {
1091
1130
  if (flag === "e" || flag === "f") {
1092
1131
  hasScript = true;
1093
1132
  const script = value.slice(j + 1) ? { value: value.slice(j + 1) } : args[++i];
1094
- if (flag === "f" && script) add("read", script, state);
1133
+ if (flag === "f") {
1134
+ scriptUnknown = true;
1135
+ if (script) add("read", script, state);
1136
+ } else if (script?.value) scriptParts.push(script.value);
1137
+ else scriptUnknown = true;
1095
1138
  break;
1096
1139
  }
1097
1140
  if (flag === "l") {
@@ -1101,10 +1144,14 @@ function collectShellFileAccesses(command, context = {}) {
1101
1144
  }
1102
1145
  continue;
1103
1146
  }
1104
- if (!hasScript) hasScript = true;
1105
- else files.push(token);
1147
+ if (!hasScript) {
1148
+ hasScript = true;
1149
+ scriptParts.push(value);
1150
+ } else files.push(token);
1106
1151
  }
1107
- for (const file2 of files) add(inplace ? "write" : "read", file2, state);
1152
+ const edits = inplace && !scriptUnknown ? sedSubstitutions(scriptParts.join("\n")) : null;
1153
+ for (const file2 of files)
1154
+ add(inplace ? "write" : "read", file2, state, edits ? { edits } : {});
1108
1155
  return;
1109
1156
  }
1110
1157
  if (FS_READ_TOOLS.has(name) && name !== "dd") {
@@ -1231,9 +1278,11 @@ function collectShellFileAccesses(command, context = {}) {
1231
1278
  continue;
1232
1279
  const remove = name === "rm" || name === "unlink";
1233
1280
  const append = name === "tee" && strings.some((s) => s === "--append" || /^-[^-]*a/.test(s));
1281
+ const teed = name === "tee" && !append ? currentStdin : null;
1234
1282
  add(remove ? "remove" : name === "touch" ? "create" : "write", token, state, {
1235
1283
  recursive: remove && strings.some((s) => /^-[^-]*[rR]/.test(s) || s === "--recursive"),
1236
- ...append ? { append: true } : {}
1284
+ ...append ? { append: true } : {},
1285
+ ...teed !== null ? { text: teed } : {}
1237
1286
  });
1238
1287
  }
1239
1288
  return;
@@ -1555,11 +1604,18 @@ function collectShellFileAccesses(command, context = {}) {
1555
1604
  if (stmt.Background) state = clone(state);
1556
1605
  const headWord = stmt.Cmd && stmt.Cmd.kind === "CallExpr" ? base(resolveWordLiteral(stmt.Cmd.Args?.[0])) : "";
1557
1606
  const sends = SENDING_STDIN.has(headWord);
1607
+ let produced;
1558
1608
  for (const redir of stmt.Redirs ?? []) {
1559
1609
  substitutions(redir.Word, state, depth);
1560
1610
  for (const word of wordValues(redir.Word, state)) {
1561
- if (ops().WRITES.has(redir.Op))
1562
- add("write", word, state, ops().APPENDS.has(redir.Op) ? { append: true } : {});
1611
+ if (ops().WRITES.has(redir.Op)) {
1612
+ if (ops().APPENDS.has(redir.Op)) add("write", word, state, { append: true });
1613
+ else {
1614
+ const stdout = redir.N == null || redir.N.Value === "1";
1615
+ if (stdout && produced === void 0) produced = producedText(stmt);
1616
+ add("write", word, state, stdout && produced ? { text: produced } : {});
1617
+ }
1618
+ }
1563
1619
  if (ops().READS.has(redir.Op)) add("read", word, state, sends ? { upload: true } : {});
1564
1620
  if (redir.Op === ops().DUP_OUT && word.value && !/^\d+$/.test(word.value))
1565
1621
  add("write", word, state);
@@ -1571,6 +1627,7 @@ function collectShellFileAccesses(command, context = {}) {
1571
1627
  stdinScript(stmt, state, depth);
1572
1628
  const fedText = stdinText(stmt);
1573
1629
  if (fedText !== null) nestedPayload(xargsPayload(stmt, fedText), clone(state), depth);
1630
+ currentStdin = fedText;
1574
1631
  switch (cmd.kind) {
1575
1632
  case "CallExpr":
1576
1633
  call(cmd, state, depth);
@@ -1684,6 +1741,26 @@ function collectShellFileAccesses(command, context = {}) {
1684
1741
  }
1685
1742
  return out;
1686
1743
  }
1744
+ function serviceNamedIn(text) {
1745
+ const re = new RegExp(SERVICE_WORD_RE.source, "gi");
1746
+ for (let m = re.exec(text); m; m = re.exec(text)) {
1747
+ const lower2 = m[1].toLowerCase();
1748
+ if (lower2 === "init" && !INIT_PATTERN_RE.test(text)) continue;
1749
+ return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? m[1];
1750
+ }
1751
+ return null;
1752
+ }
1753
+ function serviceOf(name) {
1754
+ const leaf = name.replace(/^.*[\\/]/, "").replace(/\.service$/, "").replace(/@.*$/, "");
1755
+ const lower2 = leaf.toLowerCase();
1756
+ return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? UNIT_ALIASES[lower2] ?? null;
1757
+ }
1758
+ function killsService(language, code) {
1759
+ const api = KILL_API[language].exec(code);
1760
+ if (!api) return null;
1761
+ const service = serviceNamedIn(code);
1762
+ return service ? `${api[0].trim()} with ${service}` : null;
1763
+ }
1687
1764
  function inlineLanguageOf(interp) {
1688
1765
  const i = interp.toLowerCase();
1689
1766
  if (/^python[\d.]*$/.test(i)) return "python";
@@ -1758,6 +1835,15 @@ function judgeInlineCode(language, code, isProtected) {
1758
1835
  return { outcome: "unreadable", what: "is too long for node9 to read" };
1759
1836
  }
1760
1837
  const text = language === "python" ? resolvePythonAliases(code) : code;
1838
+ const killed = killsService(language, text);
1839
+ if (killed) {
1840
+ return {
1841
+ outcome: "dangerous",
1842
+ what: WHAT["kills-service"],
1843
+ evidence: killed.slice(0, 60),
1844
+ category: "kills-service"
1845
+ };
1846
+ }
1761
1847
  for (const [category, re] of TABLES[language]) {
1762
1848
  const m = re.exec(text);
1763
1849
  if (!m) continue;
@@ -6572,8 +6658,16 @@ function evaluateGitHooksFileAccess(args, accesses, context, settings, shell) {
6572
6658
  disarms = true;
6573
6659
  how = "removed";
6574
6660
  } else if (texts === null) {
6575
- disarms = true;
6576
- how = "overwritten";
6661
+ if (access.edits) {
6662
+ disarms = access.edits.some(editDisarms);
6663
+ how = "edited to exit";
6664
+ } else if (access.text !== void 0) {
6665
+ disarms = hookTextRunsNothing(access.text);
6666
+ how = "emptied";
6667
+ } else {
6668
+ disarms = true;
6669
+ how = "overwritten";
6670
+ }
6577
6671
  } else if (texts.whole.length > 0) {
6578
6672
  disarms = texts.whole.some(hookTextRunsNothing);
6579
6673
  how = "emptied";
@@ -8405,6 +8499,118 @@ function scanArgumentSecrets(args) {
8405
8499
  severity: "review"
8406
8500
  } : null;
8407
8501
  }
8502
+ function shownOf2(words) {
8503
+ return words.map((w) => w ?? "$?").join(" ").slice(0, 80);
8504
+ }
8505
+ function withoutComments(command) {
8506
+ return command.split("\n").map((line) => {
8507
+ for (let i = 0; i < line.length; i++) {
8508
+ if (line[i] === "#" && (i === 0 || line[i - 1] === " " || line[i - 1] === " ")) {
8509
+ return line.slice(0, i);
8510
+ }
8511
+ }
8512
+ return line;
8513
+ }).join("\n");
8514
+ }
8515
+ function detectSystemProcessStop(command, depth = 0) {
8516
+ if (!PRESCREEN_RE3.test(command)) return null;
8517
+ const named = serviceNamedIn(withoutComments(command));
8518
+ let direct = null;
8519
+ let dynamicKill = null;
8520
+ walkCommandScope(command, (node) => {
8521
+ const n = node;
8522
+ if (direct || !n || n.kind !== "CallExpr") return true;
8523
+ const words = (n.Args || []).map((a) => resolveWordLiteral(a));
8524
+ if (words.length === 0) return true;
8525
+ if (baseWord(words[0]) === "xargs" && words.some((w) => w !== null && baseWord(w) === "kill")) {
8526
+ dynamicKill ??= shownOf2(words);
8527
+ return true;
8528
+ }
8529
+ if (depth < MAX_PAYLOAD_DEPTH5) {
8530
+ const payload = literalShellPayload(words, baseWord(words[0]));
8531
+ if (payload !== null) {
8532
+ const inner = detectSystemProcessStop(payload, depth + 1);
8533
+ if (inner) direct = inner;
8534
+ return true;
8535
+ }
8536
+ }
8537
+ const head = unwrapCommandHead(words);
8538
+ if (head >= words.length) return true;
8539
+ const name = baseWord(words[head]);
8540
+ const rest = words.slice(head + 1);
8541
+ const shown = shownOf2(words);
8542
+ const viaXargs = words.slice(0, head).some((w) => w !== null && baseWord(w) === "xargs");
8543
+ if (name === "kill") {
8544
+ const targets = [];
8545
+ for (let i = 0; i < rest.length; i++) {
8546
+ const w = rest[i];
8547
+ if (i === 0 && w !== null && KILL_SIGNAL_RE.test(w)) {
8548
+ if (w === "-s") i++;
8549
+ continue;
8550
+ }
8551
+ if (w === "--") continue;
8552
+ targets.push(w);
8553
+ }
8554
+ if (targets.some((t) => t === "1" || t === "-1")) {
8555
+ direct = { service: "init (pid 1)", how: "kills", shown };
8556
+ } else if (viaXargs || targets.some((t) => t === null)) {
8557
+ dynamicKill ??= shown;
8558
+ }
8559
+ return true;
8560
+ }
8561
+ if (name === "pkill" || name === "killall") {
8562
+ let skipValue = false;
8563
+ for (const w of rest) {
8564
+ if (skipValue) {
8565
+ skipValue = false;
8566
+ continue;
8567
+ }
8568
+ if (w !== null && w.startsWith("-")) {
8569
+ if (/^-(?:u|U|g|G|t|P|s|n|o|r|q|-signal|-uid|-user)$/.test(w)) skipValue = true;
8570
+ continue;
8571
+ }
8572
+ if (w === null) {
8573
+ dynamicKill ??= shown;
8574
+ continue;
8575
+ }
8576
+ const service = serviceOf(w) ?? serviceNamedIn(w);
8577
+ if (service) direct = { service, how: "kills", shown };
8578
+ }
8579
+ return true;
8580
+ }
8581
+ if (name === "systemctl") {
8582
+ if (rest.includes("--user")) return true;
8583
+ const verb = rest.find((w) => w !== null && !w.startsWith("-"));
8584
+ if (verb === void 0 || verb === null || !SYSTEMCTL_STOP_VERBS.has(verb)) return true;
8585
+ for (const w of rest.slice(rest.indexOf(verb) + 1)) {
8586
+ const service = w === null ? null : serviceOf(w);
8587
+ if (service) direct = { service, how: verb === "kill" ? "kills" : "stops", shown };
8588
+ }
8589
+ return true;
8590
+ }
8591
+ if (name === "service") {
8592
+ const [unit, verb] = rest;
8593
+ const service = typeof unit === "string" ? serviceOf(unit) : null;
8594
+ if (service && verb === "stop") direct = { service, how: "stops", shown };
8595
+ return true;
8596
+ }
8597
+ if (name === "launchctl") {
8598
+ const verb = rest.find((w) => w !== null && !w.startsWith("-"));
8599
+ if (verb === void 0 || verb === null || !LAUNCHCTL_UNLOAD_VERBS.has(verb)) return true;
8600
+ const daemon = rest.find((w) => w !== null && LAUNCH_DAEMONS_RE.test(w));
8601
+ if (daemon) {
8602
+ direct = { service: daemon.replace(/^.*\//, ""), how: "unloads the system daemon", shown };
8603
+ }
8604
+ return true;
8605
+ }
8606
+ return true;
8607
+ });
8608
+ if (direct) return direct;
8609
+ if (dynamicKill !== null && named) {
8610
+ return { service: named, how: "kills the processes of", shown: dynamicKill };
8611
+ }
8612
+ return null;
8613
+ }
8408
8614
  function patternSelects(pattern, targets) {
8409
8615
  const pieces = pattern.toLowerCase().split(/[\\^$.*+?()[\]{}|]+/).filter(Boolean);
8410
8616
  if (pieces.length === 0) return false;
@@ -9024,6 +9230,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
9024
9230
  checkId: "commands.eval-dynamic"
9025
9231
  });
9026
9232
  }
9233
+ const stopped = detectSystemProcessStop(shellCommand);
9234
+ if (stopped) {
9235
+ consider("commands.system-processes", {
9236
+ decision: "review",
9237
+ blockedByLabel: "Node9: System Service Stopped",
9238
+ reason: `The AI ${stopped.how} ${stopped.service}: ${stopped.shown}`,
9239
+ ruleDescription: "The AI stops or kills a system service (sshd, dockerd, systemd, a database or web server). Other people and programs on this machine depend on it; confirm this is intentional.",
9240
+ tier: 3,
9241
+ checkId: "commands.system-processes"
9242
+ });
9243
+ }
9027
9244
  const builtin = strictestVerdict(candidates);
9028
9245
  if (builtin) return builtin;
9029
9246
  {
@@ -10102,7 +10319,7 @@ function matchCanaryArgs(args, values) {
10102
10319
  return null;
10103
10320
  }
10104
10321
  }
10105
- var import_url, import_picomatch, import_safe_regex2, import_picomatch2, import_module, import_picomatch3, import_safe_regex22, import_crypto2, import_crypto3, import_crypto4, import_crypto5, getFilename, __filename2, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, finance_default, identity_default, publishing_default, settings_default, branches_default, ACTION_TEMPLATES, ACTION_CHECKS, GAP, prog, httpTo, httpWrite, HTTP_WRITE, HTTP_WRITE_ANY, NOT_STRIPE_TEST, postTo, STRIPE_OBJECTS, APP_SHIELD_SPECS, APP_SHIELDS, APP_SHIELD_NAMES, APP_SERVER_GLOB, GENERAL_ACTION_RULES, BUILTIN_SHIELDS, SSRF_MAX_HOST, METADATA_ADDRESSES, STRICT_TIERS, METADATA_HOSTNAMES, v4Octets, TIER_REASON, CHECK_TEXT, LEVELS, MODE_VALUES, SOFT, STRICT, BLOCK_ALL, LEVEL_CHECKS, ASI, ASI_IDS, PACK_SHIELD_OWASP, PACK_RULE_OWASP, 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, PROJECT_JAIL_BLOCK_READ, OVERRIDE_PREFIX, LABEL_WRAPPERS, LEGACY_READERS, syntax, KINDS, STRUCTS, unknownKinds, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, MAX_BLOBS, MIN_DECODED, BASE64_RUN_RE, HEX_RUN_RE, HEX_ESCAPE_RUN_RE, SYSTEM_AUTH_FILES, SYSTEM_AUTH_DIRS, PASSWORD_HASH_FILES, STARTUP_NAMES, SYSTEM_DIRS, SYSTEM_DIRS_EXEMPT, UPLOAD_SYSTEM_DIRS, AGENT_INSTRUCTION_FILES, AGENT_INSTRUCTION_DIRS, LEGACY_SYSTEM_PATH_RE, MAX_ALTERNATIVES, MAX_CALL_DEPTH, MAX_CALL_WALKS, MAX_XARGS_PAYLOAD, POSITIONAL, MAX_DEPTH, MAX_PAYLOAD_DEPTH, unique, clone, SENDING_STDIN, DOWNLOAD_SHORT_VALUE, DOWNLOAD_LONG_VALUE, DOWNLOAD_OUTPUT_FLAGS, DOWNLOAD_DIR_FLAGS, base, quoteGlob, asWord, ops, MAX_INLINE_CODE, WHAT, OUTSIDE, pyImport, either, PYTHON, NODE, PERL, RUBY, PHP, TABLES, STRING_LITERAL, READ_CALL, ARG, WRAP, STR_PREFIX, WRITE_MODE_LITERAL, WRITE_MODE, WRITE_MODE_AFTER, PERL_WRITE_BEFORE, readCallBefore, READ_BEFORE, READ_AFTER, ASSIGNED, openedName, OPENED_NAME, DOTENV, DOTENV_PATH_OPTION, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, codeBodiesCache, AST_CACHE_MAX, astCache, PARSE_FAIL, INTERPRETER_LINE, PROGRAM_DIR, ACCESS_VIEW_CACHE_MAX, accessViewCache, MAX_READING_PAYLOADS, STDIN_CODE_INTERPRETERS, RUNS_TEXT_ELSEWHERE, defaultExpansionOps, EMPTY_NAMES, VARIABLE_READERS, PLAIN_PROGRAM_NAME, 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, SQL_DB_CLIS, SQL_DDL_RE, CHMOD_OPEN_PERM_TOKENS, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _redirStdinOps, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, INTERP_LEADING_TARGET, NODE_VALUE_FLAG, MAX_PAYLOAD_NESTING, payloadNesting, MAX_INLINE_CALLS, INLINE_EXEC_FALLBACK, UNREADABLE_SOURCE, SCRIPT_RUNNERS, SCRIPT_RUNNER_VALUE_FLAGS, MAX_SCRIPT_OPERANDS, NET_BINARIES, VALUE_FLAGS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, andOrOps, ARRAY_MARK, ARRAY_SEP, MAX_CALL_DEPTH2, MAX_CALL_WALKS2, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, stripDotSlash, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, INDIRECT_SHAPE_RE, SOURCES_FILE_RE, SHELL_SET_VARS, pipeOps, callWords, JAILED_GLOB_NAMES, JAILED_DIR_NAMES, shellGlob, GLOB_META, INLINE_INTERP_PRESCREEN_RE, runsInlineInterpreter, isReaderWord, positionalAfter, NONE, UNKNOWN, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, exempt, RANK, SEQUENCE_OPS, BIP39_ENGLISH, BIP39_PUBLIC_VECTORS, indices, lengths, hash, MAX_MNEMONIC_HASHES, SECRET_VIEW_LIMITS, 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, SPANISH_LETTERS, HETU_CHARS, VERHOEFF_D, VERHOEFF_P, MAX, UNTRUSTED_TOOLS, INJECTION_SIGNALS, MENTION_QUOTE_RE, MENTION_WORD_RE, 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, BASIC_HEADER_RE, BASIC_HEADER_PAIR_RE, BASIC_PLACEHOLDER_RE, BASIC_TEMPLATE_MARKERS, DROPBOX_SECRET_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, BATCH_SEPARATOR, IMPERATIVE, SECRET_TARGET, GUARD, SIGNALS, DESTINATION_RE, REUSED_SIGNALS, NEVER_NEGATED, NEGATION_BEFORE, RDR_IN, COPY_VERBS2, LITERAL_VERBS, GIT_PRESCREEN_RE, MAX_PAYLOAD_DEPTH2, MAX_ALIAS_DEPTH, CACHE_MAX, cache, PAYLOAD_SHELLS, CONFIG_SCOPE_FLAGS, CONFIG_VALUE_FLAGS, GLOBAL_VALUE_OPTIONS, GLOBAL_FLAG_OPTIONS, MAX_LOOP_ITEMS, GitWalk, POSITIONAL2, NO_VARS, NO_APPENDS, FORCE_PUSH, DESTRUCTIVE, UNREADABLE, PUSH_LONG_VALUE, BRANCH_LONG_VALUE, TAG_LONG_VALUE, CLEAN_LONG_VALUE, RESTORE_LONG_VALUE, CHECKOUT_LONG_VALUE, HOOKS_BYPASS, NO_VERIFY_SUBS, HOOK_KILL_SWITCHES, COMMIT_LONG_VALUE, CHMOD_OPTION_RE, _appendOp, STAGE_ALL, ADD_LONG_VALUE, CHECK_ID, RULE_NAME, INERT_LINE_RE, CHECK_ID2, INSTRUCTION_NAMES, SETTINGS_RE, HOOK_WORDS_RE, SHELLS, NETCATS, NET_CLIENTS, SENDERS, NETCAT_EXEC_LONG, DECL_DUMPS, PROC_ENVIRON_RE, DEV_NET_RE, SOCAT_PROGRAM_RE, SOCAT_NET_RE, PRESCREEN_RE, MAX_PAYLOAD_DEPTH3, CACHE_MAX2, cache2, dupInOp, REVERSE_SHELL_DESCRIPTION, ENV_EXFIL_DESCRIPTION, DYNAMIC_WORD, MULTICALL, SHELL_VALUE_OPTIONS, INTERPRETERS, OutboundWalk, NPM_INSTALL_VERBS, NPM_EXEC_VERBS, PNPM_INSTALL_VERBS, YARN_INSTALL_VERBS, BUN_INSTALL_VERBS, DLX_VERBS, NON_REGISTRY_RE, NPM_NAME_RE, EXACT_SEMVER_RE, NPM_VALUE_FLAGS, PNPM_VALUE_FLAGS, YARN_VALUE_FLAGS, BUN_VALUE_FLAGS, PIP_VALUE_FLAGS, UV_VALUE_FLAGS, POETRY_VALUE_FLAGS, PIPENV_VALUE_FLAGS, PIPX_VALUE_FLAGS, PY_SPEC_RE, PY_EXACT_RE, EXACT_VERSION_RE, GEM_NAME_RE, GEM_VALUE_FLAGS, BUNDLE_VALUE_FLAGS, CRATE_NAME_RE, CARGO_ADD_VALUE_FLAGS, CARGO_INSTALL_VALUE_FLAGS, GO_VALUE_FLAGS, GO_PATH_RE, NUGET_NAME_RE, DOTNET_ADD_VALUE_FLAGS, DOTNET_TOOL_VALUE_FLAGS, NUGET_VALUE_FLAGS, MAVEN_COORD_RE, COMPOSER_NAME_RE, COMPOSER_VALUE_FLAGS, EDITOR_HEADS, EXTENSION_ID_RE, MANAGER_HEADS, SHELLS2, MAX_NESTING, SHELL_VALUE_FLAGS, NPM_FAMILY, PIP_FAMILY, NPM_FETCH_VERBS, PIP_FETCH_VERBS, NPM_FLAGS, PIP_FLAGS, NPM_VARS, PIP_VARS, PRESCREEN_RE2, PIP_ATTACHED_RE, MAX_PAYLOAD_DEPTH4, PUBLIC_REGISTRY_HOSTS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, DEFAULT_EGRESS_ALLOWLIST, PRIVATE_HOST_SUFFIXES, SOURCE_COMMANDS, SINK_COMMANDS, OBFUSCATORS, SENSITIVE_PATTERNS, FLAGS_WITH_VALUES, DESTINATION_ARGS, MCP_DESTINATION_KEYS, ARGUMENT_SCAN_LIMITS, RUN_CHAR, runChar, RULE_NAME2, DESCRIPTION, DAEMON_CMDLINES, DAEMON_NAMES, KILLALL_NAMES, STOP_SYSTEMCTL, STOP_LAUNCHCTL, PKILL_VALUE_FLAGS, NAME_PRESCREEN_RE, base2, HOME_PID_FILE_RE, VERDICT_RANK, SQL_DML_KEYWORDS, NOT_OVERRIDABLE_CHECKS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, DESTRUCTIVE_VERB_RE, PII_EMAIL_RE, PII_SSN_RE, PII_PHONE_RE, PII_CC16_RE, PII_CC15_RE, PII_CC14_RE, PII_CC13_RE, PII_CC19_RE, CARD_PATTERNS, PII_ROUTING_RE, ROUTING_LABEL_RE, ROUTING_LABEL_WINDOW, NATIONAL_ID_SHAPES, NATIONAL_ID_LABEL_RE, NATIONAL_ID_LABEL_CS_RE, idLabelIn, NATIONAL_ID_LABEL_WINDOW, NATIONAL_ID_GUARD_RE, PII_IBAN_RE, REALTIME_PII_PATTERNS, MAX_PII_SCAN_BYTES, IBAN_DESTINATION_KEYS, WHOLE_IBAN_RE, JSON_ESCAPE_RE, JSON_ESCAPES, MASKED_KINDS, ENTRY_RE, IBAN_TEXT_RE, EMAIL_TEXT_RE, ACCOUNT_KEY_RE, ACCOUNT_VALUE_RE, MAX_MASK_DEPTH, EMPTY, CURL_SEND_FLAGS, WGET_SEND_FLAGS, IWR_SEND_FLAGS, WRITE_METHODS, GH_READ, GH_WRITE, GH_HOSTNAME_FLAGS, GH_REPO_VALUE_FLAGS, GH_API_VALUE_FLAGS, GIT_FETCH, PUBLISH, SHELLS3, OWN_HEADS, MAX_DEPTH3, CWD_CHANGERS, TERMINAL_ESCAPE_RE, LOOP_MAX_RECORDS, 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;
10322
+ var import_url, import_picomatch, import_safe_regex2, import_picomatch2, import_module, import_picomatch3, import_safe_regex22, import_crypto2, import_crypto3, import_crypto4, import_crypto5, getFilename, __filename2, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, finance_default, identity_default, publishing_default, settings_default, branches_default, ACTION_TEMPLATES, ACTION_CHECKS, GAP, prog, httpTo, httpWrite, HTTP_WRITE, HTTP_WRITE_ANY, NOT_STRIPE_TEST, postTo, STRIPE_OBJECTS, APP_SHIELD_SPECS, APP_SHIELDS, APP_SHIELD_NAMES, APP_SERVER_GLOB, GENERAL_ACTION_RULES, BUILTIN_SHIELDS, SSRF_MAX_HOST, METADATA_ADDRESSES, STRICT_TIERS, METADATA_HOSTNAMES, v4Octets, TIER_REASON, CHECK_TEXT, LEVELS, MODE_VALUES, SOFT, STRICT, BLOCK_ALL, LEVEL_CHECKS, ASI, ASI_IDS, PACK_SHIELD_OWASP, PACK_RULE_OWASP, 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, PROJECT_JAIL_BLOCK_READ, OVERRIDE_PREFIX, LABEL_WRAPPERS, LEGACY_READERS, syntax, KINDS, STRUCTS, unknownKinds, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, MAX_BLOBS, MIN_DECODED, BASE64_RUN_RE, HEX_RUN_RE, HEX_ESCAPE_RUN_RE, SYSTEM_AUTH_FILES, SYSTEM_AUTH_DIRS, PASSWORD_HASH_FILES, STARTUP_NAMES, SYSTEM_DIRS, SYSTEM_DIRS_EXEMPT, UPLOAD_SYSTEM_DIRS, AGENT_INSTRUCTION_FILES, AGENT_INSTRUCTION_DIRS, LEGACY_SYSTEM_PATH_RE, MAX_ALTERNATIVES, MAX_CALL_DEPTH, MAX_CALL_WALKS, MAX_XARGS_PAYLOAD, POSITIONAL, MAX_DEPTH, MAX_PAYLOAD_DEPTH, unique, clone, SENDING_STDIN, DOWNLOAD_SHORT_VALUE, DOWNLOAD_LONG_VALUE, DOWNLOAD_OUTPUT_FLAGS, DOWNLOAD_DIR_FLAGS, base, quoteGlob, asWord, ops, INFRASTRUCTURE_SERVICES, SERVER_SERVICES, SYSTEM_SERVICES, escape, SERVICE_WORD_RE, INIT_PATTERN_RE, UNIT_ALIASES, MAX_INLINE_CODE, WHAT, KILL_API, OUTSIDE, pyImport, either, PYTHON, NODE, PERL, RUBY, PHP, TABLES, STRING_LITERAL, READ_CALL, ARG, WRAP, STR_PREFIX, WRITE_MODE_LITERAL, WRITE_MODE, WRITE_MODE_AFTER, PERL_WRITE_BEFORE, readCallBefore, READ_BEFORE, READ_AFTER, ASSIGNED, openedName, OPENED_NAME, DOTENV, DOTENV_PATH_OPTION, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, codeBodiesCache, AST_CACHE_MAX, astCache, PARSE_FAIL, INTERPRETER_LINE, PROGRAM_DIR, ACCESS_VIEW_CACHE_MAX, accessViewCache, MAX_READING_PAYLOADS, STDIN_CODE_INTERPRETERS, RUNS_TEXT_ELSEWHERE, defaultExpansionOps, EMPTY_NAMES, VARIABLE_READERS, PLAIN_PROGRAM_NAME, 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, SQL_DB_CLIS, SQL_DDL_RE, CHMOD_OPEN_PERM_TOKENS, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _redirStdinOps, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, INTERP_LEADING_TARGET, NODE_VALUE_FLAG, MAX_PAYLOAD_NESTING, payloadNesting, MAX_INLINE_CALLS, INLINE_EXEC_FALLBACK, UNREADABLE_SOURCE, SCRIPT_RUNNERS, SCRIPT_RUNNER_VALUE_FLAGS, MAX_SCRIPT_OPERANDS, NET_BINARIES, VALUE_FLAGS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, andOrOps, ARRAY_MARK, ARRAY_SEP, MAX_CALL_DEPTH2, MAX_CALL_WALKS2, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, stripDotSlash, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, INDIRECT_SHAPE_RE, SOURCES_FILE_RE, SHELL_SET_VARS, pipeOps, callWords, JAILED_GLOB_NAMES, JAILED_DIR_NAMES, shellGlob, GLOB_META, INLINE_INTERP_PRESCREEN_RE, runsInlineInterpreter, isReaderWord, positionalAfter, NONE, UNKNOWN, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, exempt, RANK, SEQUENCE_OPS, BIP39_ENGLISH, BIP39_PUBLIC_VECTORS, indices, lengths, hash, MAX_MNEMONIC_HASHES, SECRET_VIEW_LIMITS, 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, SPANISH_LETTERS, HETU_CHARS, VERHOEFF_D, VERHOEFF_P, MAX, UNTRUSTED_TOOLS, INJECTION_SIGNALS, MENTION_QUOTE_RE, MENTION_WORD_RE, 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, BASIC_HEADER_RE, BASIC_HEADER_PAIR_RE, BASIC_PLACEHOLDER_RE, BASIC_TEMPLATE_MARKERS, DROPBOX_SECRET_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, BATCH_SEPARATOR, IMPERATIVE, SECRET_TARGET, GUARD, SIGNALS, DESTINATION_RE, REUSED_SIGNALS, NEVER_NEGATED, NEGATION_BEFORE, RDR_IN, COPY_VERBS2, LITERAL_VERBS, GIT_PRESCREEN_RE, MAX_PAYLOAD_DEPTH2, MAX_ALIAS_DEPTH, CACHE_MAX, cache, PAYLOAD_SHELLS, CONFIG_SCOPE_FLAGS, CONFIG_VALUE_FLAGS, GLOBAL_VALUE_OPTIONS, GLOBAL_FLAG_OPTIONS, MAX_LOOP_ITEMS, GitWalk, POSITIONAL2, NO_VARS, NO_APPENDS, FORCE_PUSH, DESTRUCTIVE, UNREADABLE, PUSH_LONG_VALUE, BRANCH_LONG_VALUE, TAG_LONG_VALUE, CLEAN_LONG_VALUE, RESTORE_LONG_VALUE, CHECKOUT_LONG_VALUE, HOOKS_BYPASS, NO_VERIFY_SUBS, HOOK_KILL_SWITCHES, COMMIT_LONG_VALUE, CHMOD_OPTION_RE, _appendOp, STAGE_ALL, ADD_LONG_VALUE, CHECK_ID, RULE_NAME, INERT_LINE_RE, CHECK_ID2, INSTRUCTION_NAMES, SETTINGS_RE, HOOK_WORDS_RE, SHELLS, NETCATS, NET_CLIENTS, SENDERS, NETCAT_EXEC_LONG, DECL_DUMPS, PROC_ENVIRON_RE, DEV_NET_RE, SOCAT_PROGRAM_RE, SOCAT_NET_RE, PRESCREEN_RE, MAX_PAYLOAD_DEPTH3, CACHE_MAX2, cache2, dupInOp, REVERSE_SHELL_DESCRIPTION, ENV_EXFIL_DESCRIPTION, DYNAMIC_WORD, MULTICALL, SHELL_VALUE_OPTIONS, INTERPRETERS, OutboundWalk, NPM_INSTALL_VERBS, NPM_EXEC_VERBS, PNPM_INSTALL_VERBS, YARN_INSTALL_VERBS, BUN_INSTALL_VERBS, DLX_VERBS, NON_REGISTRY_RE, NPM_NAME_RE, EXACT_SEMVER_RE, NPM_VALUE_FLAGS, PNPM_VALUE_FLAGS, YARN_VALUE_FLAGS, BUN_VALUE_FLAGS, PIP_VALUE_FLAGS, UV_VALUE_FLAGS, POETRY_VALUE_FLAGS, PIPENV_VALUE_FLAGS, PIPX_VALUE_FLAGS, PY_SPEC_RE, PY_EXACT_RE, EXACT_VERSION_RE, GEM_NAME_RE, GEM_VALUE_FLAGS, BUNDLE_VALUE_FLAGS, CRATE_NAME_RE, CARGO_ADD_VALUE_FLAGS, CARGO_INSTALL_VALUE_FLAGS, GO_VALUE_FLAGS, GO_PATH_RE, NUGET_NAME_RE, DOTNET_ADD_VALUE_FLAGS, DOTNET_TOOL_VALUE_FLAGS, NUGET_VALUE_FLAGS, MAVEN_COORD_RE, COMPOSER_NAME_RE, COMPOSER_VALUE_FLAGS, EDITOR_HEADS, EXTENSION_ID_RE, MANAGER_HEADS, SHELLS2, MAX_NESTING, SHELL_VALUE_FLAGS, NPM_FAMILY, PIP_FAMILY, NPM_FETCH_VERBS, PIP_FETCH_VERBS, NPM_FLAGS, PIP_FLAGS, NPM_VARS, PIP_VARS, PRESCREEN_RE2, PIP_ATTACHED_RE, MAX_PAYLOAD_DEPTH4, PUBLIC_REGISTRY_HOSTS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, DEFAULT_EGRESS_ALLOWLIST, PRIVATE_HOST_SUFFIXES, SOURCE_COMMANDS, SINK_COMMANDS, OBFUSCATORS, SENSITIVE_PATTERNS, FLAGS_WITH_VALUES, DESTINATION_ARGS, MCP_DESTINATION_KEYS, ARGUMENT_SCAN_LIMITS, RUN_CHAR, runChar, PRESCREEN_RE3, KILL_SIGNAL_RE, SYSTEMCTL_STOP_VERBS, LAUNCHCTL_UNLOAD_VERBS, LAUNCH_DAEMONS_RE, MAX_PAYLOAD_DEPTH5, RULE_NAME2, DESCRIPTION, DAEMON_CMDLINES, DAEMON_NAMES, KILLALL_NAMES, STOP_SYSTEMCTL, STOP_LAUNCHCTL, PKILL_VALUE_FLAGS, NAME_PRESCREEN_RE, base2, HOME_PID_FILE_RE, VERDICT_RANK, SQL_DML_KEYWORDS, NOT_OVERRIDABLE_CHECKS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, DESTRUCTIVE_VERB_RE, PII_EMAIL_RE, PII_SSN_RE, PII_PHONE_RE, PII_CC16_RE, PII_CC15_RE, PII_CC14_RE, PII_CC13_RE, PII_CC19_RE, CARD_PATTERNS, PII_ROUTING_RE, ROUTING_LABEL_RE, ROUTING_LABEL_WINDOW, NATIONAL_ID_SHAPES, NATIONAL_ID_LABEL_RE, NATIONAL_ID_LABEL_CS_RE, idLabelIn, NATIONAL_ID_LABEL_WINDOW, NATIONAL_ID_GUARD_RE, PII_IBAN_RE, REALTIME_PII_PATTERNS, MAX_PII_SCAN_BYTES, IBAN_DESTINATION_KEYS, WHOLE_IBAN_RE, JSON_ESCAPE_RE, JSON_ESCAPES, MASKED_KINDS, ENTRY_RE, IBAN_TEXT_RE, EMAIL_TEXT_RE, ACCOUNT_KEY_RE, ACCOUNT_VALUE_RE, MAX_MASK_DEPTH, EMPTY, CURL_SEND_FLAGS, WGET_SEND_FLAGS, IWR_SEND_FLAGS, WRITE_METHODS, GH_READ, GH_WRITE, GH_HOSTNAME_FLAGS, GH_REPO_VALUE_FLAGS, GH_API_VALUE_FLAGS, GIT_FETCH, PUBLISH, SHELLS3, OWN_HEADS, MAX_DEPTH3, CWD_CHANGERS, TERMINAL_ESCAPE_RE, LOOP_MAX_RECORDS, 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;
10106
10323
  var init_dist = __esm({
10107
10324
  "packages/policy-engine/dist/index.mjs"() {
10108
10325
  "use strict";
@@ -11988,6 +12205,11 @@ var init_dist = __esm({
11988
12205
  example: "/tmp/build-helper --serve",
11989
12206
  advice: "Keep Review. Malware often runs from /tmp."
11990
12207
  },
12208
+ "commands.system-processes": {
12209
+ plain: "The agent stops or kills a system service: sshd, dockerd, containerd, systemd, kubelet, cron, the firewall, the display server, or a database or web server (nginx, apache, mysql, postgres, redis, mongo). Directly (pkill sshd, systemctl stop docker, kill of pid 1) or through the process list (a script that finds the processes of a name and kills them). Killing a process by its number, pkill node, killall python and systemctl restart are not this check.",
12210
+ example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
12211
+ advice: "Keep Review: a stopped service takes other people and programs down with it. Set Log on a machine where agents manage local servers all day."
12212
+ },
11991
12213
  "commands.disk-destroy": {
11992
12214
  plain: "The agent formats, overwrites or securely erases a disk or file.",
11993
12215
  example: "dd if=/dev/zero of=/dev/sda",
@@ -12157,6 +12379,7 @@ var init_dist = __esm({
12157
12379
  "commands.sql-no-where": "log",
12158
12380
  "commands.temp-binary": "log",
12159
12381
  "commands.disk-destroy": "log",
12382
+ "commands.system-processes": "log",
12160
12383
  "commands.dangerous-word": "log",
12161
12384
  "files.system-dirs": "log",
12162
12385
  "files.shell-startup": "log",
@@ -12475,6 +12698,16 @@ var init_dist = __esm({
12475
12698
  defaultValue: "review",
12476
12699
  legacy: ["Manual Nuclear Protection"]
12477
12700
  },
12701
+ {
12702
+ id: "commands.system-processes",
12703
+ group: "commands",
12704
+ owasp: "ASI02",
12705
+ title: "Stops a system service",
12706
+ catches: "kill, pkill, killall, systemctl stop or kill, service stop or launchctl unload aimed at a system service (sshd, dockerd, systemd, kubelet, cron, a database or web server), or a script that walks the process list for one of those names and kills what it finds",
12707
+ values: ALL,
12708
+ defaultValue: "review",
12709
+ legacy: ["Node9: System Service Stopped"]
12710
+ },
12478
12711
  {
12479
12712
  id: "commands.dangerous-word",
12480
12713
  group: "commands",
@@ -13134,6 +13367,82 @@ var init_dist = __esm({
13134
13367
  )
13135
13368
  )
13136
13369
  }));
13370
+ INFRASTRUCTURE_SERVICES = [
13371
+ "init",
13372
+ "sshd",
13373
+ "dockerd",
13374
+ "docker-proxy",
13375
+ "containerd",
13376
+ "containerd-shim",
13377
+ "docker-containerd-shim",
13378
+ "runc",
13379
+ "systemd-journald",
13380
+ "journald",
13381
+ "systemd-logind",
13382
+ "systemd-udevd",
13383
+ "udevd",
13384
+ "dbus-daemon",
13385
+ "polkitd",
13386
+ "sssd",
13387
+ "kubelet",
13388
+ "kube-apiserver",
13389
+ "crond",
13390
+ "cron",
13391
+ "atd",
13392
+ "auditd",
13393
+ "rsyslogd",
13394
+ "syslogd",
13395
+ "chronyd",
13396
+ "ntpd",
13397
+ "NetworkManager",
13398
+ "wpa_supplicant",
13399
+ "dhclient",
13400
+ "avahi-daemon",
13401
+ "firewalld",
13402
+ "ufw",
13403
+ "cupsd",
13404
+ "snapd",
13405
+ "bluetoothd",
13406
+ "Xorg",
13407
+ "Xwayland",
13408
+ "gdm",
13409
+ "sddm",
13410
+ "lightdm"
13411
+ ];
13412
+ SERVER_SERVICES = [
13413
+ "nginx",
13414
+ "apache2",
13415
+ "httpd",
13416
+ "mysqld",
13417
+ "mariadbd",
13418
+ "postgres",
13419
+ "postgresql",
13420
+ "redis-server",
13421
+ "mongod"
13422
+ ];
13423
+ SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
13424
+ escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
13425
+ SERVICE_WORD_RE = new RegExp(
13426
+ `(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
13427
+ "i"
13428
+ );
13429
+ INIT_PATTERN_RE = /(?:["'*])init(?:["'*])/;
13430
+ UNIT_ALIASES = {
13431
+ docker: "dockerd",
13432
+ ssh: "sshd",
13433
+ mysql: "mysqld",
13434
+ mariadb: "mariadbd",
13435
+ redis: "redis-server",
13436
+ mongodb: "mongod",
13437
+ apache: "apache2",
13438
+ rsyslog: "rsyslogd",
13439
+ "systemd-networkd": "systemd-udevd",
13440
+ dbus: "dbus-daemon",
13441
+ avahi: "avahi-daemon",
13442
+ bluetooth: "bluetoothd",
13443
+ cups: "cupsd",
13444
+ chrony: "chronyd"
13445
+ };
13137
13446
  MAX_INLINE_CODE = 64 * 1024;
13138
13447
  WHAT = {
13139
13448
  deletes: "deletes files",
@@ -13145,7 +13454,15 @@ var init_dist = __esm({
13145
13454
  "builds-code": "runs code it builds at run time",
13146
13455
  permissions: "changes permissions or ownership",
13147
13456
  monitors: "captures the screen, the clipboard or the keyboard",
13148
- amplifies: "writes or sends in an endless loop"
13457
+ amplifies: "writes or sends in an endless loop",
13458
+ "kills-service": "stops a system service"
13459
+ };
13460
+ KILL_API = {
13461
+ python: /\bos\.kill(?:pg)?\s*\(|\.(?:kill|terminate)\s*\(|\bsignal\.SIGKILL\b/,
13462
+ node: /\bprocess\.kill\s*\(|\.kill\s*\(\s*['"`]?SIG/,
13463
+ perl: /\bkill\s+(?:-?\d+|['"]?[A-Z]+['"]?)\s*,/,
13464
+ ruby: /\bProcess\.kill\b/,
13465
+ php: /\bposix_kill\s*\(/
13149
13466
  };
13150
13467
  OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
13151
13468
  pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
@@ -19036,6 +19353,7 @@ ${text}` : text);
19036
19353
  "commands.sql-no-where",
19037
19354
  "commands.temp-binary",
19038
19355
  "commands.disk-destroy",
19356
+ "commands.system-processes",
19039
19357
  "commands.dangerous-word",
19040
19358
  "commands.node9-disarm",
19041
19359
  "commands.reverse-shell",
@@ -19250,6 +19568,12 @@ ${text}` : text);
19250
19568
  const char = value[index] ?? "";
19251
19569
  return RUN_CHAR.test(char) || char !== "" && isInvisibleChar(char);
19252
19570
  };
19571
+ PRESCREEN_RE3 = /\b(?:kill|pkill|killall|systemctl|service|launchctl|xargs)\b/;
19572
+ KILL_SIGNAL_RE = /^-(?:\d+|s|SIG[A-Z]+|[A-Z]{2,})$/;
19573
+ SYSTEMCTL_STOP_VERBS = /* @__PURE__ */ new Set(["stop", "kill", "disable", "mask"]);
19574
+ LAUNCHCTL_UNLOAD_VERBS = /* @__PURE__ */ new Set(["unload", "bootout", "remove"]);
19575
+ LAUNCH_DAEMONS_RE = /(?:^|\/)(?:System\/)?Library\/LaunchDaemons\//;
19576
+ MAX_PAYLOAD_DEPTH5 = 3;
19253
19577
  RULE_NAME2 = "review-node9-disarm";
19254
19578
  DESCRIPTION = "The AI wants to stop node9, remove it, or change its own files. These are your commands to run, not the agent's: with the daemon stopped the outside-content and taint checks are off.";
19255
19579
  DAEMON_CMDLINES = [