@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.
@@ -994,12 +994,46 @@ function wordValues(word, state) {
994
994
  if (!dynamic) return out.map(asWord);
995
995
  return out.filter((piece) => piece.value !== "").map((piece) => ({ value: piece.value, pattern: piece.pattern + "*", dynamic: true }));
996
996
  }
997
+ function sedSubstitutions(script) {
998
+ const out = [];
999
+ for (const raw of script.split(/\r?\n|;/)) {
1000
+ const cmd = raw.trim();
1001
+ if (cmd === "") continue;
1002
+ const m = /^(?:(?:\d+|\$|\/(?:\\.|[^\\/])*\/)(?:,(?:\d+|\$|\/(?:\\.|[^\\/])*\/))?)?s(.)/.exec(
1003
+ cmd
1004
+ );
1005
+ if (!m) return null;
1006
+ const delimiter = m[1];
1007
+ if (delimiter === "\\") return null;
1008
+ const parts = [];
1009
+ let cur = "";
1010
+ let i = m[0].length;
1011
+ for (; i < cmd.length && parts.length < 2; i++) {
1012
+ const ch = cmd[i];
1013
+ if (ch === "\\" && i + 1 < cmd.length) {
1014
+ cur += ch + cmd[++i];
1015
+ continue;
1016
+ }
1017
+ if (ch === delimiter) {
1018
+ parts.push(cur);
1019
+ cur = "";
1020
+ continue;
1021
+ }
1022
+ cur += ch;
1023
+ }
1024
+ if (parts.length < 2) return null;
1025
+ if (!/^[gpiImM0-9]*$/.test(cmd.slice(i))) return null;
1026
+ out.push(parts[1].replace(/\\(.)/g, "$1"));
1027
+ }
1028
+ return out.length > 0 ? out : null;
1029
+ }
997
1030
  function collectShellFileAccesses(command, context = {}) {
998
1031
  const out = [];
999
1032
  let payloads = 256;
1000
1033
  const functions = /* @__PURE__ */ new Map();
1001
1034
  const seenCalls = /* @__PURE__ */ new Set();
1002
1035
  const pipedStdin = /* @__PURE__ */ new WeakMap();
1036
+ let currentStdin = null;
1003
1037
  let callWalks2 = MAX_CALL_WALKS;
1004
1038
  const initial = {
1005
1039
  cwd: [context.cwd ?? ""],
@@ -1094,8 +1128,9 @@ function collectShellFileAccesses(command, context = {}) {
1094
1128
  }
1095
1129
  const locate = (p) => tokens.find((w) => w?.value === p) ?? { value: p };
1096
1130
  if (name === "sed") {
1097
- let inplace = false, hasScript = false, ended = false;
1131
+ let inplace = false, hasScript = false, ended = false, scriptUnknown = false;
1098
1132
  const files = [];
1133
+ const scriptParts = [];
1099
1134
  for (let i = 0; i < args.length; i++) {
1100
1135
  const token = args[i];
1101
1136
  if (!token) {
@@ -1113,7 +1148,11 @@ function collectShellFileAccesses(command, context = {}) {
1113
1148
  hasScript = true;
1114
1149
  const eq = value.indexOf("=");
1115
1150
  const script = eq < 0 ? args[++i] : { value: value.slice(eq + 1) };
1116
- if (value.startsWith("--file") && script) add("read", script, state);
1151
+ if (value.startsWith("--file")) {
1152
+ scriptUnknown = true;
1153
+ if (script) add("read", script, state);
1154
+ } else if (script?.value) scriptParts.push(script.value);
1155
+ else scriptUnknown = true;
1117
1156
  }
1118
1157
  continue;
1119
1158
  }
@@ -1128,7 +1167,11 @@ function collectShellFileAccesses(command, context = {}) {
1128
1167
  if (flag === "e" || flag === "f") {
1129
1168
  hasScript = true;
1130
1169
  const script = value.slice(j + 1) ? { value: value.slice(j + 1) } : args[++i];
1131
- if (flag === "f" && script) add("read", script, state);
1170
+ if (flag === "f") {
1171
+ scriptUnknown = true;
1172
+ if (script) add("read", script, state);
1173
+ } else if (script?.value) scriptParts.push(script.value);
1174
+ else scriptUnknown = true;
1132
1175
  break;
1133
1176
  }
1134
1177
  if (flag === "l") {
@@ -1138,10 +1181,14 @@ function collectShellFileAccesses(command, context = {}) {
1138
1181
  }
1139
1182
  continue;
1140
1183
  }
1141
- if (!hasScript) hasScript = true;
1142
- else files.push(token);
1184
+ if (!hasScript) {
1185
+ hasScript = true;
1186
+ scriptParts.push(value);
1187
+ } else files.push(token);
1143
1188
  }
1144
- for (const file2 of files) add(inplace ? "write" : "read", file2, state);
1189
+ const edits = inplace && !scriptUnknown ? sedSubstitutions(scriptParts.join("\n")) : null;
1190
+ for (const file2 of files)
1191
+ add(inplace ? "write" : "read", file2, state, edits ? { edits } : {});
1145
1192
  return;
1146
1193
  }
1147
1194
  if (FS_READ_TOOLS.has(name) && name !== "dd") {
@@ -1268,9 +1315,11 @@ function collectShellFileAccesses(command, context = {}) {
1268
1315
  continue;
1269
1316
  const remove = name === "rm" || name === "unlink";
1270
1317
  const append = name === "tee" && strings.some((s) => s === "--append" || /^-[^-]*a/.test(s));
1318
+ const teed = name === "tee" && !append ? currentStdin : null;
1271
1319
  add(remove ? "remove" : name === "touch" ? "create" : "write", token, state, {
1272
1320
  recursive: remove && strings.some((s) => /^-[^-]*[rR]/.test(s) || s === "--recursive"),
1273
- ...append ? { append: true } : {}
1321
+ ...append ? { append: true } : {},
1322
+ ...teed !== null ? { text: teed } : {}
1274
1323
  });
1275
1324
  }
1276
1325
  return;
@@ -1592,11 +1641,18 @@ function collectShellFileAccesses(command, context = {}) {
1592
1641
  if (stmt.Background) state = clone(state);
1593
1642
  const headWord = stmt.Cmd && stmt.Cmd.kind === "CallExpr" ? base(resolveWordLiteral(stmt.Cmd.Args?.[0])) : "";
1594
1643
  const sends = SENDING_STDIN.has(headWord);
1644
+ let produced;
1595
1645
  for (const redir of stmt.Redirs ?? []) {
1596
1646
  substitutions(redir.Word, state, depth);
1597
1647
  for (const word of wordValues(redir.Word, state)) {
1598
- if (ops().WRITES.has(redir.Op))
1599
- add("write", word, state, ops().APPENDS.has(redir.Op) ? { append: true } : {});
1648
+ if (ops().WRITES.has(redir.Op)) {
1649
+ if (ops().APPENDS.has(redir.Op)) add("write", word, state, { append: true });
1650
+ else {
1651
+ const stdout = redir.N == null || redir.N.Value === "1";
1652
+ if (stdout && produced === void 0) produced = producedText(stmt);
1653
+ add("write", word, state, stdout && produced ? { text: produced } : {});
1654
+ }
1655
+ }
1600
1656
  if (ops().READS.has(redir.Op)) add("read", word, state, sends ? { upload: true } : {});
1601
1657
  if (redir.Op === ops().DUP_OUT && word.value && !/^\d+$/.test(word.value))
1602
1658
  add("write", word, state);
@@ -1608,6 +1664,7 @@ function collectShellFileAccesses(command, context = {}) {
1608
1664
  stdinScript(stmt, state, depth);
1609
1665
  const fedText = stdinText(stmt);
1610
1666
  if (fedText !== null) nestedPayload(xargsPayload(stmt, fedText), clone(state), depth);
1667
+ currentStdin = fedText;
1611
1668
  switch (cmd.kind) {
1612
1669
  case "CallExpr":
1613
1670
  call(cmd, state, depth);
@@ -1721,6 +1778,26 @@ function collectShellFileAccesses(command, context = {}) {
1721
1778
  }
1722
1779
  return out;
1723
1780
  }
1781
+ function serviceNamedIn(text) {
1782
+ const re = new RegExp(SERVICE_WORD_RE.source, "gi");
1783
+ for (let m = re.exec(text); m; m = re.exec(text)) {
1784
+ const lower2 = m[1].toLowerCase();
1785
+ if (lower2 === "init" && !INIT_PATTERN_RE.test(text)) continue;
1786
+ return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? m[1];
1787
+ }
1788
+ return null;
1789
+ }
1790
+ function serviceOf(name) {
1791
+ const leaf = name.replace(/^.*[\\/]/, "").replace(/\.service$/, "").replace(/@.*$/, "");
1792
+ const lower2 = leaf.toLowerCase();
1793
+ return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? UNIT_ALIASES[lower2] ?? null;
1794
+ }
1795
+ function killsService(language, code2) {
1796
+ const api = KILL_API[language].exec(code2);
1797
+ if (!api) return null;
1798
+ const service = serviceNamedIn(code2);
1799
+ return service ? `${api[0].trim()} with ${service}` : null;
1800
+ }
1724
1801
  function inlineLanguageOf(interp) {
1725
1802
  const i = interp.toLowerCase();
1726
1803
  if (/^python[\d.]*$/.test(i)) return "python";
@@ -1795,6 +1872,15 @@ function judgeInlineCode(language, code2, isProtected) {
1795
1872
  return { outcome: "unreadable", what: "is too long for node9 to read" };
1796
1873
  }
1797
1874
  const text = language === "python" ? resolvePythonAliases(code2) : code2;
1875
+ const killed = killsService(language, text);
1876
+ if (killed) {
1877
+ return {
1878
+ outcome: "dangerous",
1879
+ what: WHAT["kills-service"],
1880
+ evidence: killed.slice(0, 60),
1881
+ category: "kills-service"
1882
+ };
1883
+ }
1798
1884
  for (const [category, re] of TABLES[language]) {
1799
1885
  const m = re.exec(text);
1800
1886
  if (!m) continue;
@@ -6641,8 +6727,16 @@ function evaluateGitHooksFileAccess(args, accesses, context, settings, shell) {
6641
6727
  disarms = true;
6642
6728
  how = "removed";
6643
6729
  } else if (texts === null) {
6644
- disarms = true;
6645
- how = "overwritten";
6730
+ if (access.edits) {
6731
+ disarms = access.edits.some(editDisarms);
6732
+ how = "edited to exit";
6733
+ } else if (access.text !== void 0) {
6734
+ disarms = hookTextRunsNothing(access.text);
6735
+ how = "emptied";
6736
+ } else {
6737
+ disarms = true;
6738
+ how = "overwritten";
6739
+ }
6646
6740
  } else if (texts.whole.length > 0) {
6647
6741
  disarms = texts.whole.some(hookTextRunsNothing);
6648
6742
  how = "emptied";
@@ -8474,6 +8568,118 @@ function scanArgumentSecrets(args) {
8474
8568
  severity: "review"
8475
8569
  } : null;
8476
8570
  }
8571
+ function shownOf2(words) {
8572
+ return words.map((w) => w ?? "$?").join(" ").slice(0, 80);
8573
+ }
8574
+ function withoutComments(command) {
8575
+ return command.split("\n").map((line) => {
8576
+ for (let i = 0; i < line.length; i++) {
8577
+ if (line[i] === "#" && (i === 0 || line[i - 1] === " " || line[i - 1] === " ")) {
8578
+ return line.slice(0, i);
8579
+ }
8580
+ }
8581
+ return line;
8582
+ }).join("\n");
8583
+ }
8584
+ function detectSystemProcessStop(command, depth = 0) {
8585
+ if (!PRESCREEN_RE3.test(command)) return null;
8586
+ const named = serviceNamedIn(withoutComments(command));
8587
+ let direct = null;
8588
+ let dynamicKill = null;
8589
+ walkCommandScope(command, (node) => {
8590
+ const n = node;
8591
+ if (direct || !n || n.kind !== "CallExpr") return true;
8592
+ const words = (n.Args || []).map((a) => resolveWordLiteral(a));
8593
+ if (words.length === 0) return true;
8594
+ if (baseWord(words[0]) === "xargs" && words.some((w) => w !== null && baseWord(w) === "kill")) {
8595
+ dynamicKill ??= shownOf2(words);
8596
+ return true;
8597
+ }
8598
+ if (depth < MAX_PAYLOAD_DEPTH5) {
8599
+ const payload = literalShellPayload(words, baseWord(words[0]));
8600
+ if (payload !== null) {
8601
+ const inner = detectSystemProcessStop(payload, depth + 1);
8602
+ if (inner) direct = inner;
8603
+ return true;
8604
+ }
8605
+ }
8606
+ const head = unwrapCommandHead(words);
8607
+ if (head >= words.length) return true;
8608
+ const name = baseWord(words[head]);
8609
+ const rest = words.slice(head + 1);
8610
+ const shown = shownOf2(words);
8611
+ const viaXargs = words.slice(0, head).some((w) => w !== null && baseWord(w) === "xargs");
8612
+ if (name === "kill") {
8613
+ const targets = [];
8614
+ for (let i = 0; i < rest.length; i++) {
8615
+ const w = rest[i];
8616
+ if (i === 0 && w !== null && KILL_SIGNAL_RE.test(w)) {
8617
+ if (w === "-s") i++;
8618
+ continue;
8619
+ }
8620
+ if (w === "--") continue;
8621
+ targets.push(w);
8622
+ }
8623
+ if (targets.some((t) => t === "1" || t === "-1")) {
8624
+ direct = { service: "init (pid 1)", how: "kills", shown };
8625
+ } else if (viaXargs || targets.some((t) => t === null)) {
8626
+ dynamicKill ??= shown;
8627
+ }
8628
+ return true;
8629
+ }
8630
+ if (name === "pkill" || name === "killall") {
8631
+ let skipValue = false;
8632
+ for (const w of rest) {
8633
+ if (skipValue) {
8634
+ skipValue = false;
8635
+ continue;
8636
+ }
8637
+ if (w !== null && w.startsWith("-")) {
8638
+ if (/^-(?:u|U|g|G|t|P|s|n|o|r|q|-signal|-uid|-user)$/.test(w)) skipValue = true;
8639
+ continue;
8640
+ }
8641
+ if (w === null) {
8642
+ dynamicKill ??= shown;
8643
+ continue;
8644
+ }
8645
+ const service = serviceOf(w) ?? serviceNamedIn(w);
8646
+ if (service) direct = { service, how: "kills", shown };
8647
+ }
8648
+ return true;
8649
+ }
8650
+ if (name === "systemctl") {
8651
+ if (rest.includes("--user")) return true;
8652
+ const verb = rest.find((w) => w !== null && !w.startsWith("-"));
8653
+ if (verb === void 0 || verb === null || !SYSTEMCTL_STOP_VERBS.has(verb)) return true;
8654
+ for (const w of rest.slice(rest.indexOf(verb) + 1)) {
8655
+ const service = w === null ? null : serviceOf(w);
8656
+ if (service) direct = { service, how: verb === "kill" ? "kills" : "stops", shown };
8657
+ }
8658
+ return true;
8659
+ }
8660
+ if (name === "service") {
8661
+ const [unit, verb] = rest;
8662
+ const service = typeof unit === "string" ? serviceOf(unit) : null;
8663
+ if (service && verb === "stop") direct = { service, how: "stops", shown };
8664
+ return true;
8665
+ }
8666
+ if (name === "launchctl") {
8667
+ const verb = rest.find((w) => w !== null && !w.startsWith("-"));
8668
+ if (verb === void 0 || verb === null || !LAUNCHCTL_UNLOAD_VERBS.has(verb)) return true;
8669
+ const daemon = rest.find((w) => w !== null && LAUNCH_DAEMONS_RE.test(w));
8670
+ if (daemon) {
8671
+ direct = { service: daemon.replace(/^.*\//, ""), how: "unloads the system daemon", shown };
8672
+ }
8673
+ return true;
8674
+ }
8675
+ return true;
8676
+ });
8677
+ if (direct) return direct;
8678
+ if (dynamicKill !== null && named) {
8679
+ return { service: named, how: "kills the processes of", shown: dynamicKill };
8680
+ }
8681
+ return null;
8682
+ }
8477
8683
  function patternSelects(pattern, targets) {
8478
8684
  const pieces = pattern.toLowerCase().split(/[\\^$.*+?()[\]{}|]+/).filter(Boolean);
8479
8685
  if (pieces.length === 0) return false;
@@ -9093,6 +9299,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
9093
9299
  checkId: "commands.eval-dynamic"
9094
9300
  });
9095
9301
  }
9302
+ const stopped = detectSystemProcessStop(shellCommand);
9303
+ if (stopped) {
9304
+ consider("commands.system-processes", {
9305
+ decision: "review",
9306
+ blockedByLabel: "Node9: System Service Stopped",
9307
+ reason: `The AI ${stopped.how} ${stopped.service}: ${stopped.shown}`,
9308
+ 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.",
9309
+ tier: 3,
9310
+ checkId: "commands.system-processes"
9311
+ });
9312
+ }
9096
9313
  const builtin = strictestVerdict(candidates);
9097
9314
  if (builtin) return builtin;
9098
9315
  {
@@ -10182,7 +10399,7 @@ function matchCanaryArgs(args, values) {
10182
10399
  return null;
10183
10400
  }
10184
10401
  }
10185
- var getFilename2, __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, POSTURE_CATEGORY_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, ENCODED_RUN_RE, 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, CANONICAL_EXTRACTOR_VERSION;
10402
+ var getFilename2, __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, POSTURE_CATEGORY_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, ENCODED_RUN_RE, 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, CANONICAL_EXTRACTOR_VERSION;
10186
10403
  var init_dist = __esm({
10187
10404
  "packages/policy-engine/dist/index.mjs"() {
10188
10405
  "use strict";
@@ -12057,6 +12274,11 @@ var init_dist = __esm({
12057
12274
  example: "/tmp/build-helper --serve",
12058
12275
  advice: "Keep Review. Malware often runs from /tmp."
12059
12276
  },
12277
+ "commands.system-processes": {
12278
+ 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.",
12279
+ example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
12280
+ 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."
12281
+ },
12060
12282
  "commands.disk-destroy": {
12061
12283
  plain: "The agent formats, overwrites or securely erases a disk or file.",
12062
12284
  example: "dd if=/dev/zero of=/dev/sda",
@@ -12226,6 +12448,7 @@ var init_dist = __esm({
12226
12448
  "commands.sql-no-where": "log",
12227
12449
  "commands.temp-binary": "log",
12228
12450
  "commands.disk-destroy": "log",
12451
+ "commands.system-processes": "log",
12229
12452
  "commands.dangerous-word": "log",
12230
12453
  "files.system-dirs": "log",
12231
12454
  "files.shell-startup": "log",
@@ -12564,6 +12787,16 @@ var init_dist = __esm({
12564
12787
  defaultValue: "review",
12565
12788
  legacy: ["Manual Nuclear Protection"]
12566
12789
  },
12790
+ {
12791
+ id: "commands.system-processes",
12792
+ group: "commands",
12793
+ owasp: "ASI02",
12794
+ title: "Stops a system service",
12795
+ 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",
12796
+ values: ALL,
12797
+ defaultValue: "review",
12798
+ legacy: ["Node9: System Service Stopped"]
12799
+ },
12567
12800
  {
12568
12801
  id: "commands.dangerous-word",
12569
12802
  group: "commands",
@@ -13223,6 +13456,82 @@ var init_dist = __esm({
13223
13456
  )
13224
13457
  )
13225
13458
  }));
13459
+ INFRASTRUCTURE_SERVICES = [
13460
+ "init",
13461
+ "sshd",
13462
+ "dockerd",
13463
+ "docker-proxy",
13464
+ "containerd",
13465
+ "containerd-shim",
13466
+ "docker-containerd-shim",
13467
+ "runc",
13468
+ "systemd-journald",
13469
+ "journald",
13470
+ "systemd-logind",
13471
+ "systemd-udevd",
13472
+ "udevd",
13473
+ "dbus-daemon",
13474
+ "polkitd",
13475
+ "sssd",
13476
+ "kubelet",
13477
+ "kube-apiserver",
13478
+ "crond",
13479
+ "cron",
13480
+ "atd",
13481
+ "auditd",
13482
+ "rsyslogd",
13483
+ "syslogd",
13484
+ "chronyd",
13485
+ "ntpd",
13486
+ "NetworkManager",
13487
+ "wpa_supplicant",
13488
+ "dhclient",
13489
+ "avahi-daemon",
13490
+ "firewalld",
13491
+ "ufw",
13492
+ "cupsd",
13493
+ "snapd",
13494
+ "bluetoothd",
13495
+ "Xorg",
13496
+ "Xwayland",
13497
+ "gdm",
13498
+ "sddm",
13499
+ "lightdm"
13500
+ ];
13501
+ SERVER_SERVICES = [
13502
+ "nginx",
13503
+ "apache2",
13504
+ "httpd",
13505
+ "mysqld",
13506
+ "mariadbd",
13507
+ "postgres",
13508
+ "postgresql",
13509
+ "redis-server",
13510
+ "mongod"
13511
+ ];
13512
+ SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
13513
+ escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
13514
+ SERVICE_WORD_RE = new RegExp(
13515
+ `(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
13516
+ "i"
13517
+ );
13518
+ INIT_PATTERN_RE = /(?:["'*])init(?:["'*])/;
13519
+ UNIT_ALIASES = {
13520
+ docker: "dockerd",
13521
+ ssh: "sshd",
13522
+ mysql: "mysqld",
13523
+ mariadb: "mariadbd",
13524
+ redis: "redis-server",
13525
+ mongodb: "mongod",
13526
+ apache: "apache2",
13527
+ rsyslog: "rsyslogd",
13528
+ "systemd-networkd": "systemd-udevd",
13529
+ dbus: "dbus-daemon",
13530
+ avahi: "avahi-daemon",
13531
+ bluetooth: "bluetoothd",
13532
+ cups: "cupsd",
13533
+ chrony: "chronyd"
13534
+ };
13226
13535
  MAX_INLINE_CODE = 64 * 1024;
13227
13536
  WHAT = {
13228
13537
  deletes: "deletes files",
@@ -13234,7 +13543,15 @@ var init_dist = __esm({
13234
13543
  "builds-code": "runs code it builds at run time",
13235
13544
  permissions: "changes permissions or ownership",
13236
13545
  monitors: "captures the screen, the clipboard or the keyboard",
13237
- amplifies: "writes or sends in an endless loop"
13546
+ amplifies: "writes or sends in an endless loop",
13547
+ "kills-service": "stops a system service"
13548
+ };
13549
+ KILL_API = {
13550
+ python: /\bos\.kill(?:pg)?\s*\(|\.(?:kill|terminate)\s*\(|\bsignal\.SIGKILL\b/,
13551
+ node: /\bprocess\.kill\s*\(|\.kill\s*\(\s*['"`]?SIG/,
13552
+ perl: /\bkill\s+(?:-?\d+|['"]?[A-Z]+['"]?)\s*,/,
13553
+ ruby: /\bProcess\.kill\b/,
13554
+ php: /\bposix_kill\s*\(/
13238
13555
  };
13239
13556
  OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
13240
13557
  pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
@@ -19126,6 +19443,7 @@ ${text}` : text);
19126
19443
  "commands.sql-no-where",
19127
19444
  "commands.temp-binary",
19128
19445
  "commands.disk-destroy",
19446
+ "commands.system-processes",
19129
19447
  "commands.dangerous-word",
19130
19448
  "commands.node9-disarm",
19131
19449
  "commands.reverse-shell",
@@ -19340,6 +19658,12 @@ ${text}` : text);
19340
19658
  const char = value[index] ?? "";
19341
19659
  return RUN_CHAR.test(char) || char !== "" && isInvisibleChar(char);
19342
19660
  };
19661
+ PRESCREEN_RE3 = /\b(?:kill|pkill|killall|systemctl|service|launchctl|xargs)\b/;
19662
+ KILL_SIGNAL_RE = /^-(?:\d+|s|SIG[A-Z]+|[A-Z]{2,})$/;
19663
+ SYSTEMCTL_STOP_VERBS = /* @__PURE__ */ new Set(["stop", "kill", "disable", "mask"]);
19664
+ LAUNCHCTL_UNLOAD_VERBS = /* @__PURE__ */ new Set(["unload", "bootout", "remove"]);
19665
+ LAUNCH_DAEMONS_RE = /(?:^|\/)(?:System\/)?Library\/LaunchDaemons\//;
19666
+ MAX_PAYLOAD_DEPTH5 = 3;
19343
19667
  RULE_NAME2 = "review-node9-disarm";
19344
19668
  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.";
19345
19669
  DAEMON_CMDLINES = [