@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/cli-main.js +340 -14
- package/dist/dashboard.mjs +337 -13
- package/dist/hook.js +337 -13
- package/dist/index.js +337 -13
- package/dist/index.mjs +337 -13
- package/dist/scan-ink.mjs +75 -0
- package/package.json +1 -1
package/dist/hook.js
CHANGED
|
@@ -903,12 +903,46 @@ function wordValues(word, state) {
|
|
|
903
903
|
if (!dynamic) return out.map(asWord);
|
|
904
904
|
return out.filter((piece) => piece.value !== "").map((piece) => ({ value: piece.value, pattern: piece.pattern + "*", dynamic: true }));
|
|
905
905
|
}
|
|
906
|
+
function sedSubstitutions(script) {
|
|
907
|
+
const out = [];
|
|
908
|
+
for (const raw of script.split(/\r?\n|;/)) {
|
|
909
|
+
const cmd = raw.trim();
|
|
910
|
+
if (cmd === "") continue;
|
|
911
|
+
const m = /^(?:(?:\d+|\$|\/(?:\\.|[^\\/])*\/)(?:,(?:\d+|\$|\/(?:\\.|[^\\/])*\/))?)?s(.)/.exec(
|
|
912
|
+
cmd
|
|
913
|
+
);
|
|
914
|
+
if (!m) return null;
|
|
915
|
+
const delimiter = m[1];
|
|
916
|
+
if (delimiter === "\\") return null;
|
|
917
|
+
const parts = [];
|
|
918
|
+
let cur = "";
|
|
919
|
+
let i = m[0].length;
|
|
920
|
+
for (; i < cmd.length && parts.length < 2; i++) {
|
|
921
|
+
const ch = cmd[i];
|
|
922
|
+
if (ch === "\\" && i + 1 < cmd.length) {
|
|
923
|
+
cur += ch + cmd[++i];
|
|
924
|
+
continue;
|
|
925
|
+
}
|
|
926
|
+
if (ch === delimiter) {
|
|
927
|
+
parts.push(cur);
|
|
928
|
+
cur = "";
|
|
929
|
+
continue;
|
|
930
|
+
}
|
|
931
|
+
cur += ch;
|
|
932
|
+
}
|
|
933
|
+
if (parts.length < 2) return null;
|
|
934
|
+
if (!/^[gpiImM0-9]*$/.test(cmd.slice(i))) return null;
|
|
935
|
+
out.push(parts[1].replace(/\\(.)/g, "$1"));
|
|
936
|
+
}
|
|
937
|
+
return out.length > 0 ? out : null;
|
|
938
|
+
}
|
|
906
939
|
function collectShellFileAccesses(command, context = {}) {
|
|
907
940
|
const out = [];
|
|
908
941
|
let payloads = 256;
|
|
909
942
|
const functions = /* @__PURE__ */ new Map();
|
|
910
943
|
const seenCalls = /* @__PURE__ */ new Set();
|
|
911
944
|
const pipedStdin = /* @__PURE__ */ new WeakMap();
|
|
945
|
+
let currentStdin = null;
|
|
912
946
|
let callWalks2 = MAX_CALL_WALKS;
|
|
913
947
|
const initial = {
|
|
914
948
|
cwd: [context.cwd ?? ""],
|
|
@@ -1003,8 +1037,9 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1003
1037
|
}
|
|
1004
1038
|
const locate = (p) => tokens.find((w) => w?.value === p) ?? { value: p };
|
|
1005
1039
|
if (name === "sed") {
|
|
1006
|
-
let inplace = false, hasScript = false, ended = false;
|
|
1040
|
+
let inplace = false, hasScript = false, ended = false, scriptUnknown = false;
|
|
1007
1041
|
const files = [];
|
|
1042
|
+
const scriptParts = [];
|
|
1008
1043
|
for (let i = 0; i < args.length; i++) {
|
|
1009
1044
|
const token = args[i];
|
|
1010
1045
|
if (!token) {
|
|
@@ -1022,7 +1057,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1022
1057
|
hasScript = true;
|
|
1023
1058
|
const eq = value.indexOf("=");
|
|
1024
1059
|
const script = eq < 0 ? args[++i] : { value: value.slice(eq + 1) };
|
|
1025
|
-
if (value.startsWith("--file")
|
|
1060
|
+
if (value.startsWith("--file")) {
|
|
1061
|
+
scriptUnknown = true;
|
|
1062
|
+
if (script) add("read", script, state);
|
|
1063
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1064
|
+
else scriptUnknown = true;
|
|
1026
1065
|
}
|
|
1027
1066
|
continue;
|
|
1028
1067
|
}
|
|
@@ -1037,7 +1076,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1037
1076
|
if (flag === "e" || flag === "f") {
|
|
1038
1077
|
hasScript = true;
|
|
1039
1078
|
const script = value.slice(j + 1) ? { value: value.slice(j + 1) } : args[++i];
|
|
1040
|
-
if (flag === "f"
|
|
1079
|
+
if (flag === "f") {
|
|
1080
|
+
scriptUnknown = true;
|
|
1081
|
+
if (script) add("read", script, state);
|
|
1082
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1083
|
+
else scriptUnknown = true;
|
|
1041
1084
|
break;
|
|
1042
1085
|
}
|
|
1043
1086
|
if (flag === "l") {
|
|
@@ -1047,10 +1090,14 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1047
1090
|
}
|
|
1048
1091
|
continue;
|
|
1049
1092
|
}
|
|
1050
|
-
if (!hasScript)
|
|
1051
|
-
|
|
1093
|
+
if (!hasScript) {
|
|
1094
|
+
hasScript = true;
|
|
1095
|
+
scriptParts.push(value);
|
|
1096
|
+
} else files.push(token);
|
|
1052
1097
|
}
|
|
1053
|
-
|
|
1098
|
+
const edits = inplace && !scriptUnknown ? sedSubstitutions(scriptParts.join("\n")) : null;
|
|
1099
|
+
for (const file2 of files)
|
|
1100
|
+
add(inplace ? "write" : "read", file2, state, edits ? { edits } : {});
|
|
1054
1101
|
return;
|
|
1055
1102
|
}
|
|
1056
1103
|
if (FS_READ_TOOLS.has(name) && name !== "dd") {
|
|
@@ -1177,9 +1224,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1177
1224
|
continue;
|
|
1178
1225
|
const remove = name === "rm" || name === "unlink";
|
|
1179
1226
|
const append = name === "tee" && strings.some((s) => s === "--append" || /^-[^-]*a/.test(s));
|
|
1227
|
+
const teed = name === "tee" && !append ? currentStdin : null;
|
|
1180
1228
|
add(remove ? "remove" : name === "touch" ? "create" : "write", token, state, {
|
|
1181
1229
|
recursive: remove && strings.some((s) => /^-[^-]*[rR]/.test(s) || s === "--recursive"),
|
|
1182
|
-
...append ? { append: true } : {}
|
|
1230
|
+
...append ? { append: true } : {},
|
|
1231
|
+
...teed !== null ? { text: teed } : {}
|
|
1183
1232
|
});
|
|
1184
1233
|
}
|
|
1185
1234
|
return;
|
|
@@ -1501,11 +1550,18 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1501
1550
|
if (stmt.Background) state = clone(state);
|
|
1502
1551
|
const headWord = stmt.Cmd && stmt.Cmd.kind === "CallExpr" ? base(resolveWordLiteral(stmt.Cmd.Args?.[0])) : "";
|
|
1503
1552
|
const sends = SENDING_STDIN.has(headWord);
|
|
1553
|
+
let produced;
|
|
1504
1554
|
for (const redir of stmt.Redirs ?? []) {
|
|
1505
1555
|
substitutions(redir.Word, state, depth);
|
|
1506
1556
|
for (const word of wordValues(redir.Word, state)) {
|
|
1507
|
-
if (ops().WRITES.has(redir.Op))
|
|
1508
|
-
|
|
1557
|
+
if (ops().WRITES.has(redir.Op)) {
|
|
1558
|
+
if (ops().APPENDS.has(redir.Op)) add("write", word, state, { append: true });
|
|
1559
|
+
else {
|
|
1560
|
+
const stdout = redir.N == null || redir.N.Value === "1";
|
|
1561
|
+
if (stdout && produced === void 0) produced = producedText(stmt);
|
|
1562
|
+
add("write", word, state, stdout && produced ? { text: produced } : {});
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1509
1565
|
if (ops().READS.has(redir.Op)) add("read", word, state, sends ? { upload: true } : {});
|
|
1510
1566
|
if (redir.Op === ops().DUP_OUT && word.value && !/^\d+$/.test(word.value))
|
|
1511
1567
|
add("write", word, state);
|
|
@@ -1517,6 +1573,7 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1517
1573
|
stdinScript(stmt, state, depth);
|
|
1518
1574
|
const fedText = stdinText(stmt);
|
|
1519
1575
|
if (fedText !== null) nestedPayload(xargsPayload(stmt, fedText), clone(state), depth);
|
|
1576
|
+
currentStdin = fedText;
|
|
1520
1577
|
switch (cmd.kind) {
|
|
1521
1578
|
case "CallExpr":
|
|
1522
1579
|
call(cmd, state, depth);
|
|
@@ -1630,6 +1687,26 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1630
1687
|
}
|
|
1631
1688
|
return out;
|
|
1632
1689
|
}
|
|
1690
|
+
function serviceNamedIn(text) {
|
|
1691
|
+
const re = new RegExp(SERVICE_WORD_RE.source, "gi");
|
|
1692
|
+
for (let m = re.exec(text); m; m = re.exec(text)) {
|
|
1693
|
+
const lower2 = m[1].toLowerCase();
|
|
1694
|
+
if (lower2 === "init" && !INIT_PATTERN_RE.test(text)) continue;
|
|
1695
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? m[1];
|
|
1696
|
+
}
|
|
1697
|
+
return null;
|
|
1698
|
+
}
|
|
1699
|
+
function serviceOf(name) {
|
|
1700
|
+
const leaf = name.replace(/^.*[\\/]/, "").replace(/\.service$/, "").replace(/@.*$/, "");
|
|
1701
|
+
const lower2 = leaf.toLowerCase();
|
|
1702
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? UNIT_ALIASES[lower2] ?? null;
|
|
1703
|
+
}
|
|
1704
|
+
function killsService(language, code) {
|
|
1705
|
+
const api = KILL_API[language].exec(code);
|
|
1706
|
+
if (!api) return null;
|
|
1707
|
+
const service = serviceNamedIn(code);
|
|
1708
|
+
return service ? `${api[0].trim()} with ${service}` : null;
|
|
1709
|
+
}
|
|
1633
1710
|
function inlineLanguageOf(interp) {
|
|
1634
1711
|
const i = interp.toLowerCase();
|
|
1635
1712
|
if (/^python[\d.]*$/.test(i)) return "python";
|
|
@@ -1704,6 +1781,15 @@ function judgeInlineCode(language, code, isProtected) {
|
|
|
1704
1781
|
return { outcome: "unreadable", what: "is too long for node9 to read" };
|
|
1705
1782
|
}
|
|
1706
1783
|
const text = language === "python" ? resolvePythonAliases(code) : code;
|
|
1784
|
+
const killed = killsService(language, text);
|
|
1785
|
+
if (killed) {
|
|
1786
|
+
return {
|
|
1787
|
+
outcome: "dangerous",
|
|
1788
|
+
what: WHAT["kills-service"],
|
|
1789
|
+
evidence: killed.slice(0, 60),
|
|
1790
|
+
category: "kills-service"
|
|
1791
|
+
};
|
|
1792
|
+
}
|
|
1707
1793
|
for (const [category, re] of TABLES[language]) {
|
|
1708
1794
|
const m = re.exec(text);
|
|
1709
1795
|
if (!m) continue;
|
|
@@ -6644,8 +6730,16 @@ function evaluateGitHooksFileAccess(args, accesses, context, settings, shell) {
|
|
|
6644
6730
|
disarms = true;
|
|
6645
6731
|
how = "removed";
|
|
6646
6732
|
} else if (texts === null) {
|
|
6647
|
-
|
|
6648
|
-
|
|
6733
|
+
if (access.edits) {
|
|
6734
|
+
disarms = access.edits.some(editDisarms);
|
|
6735
|
+
how = "edited to exit";
|
|
6736
|
+
} else if (access.text !== void 0) {
|
|
6737
|
+
disarms = hookTextRunsNothing(access.text);
|
|
6738
|
+
how = "emptied";
|
|
6739
|
+
} else {
|
|
6740
|
+
disarms = true;
|
|
6741
|
+
how = "overwritten";
|
|
6742
|
+
}
|
|
6649
6743
|
} else if (texts.whole.length > 0) {
|
|
6650
6744
|
disarms = texts.whole.some(hookTextRunsNothing);
|
|
6651
6745
|
how = "emptied";
|
|
@@ -8477,6 +8571,118 @@ function scanArgumentSecrets(args) {
|
|
|
8477
8571
|
severity: "review"
|
|
8478
8572
|
} : null;
|
|
8479
8573
|
}
|
|
8574
|
+
function shownOf2(words) {
|
|
8575
|
+
return words.map((w) => w ?? "$?").join(" ").slice(0, 80);
|
|
8576
|
+
}
|
|
8577
|
+
function withoutComments(command) {
|
|
8578
|
+
return command.split("\n").map((line) => {
|
|
8579
|
+
for (let i = 0; i < line.length; i++) {
|
|
8580
|
+
if (line[i] === "#" && (i === 0 || line[i - 1] === " " || line[i - 1] === " ")) {
|
|
8581
|
+
return line.slice(0, i);
|
|
8582
|
+
}
|
|
8583
|
+
}
|
|
8584
|
+
return line;
|
|
8585
|
+
}).join("\n");
|
|
8586
|
+
}
|
|
8587
|
+
function detectSystemProcessStop(command, depth = 0) {
|
|
8588
|
+
if (!PRESCREEN_RE3.test(command)) return null;
|
|
8589
|
+
const named = serviceNamedIn(withoutComments(command));
|
|
8590
|
+
let direct = null;
|
|
8591
|
+
let dynamicKill = null;
|
|
8592
|
+
walkCommandScope(command, (node) => {
|
|
8593
|
+
const n = node;
|
|
8594
|
+
if (direct || !n || n.kind !== "CallExpr") return true;
|
|
8595
|
+
const words = (n.Args || []).map((a) => resolveWordLiteral(a));
|
|
8596
|
+
if (words.length === 0) return true;
|
|
8597
|
+
if (baseWord(words[0]) === "xargs" && words.some((w) => w !== null && baseWord(w) === "kill")) {
|
|
8598
|
+
dynamicKill ??= shownOf2(words);
|
|
8599
|
+
return true;
|
|
8600
|
+
}
|
|
8601
|
+
if (depth < MAX_PAYLOAD_DEPTH5) {
|
|
8602
|
+
const payload = literalShellPayload(words, baseWord(words[0]));
|
|
8603
|
+
if (payload !== null) {
|
|
8604
|
+
const inner = detectSystemProcessStop(payload, depth + 1);
|
|
8605
|
+
if (inner) direct = inner;
|
|
8606
|
+
return true;
|
|
8607
|
+
}
|
|
8608
|
+
}
|
|
8609
|
+
const head = unwrapCommandHead(words);
|
|
8610
|
+
if (head >= words.length) return true;
|
|
8611
|
+
const name = baseWord(words[head]);
|
|
8612
|
+
const rest = words.slice(head + 1);
|
|
8613
|
+
const shown = shownOf2(words);
|
|
8614
|
+
const viaXargs = words.slice(0, head).some((w) => w !== null && baseWord(w) === "xargs");
|
|
8615
|
+
if (name === "kill") {
|
|
8616
|
+
const targets = [];
|
|
8617
|
+
for (let i = 0; i < rest.length; i++) {
|
|
8618
|
+
const w = rest[i];
|
|
8619
|
+
if (i === 0 && w !== null && KILL_SIGNAL_RE.test(w)) {
|
|
8620
|
+
if (w === "-s") i++;
|
|
8621
|
+
continue;
|
|
8622
|
+
}
|
|
8623
|
+
if (w === "--") continue;
|
|
8624
|
+
targets.push(w);
|
|
8625
|
+
}
|
|
8626
|
+
if (targets.some((t) => t === "1" || t === "-1")) {
|
|
8627
|
+
direct = { service: "init (pid 1)", how: "kills", shown };
|
|
8628
|
+
} else if (viaXargs || targets.some((t) => t === null)) {
|
|
8629
|
+
dynamicKill ??= shown;
|
|
8630
|
+
}
|
|
8631
|
+
return true;
|
|
8632
|
+
}
|
|
8633
|
+
if (name === "pkill" || name === "killall") {
|
|
8634
|
+
let skipValue = false;
|
|
8635
|
+
for (const w of rest) {
|
|
8636
|
+
if (skipValue) {
|
|
8637
|
+
skipValue = false;
|
|
8638
|
+
continue;
|
|
8639
|
+
}
|
|
8640
|
+
if (w !== null && w.startsWith("-")) {
|
|
8641
|
+
if (/^-(?:u|U|g|G|t|P|s|n|o|r|q|-signal|-uid|-user)$/.test(w)) skipValue = true;
|
|
8642
|
+
continue;
|
|
8643
|
+
}
|
|
8644
|
+
if (w === null) {
|
|
8645
|
+
dynamicKill ??= shown;
|
|
8646
|
+
continue;
|
|
8647
|
+
}
|
|
8648
|
+
const service = serviceOf(w) ?? serviceNamedIn(w);
|
|
8649
|
+
if (service) direct = { service, how: "kills", shown };
|
|
8650
|
+
}
|
|
8651
|
+
return true;
|
|
8652
|
+
}
|
|
8653
|
+
if (name === "systemctl") {
|
|
8654
|
+
if (rest.includes("--user")) return true;
|
|
8655
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8656
|
+
if (verb === void 0 || verb === null || !SYSTEMCTL_STOP_VERBS.has(verb)) return true;
|
|
8657
|
+
for (const w of rest.slice(rest.indexOf(verb) + 1)) {
|
|
8658
|
+
const service = w === null ? null : serviceOf(w);
|
|
8659
|
+
if (service) direct = { service, how: verb === "kill" ? "kills" : "stops", shown };
|
|
8660
|
+
}
|
|
8661
|
+
return true;
|
|
8662
|
+
}
|
|
8663
|
+
if (name === "service") {
|
|
8664
|
+
const [unit, verb] = rest;
|
|
8665
|
+
const service = typeof unit === "string" ? serviceOf(unit) : null;
|
|
8666
|
+
if (service && verb === "stop") direct = { service, how: "stops", shown };
|
|
8667
|
+
return true;
|
|
8668
|
+
}
|
|
8669
|
+
if (name === "launchctl") {
|
|
8670
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8671
|
+
if (verb === void 0 || verb === null || !LAUNCHCTL_UNLOAD_VERBS.has(verb)) return true;
|
|
8672
|
+
const daemon = rest.find((w) => w !== null && LAUNCH_DAEMONS_RE.test(w));
|
|
8673
|
+
if (daemon) {
|
|
8674
|
+
direct = { service: daemon.replace(/^.*\//, ""), how: "unloads the system daemon", shown };
|
|
8675
|
+
}
|
|
8676
|
+
return true;
|
|
8677
|
+
}
|
|
8678
|
+
return true;
|
|
8679
|
+
});
|
|
8680
|
+
if (direct) return direct;
|
|
8681
|
+
if (dynamicKill !== null && named) {
|
|
8682
|
+
return { service: named, how: "kills the processes of", shown: dynamicKill };
|
|
8683
|
+
}
|
|
8684
|
+
return null;
|
|
8685
|
+
}
|
|
8480
8686
|
function patternSelects(pattern, targets) {
|
|
8481
8687
|
const pieces = pattern.toLowerCase().split(/[\\^$.*+?()[\]{}|]+/).filter(Boolean);
|
|
8482
8688
|
if (pieces.length === 0) return false;
|
|
@@ -9096,6 +9302,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
|
|
|
9096
9302
|
checkId: "commands.eval-dynamic"
|
|
9097
9303
|
});
|
|
9098
9304
|
}
|
|
9305
|
+
const stopped = detectSystemProcessStop(shellCommand);
|
|
9306
|
+
if (stopped) {
|
|
9307
|
+
consider("commands.system-processes", {
|
|
9308
|
+
decision: "review",
|
|
9309
|
+
blockedByLabel: "Node9: System Service Stopped",
|
|
9310
|
+
reason: `The AI ${stopped.how} ${stopped.service}: ${stopped.shown}`,
|
|
9311
|
+
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.",
|
|
9312
|
+
tier: 3,
|
|
9313
|
+
checkId: "commands.system-processes"
|
|
9314
|
+
});
|
|
9315
|
+
}
|
|
9099
9316
|
const builtin = strictestVerdict(candidates);
|
|
9100
9317
|
if (builtin) return builtin;
|
|
9101
9318
|
{
|
|
@@ -10177,7 +10394,7 @@ function matchCanaryArgs(args, values) {
|
|
|
10177
10394
|
return null;
|
|
10178
10395
|
}
|
|
10179
10396
|
}
|
|
10180
|
-
var import_url, import_picomatch, import_safe_regex2, import_picomatch2, import_module, import_picomatch3, import_safe_regex22, import_crypto, import_crypto2, import_crypto3, import_crypto4, 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, DLP_SCAN_LIMITS, 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, CONTROL_CHAR_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;
|
|
10397
|
+
var import_url, import_picomatch, import_safe_regex2, import_picomatch2, import_module, import_picomatch3, import_safe_regex22, import_crypto, import_crypto2, import_crypto3, import_crypto4, 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, DLP_SCAN_LIMITS, 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, CONTROL_CHAR_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;
|
|
10181
10398
|
var init_dist = __esm({
|
|
10182
10399
|
"packages/policy-engine/dist/index.mjs"() {
|
|
10183
10400
|
"use strict";
|
|
@@ -12063,6 +12280,11 @@ var init_dist = __esm({
|
|
|
12063
12280
|
example: "/tmp/build-helper --serve",
|
|
12064
12281
|
advice: "Keep Review. Malware often runs from /tmp."
|
|
12065
12282
|
},
|
|
12283
|
+
"commands.system-processes": {
|
|
12284
|
+
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.",
|
|
12285
|
+
example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
|
|
12286
|
+
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."
|
|
12287
|
+
},
|
|
12066
12288
|
"commands.disk-destroy": {
|
|
12067
12289
|
plain: "The agent formats, overwrites or securely erases a disk or file.",
|
|
12068
12290
|
example: "dd if=/dev/zero of=/dev/sda",
|
|
@@ -12232,6 +12454,7 @@ var init_dist = __esm({
|
|
|
12232
12454
|
"commands.sql-no-where": "log",
|
|
12233
12455
|
"commands.temp-binary": "log",
|
|
12234
12456
|
"commands.disk-destroy": "log",
|
|
12457
|
+
"commands.system-processes": "log",
|
|
12235
12458
|
"commands.dangerous-word": "log",
|
|
12236
12459
|
"files.system-dirs": "log",
|
|
12237
12460
|
"files.shell-startup": "log",
|
|
@@ -12550,6 +12773,16 @@ var init_dist = __esm({
|
|
|
12550
12773
|
defaultValue: "review",
|
|
12551
12774
|
legacy: ["Manual Nuclear Protection"]
|
|
12552
12775
|
},
|
|
12776
|
+
{
|
|
12777
|
+
id: "commands.system-processes",
|
|
12778
|
+
group: "commands",
|
|
12779
|
+
owasp: "ASI02",
|
|
12780
|
+
title: "Stops a system service",
|
|
12781
|
+
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",
|
|
12782
|
+
values: ALL,
|
|
12783
|
+
defaultValue: "review",
|
|
12784
|
+
legacy: ["Node9: System Service Stopped"]
|
|
12785
|
+
},
|
|
12553
12786
|
{
|
|
12554
12787
|
id: "commands.dangerous-word",
|
|
12555
12788
|
group: "commands",
|
|
@@ -13209,6 +13442,82 @@ var init_dist = __esm({
|
|
|
13209
13442
|
)
|
|
13210
13443
|
)
|
|
13211
13444
|
}));
|
|
13445
|
+
INFRASTRUCTURE_SERVICES = [
|
|
13446
|
+
"init",
|
|
13447
|
+
"sshd",
|
|
13448
|
+
"dockerd",
|
|
13449
|
+
"docker-proxy",
|
|
13450
|
+
"containerd",
|
|
13451
|
+
"containerd-shim",
|
|
13452
|
+
"docker-containerd-shim",
|
|
13453
|
+
"runc",
|
|
13454
|
+
"systemd-journald",
|
|
13455
|
+
"journald",
|
|
13456
|
+
"systemd-logind",
|
|
13457
|
+
"systemd-udevd",
|
|
13458
|
+
"udevd",
|
|
13459
|
+
"dbus-daemon",
|
|
13460
|
+
"polkitd",
|
|
13461
|
+
"sssd",
|
|
13462
|
+
"kubelet",
|
|
13463
|
+
"kube-apiserver",
|
|
13464
|
+
"crond",
|
|
13465
|
+
"cron",
|
|
13466
|
+
"atd",
|
|
13467
|
+
"auditd",
|
|
13468
|
+
"rsyslogd",
|
|
13469
|
+
"syslogd",
|
|
13470
|
+
"chronyd",
|
|
13471
|
+
"ntpd",
|
|
13472
|
+
"NetworkManager",
|
|
13473
|
+
"wpa_supplicant",
|
|
13474
|
+
"dhclient",
|
|
13475
|
+
"avahi-daemon",
|
|
13476
|
+
"firewalld",
|
|
13477
|
+
"ufw",
|
|
13478
|
+
"cupsd",
|
|
13479
|
+
"snapd",
|
|
13480
|
+
"bluetoothd",
|
|
13481
|
+
"Xorg",
|
|
13482
|
+
"Xwayland",
|
|
13483
|
+
"gdm",
|
|
13484
|
+
"sddm",
|
|
13485
|
+
"lightdm"
|
|
13486
|
+
];
|
|
13487
|
+
SERVER_SERVICES = [
|
|
13488
|
+
"nginx",
|
|
13489
|
+
"apache2",
|
|
13490
|
+
"httpd",
|
|
13491
|
+
"mysqld",
|
|
13492
|
+
"mariadbd",
|
|
13493
|
+
"postgres",
|
|
13494
|
+
"postgresql",
|
|
13495
|
+
"redis-server",
|
|
13496
|
+
"mongod"
|
|
13497
|
+
];
|
|
13498
|
+
SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
|
|
13499
|
+
escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
|
|
13500
|
+
SERVICE_WORD_RE = new RegExp(
|
|
13501
|
+
`(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
|
|
13502
|
+
"i"
|
|
13503
|
+
);
|
|
13504
|
+
INIT_PATTERN_RE = /(?:["'*])init(?:["'*])/;
|
|
13505
|
+
UNIT_ALIASES = {
|
|
13506
|
+
docker: "dockerd",
|
|
13507
|
+
ssh: "sshd",
|
|
13508
|
+
mysql: "mysqld",
|
|
13509
|
+
mariadb: "mariadbd",
|
|
13510
|
+
redis: "redis-server",
|
|
13511
|
+
mongodb: "mongod",
|
|
13512
|
+
apache: "apache2",
|
|
13513
|
+
rsyslog: "rsyslogd",
|
|
13514
|
+
"systemd-networkd": "systemd-udevd",
|
|
13515
|
+
dbus: "dbus-daemon",
|
|
13516
|
+
avahi: "avahi-daemon",
|
|
13517
|
+
bluetooth: "bluetoothd",
|
|
13518
|
+
cups: "cupsd",
|
|
13519
|
+
chrony: "chronyd"
|
|
13520
|
+
};
|
|
13212
13521
|
MAX_INLINE_CODE = 64 * 1024;
|
|
13213
13522
|
WHAT = {
|
|
13214
13523
|
deletes: "deletes files",
|
|
@@ -13220,7 +13529,15 @@ var init_dist = __esm({
|
|
|
13220
13529
|
"builds-code": "runs code it builds at run time",
|
|
13221
13530
|
permissions: "changes permissions or ownership",
|
|
13222
13531
|
monitors: "captures the screen, the clipboard or the keyboard",
|
|
13223
|
-
amplifies: "writes or sends in an endless loop"
|
|
13532
|
+
amplifies: "writes or sends in an endless loop",
|
|
13533
|
+
"kills-service": "stops a system service"
|
|
13534
|
+
};
|
|
13535
|
+
KILL_API = {
|
|
13536
|
+
python: /\bos\.kill(?:pg)?\s*\(|\.(?:kill|terminate)\s*\(|\bsignal\.SIGKILL\b/,
|
|
13537
|
+
node: /\bprocess\.kill\s*\(|\.kill\s*\(\s*['"`]?SIG/,
|
|
13538
|
+
perl: /\bkill\s+(?:-?\d+|['"]?[A-Z]+['"]?)\s*,/,
|
|
13539
|
+
ruby: /\bProcess\.kill\b/,
|
|
13540
|
+
php: /\bposix_kill\s*\(/
|
|
13224
13541
|
};
|
|
13225
13542
|
OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
|
|
13226
13543
|
pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
|
|
@@ -19119,6 +19436,7 @@ ${text}` : text);
|
|
|
19119
19436
|
"commands.sql-no-where",
|
|
19120
19437
|
"commands.temp-binary",
|
|
19121
19438
|
"commands.disk-destroy",
|
|
19439
|
+
"commands.system-processes",
|
|
19122
19440
|
"commands.dangerous-word",
|
|
19123
19441
|
"commands.node9-disarm",
|
|
19124
19442
|
"commands.reverse-shell",
|
|
@@ -19333,6 +19651,12 @@ ${text}` : text);
|
|
|
19333
19651
|
const char = value[index] ?? "";
|
|
19334
19652
|
return RUN_CHAR.test(char) || char !== "" && isInvisibleChar(char);
|
|
19335
19653
|
};
|
|
19654
|
+
PRESCREEN_RE3 = /\b(?:kill|pkill|killall|systemctl|service|launchctl|xargs)\b/;
|
|
19655
|
+
KILL_SIGNAL_RE = /^-(?:\d+|s|SIG[A-Z]+|[A-Z]{2,})$/;
|
|
19656
|
+
SYSTEMCTL_STOP_VERBS = /* @__PURE__ */ new Set(["stop", "kill", "disable", "mask"]);
|
|
19657
|
+
LAUNCHCTL_UNLOAD_VERBS = /* @__PURE__ */ new Set(["unload", "bootout", "remove"]);
|
|
19658
|
+
LAUNCH_DAEMONS_RE = /(?:^|\/)(?:System\/)?Library\/LaunchDaemons\//;
|
|
19659
|
+
MAX_PAYLOAD_DEPTH5 = 3;
|
|
19336
19660
|
RULE_NAME2 = "review-node9-disarm";
|
|
19337
19661
|
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.";
|
|
19338
19662
|
DAEMON_CMDLINES = [
|