@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/index.mjs
CHANGED
|
@@ -944,12 +944,46 @@ function wordValues(word, state) {
|
|
|
944
944
|
if (!dynamic) return out.map(asWord);
|
|
945
945
|
return out.filter((piece) => piece.value !== "").map((piece) => ({ value: piece.value, pattern: piece.pattern + "*", dynamic: true }));
|
|
946
946
|
}
|
|
947
|
+
function sedSubstitutions(script) {
|
|
948
|
+
const out = [];
|
|
949
|
+
for (const raw of script.split(/\r?\n|;/)) {
|
|
950
|
+
const cmd = raw.trim();
|
|
951
|
+
if (cmd === "") continue;
|
|
952
|
+
const m = /^(?:(?:\d+|\$|\/(?:\\.|[^\\/])*\/)(?:,(?:\d+|\$|\/(?:\\.|[^\\/])*\/))?)?s(.)/.exec(
|
|
953
|
+
cmd
|
|
954
|
+
);
|
|
955
|
+
if (!m) return null;
|
|
956
|
+
const delimiter = m[1];
|
|
957
|
+
if (delimiter === "\\") return null;
|
|
958
|
+
const parts = [];
|
|
959
|
+
let cur = "";
|
|
960
|
+
let i = m[0].length;
|
|
961
|
+
for (; i < cmd.length && parts.length < 2; i++) {
|
|
962
|
+
const ch = cmd[i];
|
|
963
|
+
if (ch === "\\" && i + 1 < cmd.length) {
|
|
964
|
+
cur += ch + cmd[++i];
|
|
965
|
+
continue;
|
|
966
|
+
}
|
|
967
|
+
if (ch === delimiter) {
|
|
968
|
+
parts.push(cur);
|
|
969
|
+
cur = "";
|
|
970
|
+
continue;
|
|
971
|
+
}
|
|
972
|
+
cur += ch;
|
|
973
|
+
}
|
|
974
|
+
if (parts.length < 2) return null;
|
|
975
|
+
if (!/^[gpiImM0-9]*$/.test(cmd.slice(i))) return null;
|
|
976
|
+
out.push(parts[1].replace(/\\(.)/g, "$1"));
|
|
977
|
+
}
|
|
978
|
+
return out.length > 0 ? out : null;
|
|
979
|
+
}
|
|
947
980
|
function collectShellFileAccesses(command, context = {}) {
|
|
948
981
|
const out = [];
|
|
949
982
|
let payloads = 256;
|
|
950
983
|
const functions = /* @__PURE__ */ new Map();
|
|
951
984
|
const seenCalls = /* @__PURE__ */ new Set();
|
|
952
985
|
const pipedStdin = /* @__PURE__ */ new WeakMap();
|
|
986
|
+
let currentStdin = null;
|
|
953
987
|
let callWalks2 = MAX_CALL_WALKS;
|
|
954
988
|
const initial = {
|
|
955
989
|
cwd: [context.cwd ?? ""],
|
|
@@ -1044,8 +1078,9 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1044
1078
|
}
|
|
1045
1079
|
const locate = (p) => tokens.find((w) => w?.value === p) ?? { value: p };
|
|
1046
1080
|
if (name === "sed") {
|
|
1047
|
-
let inplace = false, hasScript = false, ended = false;
|
|
1081
|
+
let inplace = false, hasScript = false, ended = false, scriptUnknown = false;
|
|
1048
1082
|
const files = [];
|
|
1083
|
+
const scriptParts = [];
|
|
1049
1084
|
for (let i = 0; i < args.length; i++) {
|
|
1050
1085
|
const token = args[i];
|
|
1051
1086
|
if (!token) {
|
|
@@ -1063,7 +1098,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1063
1098
|
hasScript = true;
|
|
1064
1099
|
const eq = value.indexOf("=");
|
|
1065
1100
|
const script = eq < 0 ? args[++i] : { value: value.slice(eq + 1) };
|
|
1066
|
-
if (value.startsWith("--file")
|
|
1101
|
+
if (value.startsWith("--file")) {
|
|
1102
|
+
scriptUnknown = true;
|
|
1103
|
+
if (script) add("read", script, state);
|
|
1104
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1105
|
+
else scriptUnknown = true;
|
|
1067
1106
|
}
|
|
1068
1107
|
continue;
|
|
1069
1108
|
}
|
|
@@ -1078,7 +1117,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1078
1117
|
if (flag === "e" || flag === "f") {
|
|
1079
1118
|
hasScript = true;
|
|
1080
1119
|
const script = value.slice(j + 1) ? { value: value.slice(j + 1) } : args[++i];
|
|
1081
|
-
if (flag === "f"
|
|
1120
|
+
if (flag === "f") {
|
|
1121
|
+
scriptUnknown = true;
|
|
1122
|
+
if (script) add("read", script, state);
|
|
1123
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1124
|
+
else scriptUnknown = true;
|
|
1082
1125
|
break;
|
|
1083
1126
|
}
|
|
1084
1127
|
if (flag === "l") {
|
|
@@ -1088,10 +1131,14 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1088
1131
|
}
|
|
1089
1132
|
continue;
|
|
1090
1133
|
}
|
|
1091
|
-
if (!hasScript)
|
|
1092
|
-
|
|
1134
|
+
if (!hasScript) {
|
|
1135
|
+
hasScript = true;
|
|
1136
|
+
scriptParts.push(value);
|
|
1137
|
+
} else files.push(token);
|
|
1093
1138
|
}
|
|
1094
|
-
|
|
1139
|
+
const edits = inplace && !scriptUnknown ? sedSubstitutions(scriptParts.join("\n")) : null;
|
|
1140
|
+
for (const file2 of files)
|
|
1141
|
+
add(inplace ? "write" : "read", file2, state, edits ? { edits } : {});
|
|
1095
1142
|
return;
|
|
1096
1143
|
}
|
|
1097
1144
|
if (FS_READ_TOOLS.has(name) && name !== "dd") {
|
|
@@ -1218,9 +1265,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1218
1265
|
continue;
|
|
1219
1266
|
const remove = name === "rm" || name === "unlink";
|
|
1220
1267
|
const append = name === "tee" && strings.some((s) => s === "--append" || /^-[^-]*a/.test(s));
|
|
1268
|
+
const teed = name === "tee" && !append ? currentStdin : null;
|
|
1221
1269
|
add(remove ? "remove" : name === "touch" ? "create" : "write", token, state, {
|
|
1222
1270
|
recursive: remove && strings.some((s) => /^-[^-]*[rR]/.test(s) || s === "--recursive"),
|
|
1223
|
-
...append ? { append: true } : {}
|
|
1271
|
+
...append ? { append: true } : {},
|
|
1272
|
+
...teed !== null ? { text: teed } : {}
|
|
1224
1273
|
});
|
|
1225
1274
|
}
|
|
1226
1275
|
return;
|
|
@@ -1542,11 +1591,18 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1542
1591
|
if (stmt.Background) state = clone(state);
|
|
1543
1592
|
const headWord = stmt.Cmd && stmt.Cmd.kind === "CallExpr" ? base(resolveWordLiteral(stmt.Cmd.Args?.[0])) : "";
|
|
1544
1593
|
const sends = SENDING_STDIN.has(headWord);
|
|
1594
|
+
let produced;
|
|
1545
1595
|
for (const redir of stmt.Redirs ?? []) {
|
|
1546
1596
|
substitutions(redir.Word, state, depth);
|
|
1547
1597
|
for (const word of wordValues(redir.Word, state)) {
|
|
1548
|
-
if (ops().WRITES.has(redir.Op))
|
|
1549
|
-
|
|
1598
|
+
if (ops().WRITES.has(redir.Op)) {
|
|
1599
|
+
if (ops().APPENDS.has(redir.Op)) add("write", word, state, { append: true });
|
|
1600
|
+
else {
|
|
1601
|
+
const stdout = redir.N == null || redir.N.Value === "1";
|
|
1602
|
+
if (stdout && produced === void 0) produced = producedText(stmt);
|
|
1603
|
+
add("write", word, state, stdout && produced ? { text: produced } : {});
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1550
1606
|
if (ops().READS.has(redir.Op)) add("read", word, state, sends ? { upload: true } : {});
|
|
1551
1607
|
if (redir.Op === ops().DUP_OUT && word.value && !/^\d+$/.test(word.value))
|
|
1552
1608
|
add("write", word, state);
|
|
@@ -1558,6 +1614,7 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1558
1614
|
stdinScript(stmt, state, depth);
|
|
1559
1615
|
const fedText = stdinText(stmt);
|
|
1560
1616
|
if (fedText !== null) nestedPayload(xargsPayload(stmt, fedText), clone(state), depth);
|
|
1617
|
+
currentStdin = fedText;
|
|
1561
1618
|
switch (cmd.kind) {
|
|
1562
1619
|
case "CallExpr":
|
|
1563
1620
|
call(cmd, state, depth);
|
|
@@ -1671,6 +1728,26 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1671
1728
|
}
|
|
1672
1729
|
return out;
|
|
1673
1730
|
}
|
|
1731
|
+
function serviceNamedIn(text) {
|
|
1732
|
+
const re = new RegExp(SERVICE_WORD_RE.source, "gi");
|
|
1733
|
+
for (let m = re.exec(text); m; m = re.exec(text)) {
|
|
1734
|
+
const lower2 = m[1].toLowerCase();
|
|
1735
|
+
if (lower2 === "init" && !INIT_PATTERN_RE.test(text)) continue;
|
|
1736
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? m[1];
|
|
1737
|
+
}
|
|
1738
|
+
return null;
|
|
1739
|
+
}
|
|
1740
|
+
function serviceOf(name) {
|
|
1741
|
+
const leaf = name.replace(/^.*[\\/]/, "").replace(/\.service$/, "").replace(/@.*$/, "");
|
|
1742
|
+
const lower2 = leaf.toLowerCase();
|
|
1743
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? UNIT_ALIASES[lower2] ?? null;
|
|
1744
|
+
}
|
|
1745
|
+
function killsService(language, code) {
|
|
1746
|
+
const api = KILL_API[language].exec(code);
|
|
1747
|
+
if (!api) return null;
|
|
1748
|
+
const service = serviceNamedIn(code);
|
|
1749
|
+
return service ? `${api[0].trim()} with ${service}` : null;
|
|
1750
|
+
}
|
|
1674
1751
|
function inlineLanguageOf(interp) {
|
|
1675
1752
|
const i = interp.toLowerCase();
|
|
1676
1753
|
if (/^python[\d.]*$/.test(i)) return "python";
|
|
@@ -1745,6 +1822,15 @@ function judgeInlineCode(language, code, isProtected) {
|
|
|
1745
1822
|
return { outcome: "unreadable", what: "is too long for node9 to read" };
|
|
1746
1823
|
}
|
|
1747
1824
|
const text = language === "python" ? resolvePythonAliases(code) : code;
|
|
1825
|
+
const killed = killsService(language, text);
|
|
1826
|
+
if (killed) {
|
|
1827
|
+
return {
|
|
1828
|
+
outcome: "dangerous",
|
|
1829
|
+
what: WHAT["kills-service"],
|
|
1830
|
+
evidence: killed.slice(0, 60),
|
|
1831
|
+
category: "kills-service"
|
|
1832
|
+
};
|
|
1833
|
+
}
|
|
1748
1834
|
for (const [category, re] of TABLES[language]) {
|
|
1749
1835
|
const m = re.exec(text);
|
|
1750
1836
|
if (!m) continue;
|
|
@@ -6559,8 +6645,16 @@ function evaluateGitHooksFileAccess(args, accesses, context, settings, shell) {
|
|
|
6559
6645
|
disarms = true;
|
|
6560
6646
|
how = "removed";
|
|
6561
6647
|
} else if (texts === null) {
|
|
6562
|
-
|
|
6563
|
-
|
|
6648
|
+
if (access.edits) {
|
|
6649
|
+
disarms = access.edits.some(editDisarms);
|
|
6650
|
+
how = "edited to exit";
|
|
6651
|
+
} else if (access.text !== void 0) {
|
|
6652
|
+
disarms = hookTextRunsNothing(access.text);
|
|
6653
|
+
how = "emptied";
|
|
6654
|
+
} else {
|
|
6655
|
+
disarms = true;
|
|
6656
|
+
how = "overwritten";
|
|
6657
|
+
}
|
|
6564
6658
|
} else if (texts.whole.length > 0) {
|
|
6565
6659
|
disarms = texts.whole.some(hookTextRunsNothing);
|
|
6566
6660
|
how = "emptied";
|
|
@@ -8392,6 +8486,118 @@ function scanArgumentSecrets(args) {
|
|
|
8392
8486
|
severity: "review"
|
|
8393
8487
|
} : null;
|
|
8394
8488
|
}
|
|
8489
|
+
function shownOf2(words) {
|
|
8490
|
+
return words.map((w) => w ?? "$?").join(" ").slice(0, 80);
|
|
8491
|
+
}
|
|
8492
|
+
function withoutComments(command) {
|
|
8493
|
+
return command.split("\n").map((line) => {
|
|
8494
|
+
for (let i = 0; i < line.length; i++) {
|
|
8495
|
+
if (line[i] === "#" && (i === 0 || line[i - 1] === " " || line[i - 1] === " ")) {
|
|
8496
|
+
return line.slice(0, i);
|
|
8497
|
+
}
|
|
8498
|
+
}
|
|
8499
|
+
return line;
|
|
8500
|
+
}).join("\n");
|
|
8501
|
+
}
|
|
8502
|
+
function detectSystemProcessStop(command, depth = 0) {
|
|
8503
|
+
if (!PRESCREEN_RE3.test(command)) return null;
|
|
8504
|
+
const named = serviceNamedIn(withoutComments(command));
|
|
8505
|
+
let direct = null;
|
|
8506
|
+
let dynamicKill = null;
|
|
8507
|
+
walkCommandScope(command, (node) => {
|
|
8508
|
+
const n = node;
|
|
8509
|
+
if (direct || !n || n.kind !== "CallExpr") return true;
|
|
8510
|
+
const words = (n.Args || []).map((a) => resolveWordLiteral(a));
|
|
8511
|
+
if (words.length === 0) return true;
|
|
8512
|
+
if (baseWord(words[0]) === "xargs" && words.some((w) => w !== null && baseWord(w) === "kill")) {
|
|
8513
|
+
dynamicKill ??= shownOf2(words);
|
|
8514
|
+
return true;
|
|
8515
|
+
}
|
|
8516
|
+
if (depth < MAX_PAYLOAD_DEPTH5) {
|
|
8517
|
+
const payload = literalShellPayload(words, baseWord(words[0]));
|
|
8518
|
+
if (payload !== null) {
|
|
8519
|
+
const inner = detectSystemProcessStop(payload, depth + 1);
|
|
8520
|
+
if (inner) direct = inner;
|
|
8521
|
+
return true;
|
|
8522
|
+
}
|
|
8523
|
+
}
|
|
8524
|
+
const head = unwrapCommandHead(words);
|
|
8525
|
+
if (head >= words.length) return true;
|
|
8526
|
+
const name = baseWord(words[head]);
|
|
8527
|
+
const rest = words.slice(head + 1);
|
|
8528
|
+
const shown = shownOf2(words);
|
|
8529
|
+
const viaXargs = words.slice(0, head).some((w) => w !== null && baseWord(w) === "xargs");
|
|
8530
|
+
if (name === "kill") {
|
|
8531
|
+
const targets = [];
|
|
8532
|
+
for (let i = 0; i < rest.length; i++) {
|
|
8533
|
+
const w = rest[i];
|
|
8534
|
+
if (i === 0 && w !== null && KILL_SIGNAL_RE.test(w)) {
|
|
8535
|
+
if (w === "-s") i++;
|
|
8536
|
+
continue;
|
|
8537
|
+
}
|
|
8538
|
+
if (w === "--") continue;
|
|
8539
|
+
targets.push(w);
|
|
8540
|
+
}
|
|
8541
|
+
if (targets.some((t) => t === "1" || t === "-1")) {
|
|
8542
|
+
direct = { service: "init (pid 1)", how: "kills", shown };
|
|
8543
|
+
} else if (viaXargs || targets.some((t) => t === null)) {
|
|
8544
|
+
dynamicKill ??= shown;
|
|
8545
|
+
}
|
|
8546
|
+
return true;
|
|
8547
|
+
}
|
|
8548
|
+
if (name === "pkill" || name === "killall") {
|
|
8549
|
+
let skipValue = false;
|
|
8550
|
+
for (const w of rest) {
|
|
8551
|
+
if (skipValue) {
|
|
8552
|
+
skipValue = false;
|
|
8553
|
+
continue;
|
|
8554
|
+
}
|
|
8555
|
+
if (w !== null && w.startsWith("-")) {
|
|
8556
|
+
if (/^-(?:u|U|g|G|t|P|s|n|o|r|q|-signal|-uid|-user)$/.test(w)) skipValue = true;
|
|
8557
|
+
continue;
|
|
8558
|
+
}
|
|
8559
|
+
if (w === null) {
|
|
8560
|
+
dynamicKill ??= shown;
|
|
8561
|
+
continue;
|
|
8562
|
+
}
|
|
8563
|
+
const service = serviceOf(w) ?? serviceNamedIn(w);
|
|
8564
|
+
if (service) direct = { service, how: "kills", shown };
|
|
8565
|
+
}
|
|
8566
|
+
return true;
|
|
8567
|
+
}
|
|
8568
|
+
if (name === "systemctl") {
|
|
8569
|
+
if (rest.includes("--user")) return true;
|
|
8570
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8571
|
+
if (verb === void 0 || verb === null || !SYSTEMCTL_STOP_VERBS.has(verb)) return true;
|
|
8572
|
+
for (const w of rest.slice(rest.indexOf(verb) + 1)) {
|
|
8573
|
+
const service = w === null ? null : serviceOf(w);
|
|
8574
|
+
if (service) direct = { service, how: verb === "kill" ? "kills" : "stops", shown };
|
|
8575
|
+
}
|
|
8576
|
+
return true;
|
|
8577
|
+
}
|
|
8578
|
+
if (name === "service") {
|
|
8579
|
+
const [unit, verb] = rest;
|
|
8580
|
+
const service = typeof unit === "string" ? serviceOf(unit) : null;
|
|
8581
|
+
if (service && verb === "stop") direct = { service, how: "stops", shown };
|
|
8582
|
+
return true;
|
|
8583
|
+
}
|
|
8584
|
+
if (name === "launchctl") {
|
|
8585
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8586
|
+
if (verb === void 0 || verb === null || !LAUNCHCTL_UNLOAD_VERBS.has(verb)) return true;
|
|
8587
|
+
const daemon = rest.find((w) => w !== null && LAUNCH_DAEMONS_RE.test(w));
|
|
8588
|
+
if (daemon) {
|
|
8589
|
+
direct = { service: daemon.replace(/^.*\//, ""), how: "unloads the system daemon", shown };
|
|
8590
|
+
}
|
|
8591
|
+
return true;
|
|
8592
|
+
}
|
|
8593
|
+
return true;
|
|
8594
|
+
});
|
|
8595
|
+
if (direct) return direct;
|
|
8596
|
+
if (dynamicKill !== null && named) {
|
|
8597
|
+
return { service: named, how: "kills the processes of", shown: dynamicKill };
|
|
8598
|
+
}
|
|
8599
|
+
return null;
|
|
8600
|
+
}
|
|
8395
8601
|
function patternSelects(pattern, targets) {
|
|
8396
8602
|
const pieces = pattern.toLowerCase().split(/[\\^$.*+?()[\]{}|]+/).filter(Boolean);
|
|
8397
8603
|
if (pieces.length === 0) return false;
|
|
@@ -9011,6 +9217,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
|
|
|
9011
9217
|
checkId: "commands.eval-dynamic"
|
|
9012
9218
|
});
|
|
9013
9219
|
}
|
|
9220
|
+
const stopped = detectSystemProcessStop(shellCommand);
|
|
9221
|
+
if (stopped) {
|
|
9222
|
+
consider("commands.system-processes", {
|
|
9223
|
+
decision: "review",
|
|
9224
|
+
blockedByLabel: "Node9: System Service Stopped",
|
|
9225
|
+
reason: `The AI ${stopped.how} ${stopped.service}: ${stopped.shown}`,
|
|
9226
|
+
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.",
|
|
9227
|
+
tier: 3,
|
|
9228
|
+
checkId: "commands.system-processes"
|
|
9229
|
+
});
|
|
9230
|
+
}
|
|
9014
9231
|
const builtin = strictestVerdict(candidates);
|
|
9015
9232
|
if (builtin) return builtin;
|
|
9016
9233
|
{
|
|
@@ -10089,7 +10306,7 @@ function matchCanaryArgs(args, values) {
|
|
|
10089
10306
|
return null;
|
|
10090
10307
|
}
|
|
10091
10308
|
}
|
|
10092
|
-
var 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;
|
|
10309
|
+
var 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;
|
|
10093
10310
|
var init_dist = __esm({
|
|
10094
10311
|
"packages/policy-engine/dist/index.mjs"() {
|
|
10095
10312
|
"use strict";
|
|
@@ -11964,6 +12181,11 @@ var init_dist = __esm({
|
|
|
11964
12181
|
example: "/tmp/build-helper --serve",
|
|
11965
12182
|
advice: "Keep Review. Malware often runs from /tmp."
|
|
11966
12183
|
},
|
|
12184
|
+
"commands.system-processes": {
|
|
12185
|
+
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.",
|
|
12186
|
+
example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
|
|
12187
|
+
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."
|
|
12188
|
+
},
|
|
11967
12189
|
"commands.disk-destroy": {
|
|
11968
12190
|
plain: "The agent formats, overwrites or securely erases a disk or file.",
|
|
11969
12191
|
example: "dd if=/dev/zero of=/dev/sda",
|
|
@@ -12133,6 +12355,7 @@ var init_dist = __esm({
|
|
|
12133
12355
|
"commands.sql-no-where": "log",
|
|
12134
12356
|
"commands.temp-binary": "log",
|
|
12135
12357
|
"commands.disk-destroy": "log",
|
|
12358
|
+
"commands.system-processes": "log",
|
|
12136
12359
|
"commands.dangerous-word": "log",
|
|
12137
12360
|
"files.system-dirs": "log",
|
|
12138
12361
|
"files.shell-startup": "log",
|
|
@@ -12451,6 +12674,16 @@ var init_dist = __esm({
|
|
|
12451
12674
|
defaultValue: "review",
|
|
12452
12675
|
legacy: ["Manual Nuclear Protection"]
|
|
12453
12676
|
},
|
|
12677
|
+
{
|
|
12678
|
+
id: "commands.system-processes",
|
|
12679
|
+
group: "commands",
|
|
12680
|
+
owasp: "ASI02",
|
|
12681
|
+
title: "Stops a system service",
|
|
12682
|
+
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",
|
|
12683
|
+
values: ALL,
|
|
12684
|
+
defaultValue: "review",
|
|
12685
|
+
legacy: ["Node9: System Service Stopped"]
|
|
12686
|
+
},
|
|
12454
12687
|
{
|
|
12455
12688
|
id: "commands.dangerous-word",
|
|
12456
12689
|
group: "commands",
|
|
@@ -13110,6 +13343,82 @@ var init_dist = __esm({
|
|
|
13110
13343
|
)
|
|
13111
13344
|
)
|
|
13112
13345
|
}));
|
|
13346
|
+
INFRASTRUCTURE_SERVICES = [
|
|
13347
|
+
"init",
|
|
13348
|
+
"sshd",
|
|
13349
|
+
"dockerd",
|
|
13350
|
+
"docker-proxy",
|
|
13351
|
+
"containerd",
|
|
13352
|
+
"containerd-shim",
|
|
13353
|
+
"docker-containerd-shim",
|
|
13354
|
+
"runc",
|
|
13355
|
+
"systemd-journald",
|
|
13356
|
+
"journald",
|
|
13357
|
+
"systemd-logind",
|
|
13358
|
+
"systemd-udevd",
|
|
13359
|
+
"udevd",
|
|
13360
|
+
"dbus-daemon",
|
|
13361
|
+
"polkitd",
|
|
13362
|
+
"sssd",
|
|
13363
|
+
"kubelet",
|
|
13364
|
+
"kube-apiserver",
|
|
13365
|
+
"crond",
|
|
13366
|
+
"cron",
|
|
13367
|
+
"atd",
|
|
13368
|
+
"auditd",
|
|
13369
|
+
"rsyslogd",
|
|
13370
|
+
"syslogd",
|
|
13371
|
+
"chronyd",
|
|
13372
|
+
"ntpd",
|
|
13373
|
+
"NetworkManager",
|
|
13374
|
+
"wpa_supplicant",
|
|
13375
|
+
"dhclient",
|
|
13376
|
+
"avahi-daemon",
|
|
13377
|
+
"firewalld",
|
|
13378
|
+
"ufw",
|
|
13379
|
+
"cupsd",
|
|
13380
|
+
"snapd",
|
|
13381
|
+
"bluetoothd",
|
|
13382
|
+
"Xorg",
|
|
13383
|
+
"Xwayland",
|
|
13384
|
+
"gdm",
|
|
13385
|
+
"sddm",
|
|
13386
|
+
"lightdm"
|
|
13387
|
+
];
|
|
13388
|
+
SERVER_SERVICES = [
|
|
13389
|
+
"nginx",
|
|
13390
|
+
"apache2",
|
|
13391
|
+
"httpd",
|
|
13392
|
+
"mysqld",
|
|
13393
|
+
"mariadbd",
|
|
13394
|
+
"postgres",
|
|
13395
|
+
"postgresql",
|
|
13396
|
+
"redis-server",
|
|
13397
|
+
"mongod"
|
|
13398
|
+
];
|
|
13399
|
+
SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
|
|
13400
|
+
escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
|
|
13401
|
+
SERVICE_WORD_RE = new RegExp(
|
|
13402
|
+
`(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
|
|
13403
|
+
"i"
|
|
13404
|
+
);
|
|
13405
|
+
INIT_PATTERN_RE = /(?:["'*])init(?:["'*])/;
|
|
13406
|
+
UNIT_ALIASES = {
|
|
13407
|
+
docker: "dockerd",
|
|
13408
|
+
ssh: "sshd",
|
|
13409
|
+
mysql: "mysqld",
|
|
13410
|
+
mariadb: "mariadbd",
|
|
13411
|
+
redis: "redis-server",
|
|
13412
|
+
mongodb: "mongod",
|
|
13413
|
+
apache: "apache2",
|
|
13414
|
+
rsyslog: "rsyslogd",
|
|
13415
|
+
"systemd-networkd": "systemd-udevd",
|
|
13416
|
+
dbus: "dbus-daemon",
|
|
13417
|
+
avahi: "avahi-daemon",
|
|
13418
|
+
bluetooth: "bluetoothd",
|
|
13419
|
+
cups: "cupsd",
|
|
13420
|
+
chrony: "chronyd"
|
|
13421
|
+
};
|
|
13113
13422
|
MAX_INLINE_CODE = 64 * 1024;
|
|
13114
13423
|
WHAT = {
|
|
13115
13424
|
deletes: "deletes files",
|
|
@@ -13121,7 +13430,15 @@ var init_dist = __esm({
|
|
|
13121
13430
|
"builds-code": "runs code it builds at run time",
|
|
13122
13431
|
permissions: "changes permissions or ownership",
|
|
13123
13432
|
monitors: "captures the screen, the clipboard or the keyboard",
|
|
13124
|
-
amplifies: "writes or sends in an endless loop"
|
|
13433
|
+
amplifies: "writes or sends in an endless loop",
|
|
13434
|
+
"kills-service": "stops a system service"
|
|
13435
|
+
};
|
|
13436
|
+
KILL_API = {
|
|
13437
|
+
python: /\bos\.kill(?:pg)?\s*\(|\.(?:kill|terminate)\s*\(|\bsignal\.SIGKILL\b/,
|
|
13438
|
+
node: /\bprocess\.kill\s*\(|\.kill\s*\(\s*['"`]?SIG/,
|
|
13439
|
+
perl: /\bkill\s+(?:-?\d+|['"]?[A-Z]+['"]?)\s*,/,
|
|
13440
|
+
ruby: /\bProcess\.kill\b/,
|
|
13441
|
+
php: /\bposix_kill\s*\(/
|
|
13125
13442
|
};
|
|
13126
13443
|
OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
|
|
13127
13444
|
pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
|
|
@@ -19012,6 +19329,7 @@ ${text}` : text);
|
|
|
19012
19329
|
"commands.sql-no-where",
|
|
19013
19330
|
"commands.temp-binary",
|
|
19014
19331
|
"commands.disk-destroy",
|
|
19332
|
+
"commands.system-processes",
|
|
19015
19333
|
"commands.dangerous-word",
|
|
19016
19334
|
"commands.node9-disarm",
|
|
19017
19335
|
"commands.reverse-shell",
|
|
@@ -19226,6 +19544,12 @@ ${text}` : text);
|
|
|
19226
19544
|
const char = value[index] ?? "";
|
|
19227
19545
|
return RUN_CHAR.test(char) || char !== "" && isInvisibleChar(char);
|
|
19228
19546
|
};
|
|
19547
|
+
PRESCREEN_RE3 = /\b(?:kill|pkill|killall|systemctl|service|launchctl|xargs)\b/;
|
|
19548
|
+
KILL_SIGNAL_RE = /^-(?:\d+|s|SIG[A-Z]+|[A-Z]{2,})$/;
|
|
19549
|
+
SYSTEMCTL_STOP_VERBS = /* @__PURE__ */ new Set(["stop", "kill", "disable", "mask"]);
|
|
19550
|
+
LAUNCHCTL_UNLOAD_VERBS = /* @__PURE__ */ new Set(["unload", "bootout", "remove"]);
|
|
19551
|
+
LAUNCH_DAEMONS_RE = /(?:^|\/)(?:System\/)?Library\/LaunchDaemons\//;
|
|
19552
|
+
MAX_PAYLOAD_DEPTH5 = 3;
|
|
19229
19553
|
RULE_NAME2 = "review-node9-disarm";
|
|
19230
19554
|
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.";
|
|
19231
19555
|
DAEMON_CMDLINES = [
|
package/dist/scan-ink.mjs
CHANGED
|
@@ -2192,6 +2192,11 @@ var CHECK_TEXT = {
|
|
|
2192
2192
|
example: "/tmp/build-helper --serve",
|
|
2193
2193
|
advice: "Keep Review. Malware often runs from /tmp."
|
|
2194
2194
|
},
|
|
2195
|
+
"commands.system-processes": {
|
|
2196
|
+
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.",
|
|
2197
|
+
example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
|
|
2198
|
+
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."
|
|
2199
|
+
},
|
|
2195
2200
|
"commands.disk-destroy": {
|
|
2196
2201
|
plain: "The agent formats, overwrites or securely erases a disk or file.",
|
|
2197
2202
|
example: "dd if=/dev/zero of=/dev/sda",
|
|
@@ -2654,6 +2659,16 @@ var PRODUCT_CHECKS = [
|
|
|
2654
2659
|
defaultValue: "review",
|
|
2655
2660
|
legacy: ["Manual Nuclear Protection"]
|
|
2656
2661
|
},
|
|
2662
|
+
{
|
|
2663
|
+
id: "commands.system-processes",
|
|
2664
|
+
group: "commands",
|
|
2665
|
+
owasp: "ASI02",
|
|
2666
|
+
title: "Stops a system service",
|
|
2667
|
+
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",
|
|
2668
|
+
values: ALL,
|
|
2669
|
+
defaultValue: "review",
|
|
2670
|
+
legacy: ["Node9: System Service Stopped"]
|
|
2671
|
+
},
|
|
2657
2672
|
{
|
|
2658
2673
|
id: "commands.dangerous-word",
|
|
2659
2674
|
group: "commands",
|
|
@@ -3282,6 +3297,65 @@ var ops = lazy(() => ({
|
|
|
3282
3297
|
)
|
|
3283
3298
|
)
|
|
3284
3299
|
}));
|
|
3300
|
+
var INFRASTRUCTURE_SERVICES = [
|
|
3301
|
+
"init",
|
|
3302
|
+
"sshd",
|
|
3303
|
+
"dockerd",
|
|
3304
|
+
"docker-proxy",
|
|
3305
|
+
"containerd",
|
|
3306
|
+
"containerd-shim",
|
|
3307
|
+
"docker-containerd-shim",
|
|
3308
|
+
"runc",
|
|
3309
|
+
"systemd-journald",
|
|
3310
|
+
"journald",
|
|
3311
|
+
"systemd-logind",
|
|
3312
|
+
"systemd-udevd",
|
|
3313
|
+
"udevd",
|
|
3314
|
+
"dbus-daemon",
|
|
3315
|
+
"polkitd",
|
|
3316
|
+
"sssd",
|
|
3317
|
+
"kubelet",
|
|
3318
|
+
"kube-apiserver",
|
|
3319
|
+
"crond",
|
|
3320
|
+
"cron",
|
|
3321
|
+
"atd",
|
|
3322
|
+
"auditd",
|
|
3323
|
+
"rsyslogd",
|
|
3324
|
+
"syslogd",
|
|
3325
|
+
"chronyd",
|
|
3326
|
+
"ntpd",
|
|
3327
|
+
"NetworkManager",
|
|
3328
|
+
"wpa_supplicant",
|
|
3329
|
+
"dhclient",
|
|
3330
|
+
"avahi-daemon",
|
|
3331
|
+
"firewalld",
|
|
3332
|
+
"ufw",
|
|
3333
|
+
"cupsd",
|
|
3334
|
+
"snapd",
|
|
3335
|
+
"bluetoothd",
|
|
3336
|
+
"Xorg",
|
|
3337
|
+
"Xwayland",
|
|
3338
|
+
"gdm",
|
|
3339
|
+
"sddm",
|
|
3340
|
+
"lightdm"
|
|
3341
|
+
];
|
|
3342
|
+
var SERVER_SERVICES = [
|
|
3343
|
+
"nginx",
|
|
3344
|
+
"apache2",
|
|
3345
|
+
"httpd",
|
|
3346
|
+
"mysqld",
|
|
3347
|
+
"mariadbd",
|
|
3348
|
+
"postgres",
|
|
3349
|
+
"postgresql",
|
|
3350
|
+
"redis-server",
|
|
3351
|
+
"mongod"
|
|
3352
|
+
];
|
|
3353
|
+
var SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
|
|
3354
|
+
var escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
|
|
3355
|
+
var SERVICE_WORD_RE = new RegExp(
|
|
3356
|
+
`(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
|
|
3357
|
+
"i"
|
|
3358
|
+
);
|
|
3285
3359
|
var MAX_INLINE_CODE = 64 * 1024;
|
|
3286
3360
|
var OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
|
|
3287
3361
|
var pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
|
|
@@ -7475,6 +7549,7 @@ var MAP_GOVERNED = /* @__PURE__ */ new Set([
|
|
|
7475
7549
|
"commands.sql-no-where",
|
|
7476
7550
|
"commands.temp-binary",
|
|
7477
7551
|
"commands.disk-destroy",
|
|
7552
|
+
"commands.system-processes",
|
|
7478
7553
|
"commands.dangerous-word",
|
|
7479
7554
|
"commands.node9-disarm",
|
|
7480
7555
|
"commands.reverse-shell",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node9/proxy",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.55.0",
|
|
4
4
|
"description": "Access control for AI agents. Set what Claude Code, Codex, Gemini, Cursor and any MCP server are allowed to do, review risky actions before they run, and keep every action on the record.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|