@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/dashboard.mjs
CHANGED
|
@@ -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")
|
|
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"
|
|
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)
|
|
1142
|
-
|
|
1184
|
+
if (!hasScript) {
|
|
1185
|
+
hasScript = true;
|
|
1186
|
+
scriptParts.push(value);
|
|
1187
|
+
} else files.push(token);
|
|
1143
1188
|
}
|
|
1144
|
-
|
|
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
|
-
|
|
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
|
-
|
|
6645
|
-
|
|
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 = [
|