@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/cli-main.js
CHANGED
|
@@ -976,12 +976,46 @@ function wordValues(word, state) {
|
|
|
976
976
|
if (!dynamic) return out.map(asWord);
|
|
977
977
|
return out.filter((piece) => piece.value !== "").map((piece) => ({ value: piece.value, pattern: piece.pattern + "*", dynamic: true }));
|
|
978
978
|
}
|
|
979
|
+
function sedSubstitutions(script) {
|
|
980
|
+
const out = [];
|
|
981
|
+
for (const raw of script.split(/\r?\n|;/)) {
|
|
982
|
+
const cmd = raw.trim();
|
|
983
|
+
if (cmd === "") continue;
|
|
984
|
+
const m = /^(?:(?:\d+|\$|\/(?:\\.|[^\\/])*\/)(?:,(?:\d+|\$|\/(?:\\.|[^\\/])*\/))?)?s(.)/.exec(
|
|
985
|
+
cmd
|
|
986
|
+
);
|
|
987
|
+
if (!m) return null;
|
|
988
|
+
const delimiter = m[1];
|
|
989
|
+
if (delimiter === "\\") return null;
|
|
990
|
+
const parts = [];
|
|
991
|
+
let cur = "";
|
|
992
|
+
let i = m[0].length;
|
|
993
|
+
for (; i < cmd.length && parts.length < 2; i++) {
|
|
994
|
+
const ch = cmd[i];
|
|
995
|
+
if (ch === "\\" && i + 1 < cmd.length) {
|
|
996
|
+
cur += ch + cmd[++i];
|
|
997
|
+
continue;
|
|
998
|
+
}
|
|
999
|
+
if (ch === delimiter) {
|
|
1000
|
+
parts.push(cur);
|
|
1001
|
+
cur = "";
|
|
1002
|
+
continue;
|
|
1003
|
+
}
|
|
1004
|
+
cur += ch;
|
|
1005
|
+
}
|
|
1006
|
+
if (parts.length < 2) return null;
|
|
1007
|
+
if (!/^[gpiImM0-9]*$/.test(cmd.slice(i))) return null;
|
|
1008
|
+
out.push(parts[1].replace(/\\(.)/g, "$1"));
|
|
1009
|
+
}
|
|
1010
|
+
return out.length > 0 ? out : null;
|
|
1011
|
+
}
|
|
979
1012
|
function collectShellFileAccesses(command, context = {}) {
|
|
980
1013
|
const out = [];
|
|
981
1014
|
let payloads = 256;
|
|
982
1015
|
const functions = /* @__PURE__ */ new Map();
|
|
983
1016
|
const seenCalls = /* @__PURE__ */ new Set();
|
|
984
1017
|
const pipedStdin = /* @__PURE__ */ new WeakMap();
|
|
1018
|
+
let currentStdin = null;
|
|
985
1019
|
let callWalks2 = MAX_CALL_WALKS;
|
|
986
1020
|
const initial = {
|
|
987
1021
|
cwd: [context.cwd ?? ""],
|
|
@@ -1076,8 +1110,9 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1076
1110
|
}
|
|
1077
1111
|
const locate = (p) => tokens.find((w) => w?.value === p) ?? { value: p };
|
|
1078
1112
|
if (name === "sed") {
|
|
1079
|
-
let inplace = false, hasScript = false, ended = false;
|
|
1113
|
+
let inplace = false, hasScript = false, ended = false, scriptUnknown = false;
|
|
1080
1114
|
const files = [];
|
|
1115
|
+
const scriptParts = [];
|
|
1081
1116
|
for (let i = 0; i < args.length; i++) {
|
|
1082
1117
|
const token = args[i];
|
|
1083
1118
|
if (!token) {
|
|
@@ -1095,7 +1130,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1095
1130
|
hasScript = true;
|
|
1096
1131
|
const eq = value.indexOf("=");
|
|
1097
1132
|
const script = eq < 0 ? args[++i] : { value: value.slice(eq + 1) };
|
|
1098
|
-
if (value.startsWith("--file")
|
|
1133
|
+
if (value.startsWith("--file")) {
|
|
1134
|
+
scriptUnknown = true;
|
|
1135
|
+
if (script) add("read", script, state);
|
|
1136
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1137
|
+
else scriptUnknown = true;
|
|
1099
1138
|
}
|
|
1100
1139
|
continue;
|
|
1101
1140
|
}
|
|
@@ -1110,7 +1149,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1110
1149
|
if (flag === "e" || flag === "f") {
|
|
1111
1150
|
hasScript = true;
|
|
1112
1151
|
const script = value.slice(j + 1) ? { value: value.slice(j + 1) } : args[++i];
|
|
1113
|
-
if (flag === "f"
|
|
1152
|
+
if (flag === "f") {
|
|
1153
|
+
scriptUnknown = true;
|
|
1154
|
+
if (script) add("read", script, state);
|
|
1155
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1156
|
+
else scriptUnknown = true;
|
|
1114
1157
|
break;
|
|
1115
1158
|
}
|
|
1116
1159
|
if (flag === "l") {
|
|
@@ -1120,10 +1163,14 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1120
1163
|
}
|
|
1121
1164
|
continue;
|
|
1122
1165
|
}
|
|
1123
|
-
if (!hasScript)
|
|
1124
|
-
|
|
1166
|
+
if (!hasScript) {
|
|
1167
|
+
hasScript = true;
|
|
1168
|
+
scriptParts.push(value);
|
|
1169
|
+
} else files.push(token);
|
|
1125
1170
|
}
|
|
1126
|
-
|
|
1171
|
+
const edits = inplace && !scriptUnknown ? sedSubstitutions(scriptParts.join("\n")) : null;
|
|
1172
|
+
for (const file2 of files)
|
|
1173
|
+
add(inplace ? "write" : "read", file2, state, edits ? { edits } : {});
|
|
1127
1174
|
return;
|
|
1128
1175
|
}
|
|
1129
1176
|
if (FS_READ_TOOLS.has(name) && name !== "dd") {
|
|
@@ -1250,9 +1297,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1250
1297
|
continue;
|
|
1251
1298
|
const remove = name === "rm" || name === "unlink";
|
|
1252
1299
|
const append = name === "tee" && strings.some((s) => s === "--append" || /^-[^-]*a/.test(s));
|
|
1300
|
+
const teed = name === "tee" && !append ? currentStdin : null;
|
|
1253
1301
|
add(remove ? "remove" : name === "touch" ? "create" : "write", token, state, {
|
|
1254
1302
|
recursive: remove && strings.some((s) => /^-[^-]*[rR]/.test(s) || s === "--recursive"),
|
|
1255
|
-
...append ? { append: true } : {}
|
|
1303
|
+
...append ? { append: true } : {},
|
|
1304
|
+
...teed !== null ? { text: teed } : {}
|
|
1256
1305
|
});
|
|
1257
1306
|
}
|
|
1258
1307
|
return;
|
|
@@ -1574,11 +1623,18 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1574
1623
|
if (stmt.Background) state = clone(state);
|
|
1575
1624
|
const headWord = stmt.Cmd && stmt.Cmd.kind === "CallExpr" ? base(resolveWordLiteral(stmt.Cmd.Args?.[0])) : "";
|
|
1576
1625
|
const sends = SENDING_STDIN.has(headWord);
|
|
1626
|
+
let produced;
|
|
1577
1627
|
for (const redir of stmt.Redirs ?? []) {
|
|
1578
1628
|
substitutions2(redir.Word, state, depth);
|
|
1579
1629
|
for (const word of wordValues(redir.Word, state)) {
|
|
1580
|
-
if (ops().WRITES.has(redir.Op))
|
|
1581
|
-
|
|
1630
|
+
if (ops().WRITES.has(redir.Op)) {
|
|
1631
|
+
if (ops().APPENDS.has(redir.Op)) add("write", word, state, { append: true });
|
|
1632
|
+
else {
|
|
1633
|
+
const stdout = redir.N == null || redir.N.Value === "1";
|
|
1634
|
+
if (stdout && produced === void 0) produced = producedText(stmt);
|
|
1635
|
+
add("write", word, state, stdout && produced ? { text: produced } : {});
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1582
1638
|
if (ops().READS.has(redir.Op)) add("read", word, state, sends ? { upload: true } : {});
|
|
1583
1639
|
if (redir.Op === ops().DUP_OUT && word.value && !/^\d+$/.test(word.value))
|
|
1584
1640
|
add("write", word, state);
|
|
@@ -1590,6 +1646,7 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1590
1646
|
stdinScript(stmt, state, depth);
|
|
1591
1647
|
const fedText = stdinText(stmt);
|
|
1592
1648
|
if (fedText !== null) nestedPayload(xargsPayload(stmt, fedText), clone(state), depth);
|
|
1649
|
+
currentStdin = fedText;
|
|
1593
1650
|
switch (cmd.kind) {
|
|
1594
1651
|
case "CallExpr":
|
|
1595
1652
|
call(cmd, state, depth);
|
|
@@ -1703,6 +1760,26 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1703
1760
|
}
|
|
1704
1761
|
return out;
|
|
1705
1762
|
}
|
|
1763
|
+
function serviceNamedIn(text) {
|
|
1764
|
+
const re = new RegExp(SERVICE_WORD_RE.source, "gi");
|
|
1765
|
+
for (let m = re.exec(text); m; m = re.exec(text)) {
|
|
1766
|
+
const lower2 = m[1].toLowerCase();
|
|
1767
|
+
if (lower2 === "init" && !INIT_PATTERN_RE.test(text)) continue;
|
|
1768
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? m[1];
|
|
1769
|
+
}
|
|
1770
|
+
return null;
|
|
1771
|
+
}
|
|
1772
|
+
function serviceOf(name) {
|
|
1773
|
+
const leaf = name.replace(/^.*[\\/]/, "").replace(/\.service$/, "").replace(/@.*$/, "");
|
|
1774
|
+
const lower2 = leaf.toLowerCase();
|
|
1775
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? UNIT_ALIASES[lower2] ?? null;
|
|
1776
|
+
}
|
|
1777
|
+
function killsService(language, code2) {
|
|
1778
|
+
const api = KILL_API[language].exec(code2);
|
|
1779
|
+
if (!api) return null;
|
|
1780
|
+
const service = serviceNamedIn(code2);
|
|
1781
|
+
return service ? `${api[0].trim()} with ${service}` : null;
|
|
1782
|
+
}
|
|
1706
1783
|
function inlineLanguageOf(interp) {
|
|
1707
1784
|
const i = interp.toLowerCase();
|
|
1708
1785
|
if (/^python[\d.]*$/.test(i)) return "python";
|
|
@@ -1777,6 +1854,15 @@ function judgeInlineCode(language, code2, isProtected) {
|
|
|
1777
1854
|
return { outcome: "unreadable", what: "is too long for node9 to read" };
|
|
1778
1855
|
}
|
|
1779
1856
|
const text = language === "python" ? resolvePythonAliases(code2) : code2;
|
|
1857
|
+
const killed = killsService(language, text);
|
|
1858
|
+
if (killed) {
|
|
1859
|
+
return {
|
|
1860
|
+
outcome: "dangerous",
|
|
1861
|
+
what: WHAT["kills-service"],
|
|
1862
|
+
evidence: killed.slice(0, 60),
|
|
1863
|
+
category: "kills-service"
|
|
1864
|
+
};
|
|
1865
|
+
}
|
|
1780
1866
|
for (const [category, re] of TABLES[language]) {
|
|
1781
1867
|
const m = re.exec(text);
|
|
1782
1868
|
if (!m) continue;
|
|
@@ -6717,8 +6803,16 @@ function evaluateGitHooksFileAccess(args, accesses, context, settings, shell) {
|
|
|
6717
6803
|
disarms = true;
|
|
6718
6804
|
how = "removed";
|
|
6719
6805
|
} else if (texts === null) {
|
|
6720
|
-
|
|
6721
|
-
|
|
6806
|
+
if (access.edits) {
|
|
6807
|
+
disarms = access.edits.some(editDisarms);
|
|
6808
|
+
how = "edited to exit";
|
|
6809
|
+
} else if (access.text !== void 0) {
|
|
6810
|
+
disarms = hookTextRunsNothing(access.text);
|
|
6811
|
+
how = "emptied";
|
|
6812
|
+
} else {
|
|
6813
|
+
disarms = true;
|
|
6814
|
+
how = "overwritten";
|
|
6815
|
+
}
|
|
6722
6816
|
} else if (texts.whole.length > 0) {
|
|
6723
6817
|
disarms = texts.whole.some(hookTextRunsNothing);
|
|
6724
6818
|
how = "emptied";
|
|
@@ -8595,6 +8689,118 @@ function scanArgumentSecrets(args) {
|
|
|
8595
8689
|
severity: "review"
|
|
8596
8690
|
} : null;
|
|
8597
8691
|
}
|
|
8692
|
+
function shownOf2(words) {
|
|
8693
|
+
return words.map((w) => w ?? "$?").join(" ").slice(0, 80);
|
|
8694
|
+
}
|
|
8695
|
+
function withoutComments(command) {
|
|
8696
|
+
return command.split("\n").map((line) => {
|
|
8697
|
+
for (let i = 0; i < line.length; i++) {
|
|
8698
|
+
if (line[i] === "#" && (i === 0 || line[i - 1] === " " || line[i - 1] === " ")) {
|
|
8699
|
+
return line.slice(0, i);
|
|
8700
|
+
}
|
|
8701
|
+
}
|
|
8702
|
+
return line;
|
|
8703
|
+
}).join("\n");
|
|
8704
|
+
}
|
|
8705
|
+
function detectSystemProcessStop(command, depth = 0) {
|
|
8706
|
+
if (!PRESCREEN_RE3.test(command)) return null;
|
|
8707
|
+
const named = serviceNamedIn(withoutComments(command));
|
|
8708
|
+
let direct = null;
|
|
8709
|
+
let dynamicKill = null;
|
|
8710
|
+
walkCommandScope(command, (node) => {
|
|
8711
|
+
const n = node;
|
|
8712
|
+
if (direct || !n || n.kind !== "CallExpr") return true;
|
|
8713
|
+
const words = (n.Args || []).map((a) => resolveWordLiteral(a));
|
|
8714
|
+
if (words.length === 0) return true;
|
|
8715
|
+
if (baseWord(words[0]) === "xargs" && words.some((w) => w !== null && baseWord(w) === "kill")) {
|
|
8716
|
+
dynamicKill ??= shownOf2(words);
|
|
8717
|
+
return true;
|
|
8718
|
+
}
|
|
8719
|
+
if (depth < MAX_PAYLOAD_DEPTH5) {
|
|
8720
|
+
const payload = literalShellPayload(words, baseWord(words[0]));
|
|
8721
|
+
if (payload !== null) {
|
|
8722
|
+
const inner = detectSystemProcessStop(payload, depth + 1);
|
|
8723
|
+
if (inner) direct = inner;
|
|
8724
|
+
return true;
|
|
8725
|
+
}
|
|
8726
|
+
}
|
|
8727
|
+
const head = unwrapCommandHead(words);
|
|
8728
|
+
if (head >= words.length) return true;
|
|
8729
|
+
const name = baseWord(words[head]);
|
|
8730
|
+
const rest = words.slice(head + 1);
|
|
8731
|
+
const shown = shownOf2(words);
|
|
8732
|
+
const viaXargs = words.slice(0, head).some((w) => w !== null && baseWord(w) === "xargs");
|
|
8733
|
+
if (name === "kill") {
|
|
8734
|
+
const targets = [];
|
|
8735
|
+
for (let i = 0; i < rest.length; i++) {
|
|
8736
|
+
const w = rest[i];
|
|
8737
|
+
if (i === 0 && w !== null && KILL_SIGNAL_RE.test(w)) {
|
|
8738
|
+
if (w === "-s") i++;
|
|
8739
|
+
continue;
|
|
8740
|
+
}
|
|
8741
|
+
if (w === "--") continue;
|
|
8742
|
+
targets.push(w);
|
|
8743
|
+
}
|
|
8744
|
+
if (targets.some((t) => t === "1" || t === "-1")) {
|
|
8745
|
+
direct = { service: "init (pid 1)", how: "kills", shown };
|
|
8746
|
+
} else if (viaXargs || targets.some((t) => t === null)) {
|
|
8747
|
+
dynamicKill ??= shown;
|
|
8748
|
+
}
|
|
8749
|
+
return true;
|
|
8750
|
+
}
|
|
8751
|
+
if (name === "pkill" || name === "killall") {
|
|
8752
|
+
let skipValue = false;
|
|
8753
|
+
for (const w of rest) {
|
|
8754
|
+
if (skipValue) {
|
|
8755
|
+
skipValue = false;
|
|
8756
|
+
continue;
|
|
8757
|
+
}
|
|
8758
|
+
if (w !== null && w.startsWith("-")) {
|
|
8759
|
+
if (/^-(?:u|U|g|G|t|P|s|n|o|r|q|-signal|-uid|-user)$/.test(w)) skipValue = true;
|
|
8760
|
+
continue;
|
|
8761
|
+
}
|
|
8762
|
+
if (w === null) {
|
|
8763
|
+
dynamicKill ??= shown;
|
|
8764
|
+
continue;
|
|
8765
|
+
}
|
|
8766
|
+
const service = serviceOf(w) ?? serviceNamedIn(w);
|
|
8767
|
+
if (service) direct = { service, how: "kills", shown };
|
|
8768
|
+
}
|
|
8769
|
+
return true;
|
|
8770
|
+
}
|
|
8771
|
+
if (name === "systemctl") {
|
|
8772
|
+
if (rest.includes("--user")) return true;
|
|
8773
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8774
|
+
if (verb === void 0 || verb === null || !SYSTEMCTL_STOP_VERBS.has(verb)) return true;
|
|
8775
|
+
for (const w of rest.slice(rest.indexOf(verb) + 1)) {
|
|
8776
|
+
const service = w === null ? null : serviceOf(w);
|
|
8777
|
+
if (service) direct = { service, how: verb === "kill" ? "kills" : "stops", shown };
|
|
8778
|
+
}
|
|
8779
|
+
return true;
|
|
8780
|
+
}
|
|
8781
|
+
if (name === "service") {
|
|
8782
|
+
const [unit, verb] = rest;
|
|
8783
|
+
const service = typeof unit === "string" ? serviceOf(unit) : null;
|
|
8784
|
+
if (service && verb === "stop") direct = { service, how: "stops", shown };
|
|
8785
|
+
return true;
|
|
8786
|
+
}
|
|
8787
|
+
if (name === "launchctl") {
|
|
8788
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8789
|
+
if (verb === void 0 || verb === null || !LAUNCHCTL_UNLOAD_VERBS.has(verb)) return true;
|
|
8790
|
+
const daemon = rest.find((w) => w !== null && LAUNCH_DAEMONS_RE.test(w));
|
|
8791
|
+
if (daemon) {
|
|
8792
|
+
direct = { service: daemon.replace(/^.*\//, ""), how: "unloads the system daemon", shown };
|
|
8793
|
+
}
|
|
8794
|
+
return true;
|
|
8795
|
+
}
|
|
8796
|
+
return true;
|
|
8797
|
+
});
|
|
8798
|
+
if (direct) return direct;
|
|
8799
|
+
if (dynamicKill !== null && named) {
|
|
8800
|
+
return { service: named, how: "kills the processes of", shown: dynamicKill };
|
|
8801
|
+
}
|
|
8802
|
+
return null;
|
|
8803
|
+
}
|
|
8598
8804
|
function patternSelects(pattern, targets) {
|
|
8599
8805
|
const pieces = pattern.toLowerCase().split(/[\\^$.*+?()[\]{}|]+/).filter(Boolean);
|
|
8600
8806
|
if (pieces.length === 0) return false;
|
|
@@ -9214,6 +9420,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
|
|
|
9214
9420
|
checkId: "commands.eval-dynamic"
|
|
9215
9421
|
});
|
|
9216
9422
|
}
|
|
9423
|
+
const stopped = detectSystemProcessStop(shellCommand);
|
|
9424
|
+
if (stopped) {
|
|
9425
|
+
consider("commands.system-processes", {
|
|
9426
|
+
decision: "review",
|
|
9427
|
+
blockedByLabel: "Node9: System Service Stopped",
|
|
9428
|
+
reason: `The AI ${stopped.how} ${stopped.service}: ${stopped.shown}`,
|
|
9429
|
+
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.",
|
|
9430
|
+
tier: 3,
|
|
9431
|
+
checkId: "commands.system-processes"
|
|
9432
|
+
});
|
|
9433
|
+
}
|
|
9217
9434
|
const builtin = strictestVerdict(candidates2);
|
|
9218
9435
|
if (builtin) return builtin;
|
|
9219
9436
|
{
|
|
@@ -10339,7 +10556,8 @@ function classifyRuleSeverity(name, verdict) {
|
|
|
10339
10556
|
"rebase",
|
|
10340
10557
|
"delete-branch",
|
|
10341
10558
|
"delete-remote",
|
|
10342
|
-
"unknown-registry"
|
|
10559
|
+
"unknown-registry",
|
|
10560
|
+
"system-processes"
|
|
10343
10561
|
];
|
|
10344
10562
|
if (highPatterns.some((p) => n.includes(p))) return "high";
|
|
10345
10563
|
if (verdict === "block") return "high";
|
|
@@ -10379,6 +10597,7 @@ function narrativeRuleLabel(name) {
|
|
|
10379
10597
|
"reverse-shell": "reverse shell",
|
|
10380
10598
|
"env-exfil": "environment sent out",
|
|
10381
10599
|
"unknown-registry": "install from an unknown registry",
|
|
10600
|
+
"system-processes": "system service stopped",
|
|
10382
10601
|
"agent-file-write": "agent instruction file written",
|
|
10383
10602
|
"agent-file-content": "instruction written into an agent file",
|
|
10384
10603
|
"agent-hooks-change": "agent hooks changed",
|
|
@@ -10979,7 +11198,7 @@ function* stringLeavesWithKeys(obj, depth = 0, key) {
|
|
|
10979
11198
|
}
|
|
10980
11199
|
for (const [k, v] of Object.entries(obj)) yield* stringLeavesWithKeys(v, depth + 1, k);
|
|
10981
11200
|
}
|
|
10982
|
-
var import_url, import_picomatch, import_safe_regex2, import_picomatch2, import_module, import_picomatch3, import_safe_regex22, import_crypto2, import_crypto3, import_crypto4, import_crypto5, getFilename, __filename2, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, finance_default, identity_default, publishing_default, settings_default, branches_default, ACTION_TEMPLATES, ACTION_CHECKS, GAP, prog, httpTo, httpWrite, HTTP_WRITE, HTTP_WRITE_ANY, NOT_STRIPE_TEST, postTo, STRIPE_OBJECTS, APP_SHIELD_SPECS, APP_SHIELDS, APP_SHIELD_NAMES, APP_SERVER_GLOB, GENERAL_ACTION_RULES, REPLACED_SHIELDS, 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, CHECK_GROUPS, 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, SHIELD_RULE, ACTION_RULE, LOOP_MAX_RECORDS, FINDING_TO_SIGNAL, SCAN_SIGNAL_WEIGHTS, LOOP_THRESHOLD_FOR_WASTE, MAX_BLAST_PATH, DESTRUCTIVE_OP_RE, SENSITIVE_PATH_RE, FILE_TOOLS, 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, DEDUPE_PREVIEW_LEN, ENGINE_VERSION;
|
|
11201
|
+
var import_url, import_picomatch, import_safe_regex2, import_picomatch2, import_module, import_picomatch3, import_safe_regex22, import_crypto2, import_crypto3, import_crypto4, import_crypto5, getFilename, __filename2, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, finance_default, identity_default, publishing_default, settings_default, branches_default, ACTION_TEMPLATES, ACTION_CHECKS, GAP, prog, httpTo, httpWrite, HTTP_WRITE, HTTP_WRITE_ANY, NOT_STRIPE_TEST, postTo, STRIPE_OBJECTS, APP_SHIELD_SPECS, APP_SHIELDS, APP_SHIELD_NAMES, APP_SERVER_GLOB, GENERAL_ACTION_RULES, REPLACED_SHIELDS, 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, CHECK_GROUPS, 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, SHIELD_RULE, ACTION_RULE, LOOP_MAX_RECORDS, FINDING_TO_SIGNAL, SCAN_SIGNAL_WEIGHTS, LOOP_THRESHOLD_FOR_WASTE, MAX_BLAST_PATH, DESTRUCTIVE_OP_RE, SENSITIVE_PATH_RE, FILE_TOOLS, 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, DEDUPE_PREVIEW_LEN, ENGINE_VERSION;
|
|
10983
11202
|
var init_dist = __esm({
|
|
10984
11203
|
"packages/policy-engine/dist/index.mjs"() {
|
|
10985
11204
|
"use strict";
|
|
@@ -12872,6 +13091,11 @@ var init_dist = __esm({
|
|
|
12872
13091
|
example: "/tmp/build-helper --serve",
|
|
12873
13092
|
advice: "Keep Review. Malware often runs from /tmp."
|
|
12874
13093
|
},
|
|
13094
|
+
"commands.system-processes": {
|
|
13095
|
+
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.",
|
|
13096
|
+
example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
|
|
13097
|
+
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."
|
|
13098
|
+
},
|
|
12875
13099
|
"commands.disk-destroy": {
|
|
12876
13100
|
plain: "The agent formats, overwrites or securely erases a disk or file.",
|
|
12877
13101
|
example: "dd if=/dev/zero of=/dev/sda",
|
|
@@ -13041,6 +13265,7 @@ var init_dist = __esm({
|
|
|
13041
13265
|
"commands.sql-no-where": "log",
|
|
13042
13266
|
"commands.temp-binary": "log",
|
|
13043
13267
|
"commands.disk-destroy": "log",
|
|
13268
|
+
"commands.system-processes": "log",
|
|
13044
13269
|
"commands.dangerous-word": "log",
|
|
13045
13270
|
"files.system-dirs": "log",
|
|
13046
13271
|
"files.shell-startup": "log",
|
|
@@ -13388,6 +13613,16 @@ var init_dist = __esm({
|
|
|
13388
13613
|
defaultValue: "review",
|
|
13389
13614
|
legacy: ["Manual Nuclear Protection"]
|
|
13390
13615
|
},
|
|
13616
|
+
{
|
|
13617
|
+
id: "commands.system-processes",
|
|
13618
|
+
group: "commands",
|
|
13619
|
+
owasp: "ASI02",
|
|
13620
|
+
title: "Stops a system service",
|
|
13621
|
+
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",
|
|
13622
|
+
values: ALL,
|
|
13623
|
+
defaultValue: "review",
|
|
13624
|
+
legacy: ["Node9: System Service Stopped"]
|
|
13625
|
+
},
|
|
13391
13626
|
{
|
|
13392
13627
|
id: "commands.dangerous-word",
|
|
13393
13628
|
group: "commands",
|
|
@@ -14047,6 +14282,82 @@ var init_dist = __esm({
|
|
|
14047
14282
|
)
|
|
14048
14283
|
)
|
|
14049
14284
|
}));
|
|
14285
|
+
INFRASTRUCTURE_SERVICES = [
|
|
14286
|
+
"init",
|
|
14287
|
+
"sshd",
|
|
14288
|
+
"dockerd",
|
|
14289
|
+
"docker-proxy",
|
|
14290
|
+
"containerd",
|
|
14291
|
+
"containerd-shim",
|
|
14292
|
+
"docker-containerd-shim",
|
|
14293
|
+
"runc",
|
|
14294
|
+
"systemd-journald",
|
|
14295
|
+
"journald",
|
|
14296
|
+
"systemd-logind",
|
|
14297
|
+
"systemd-udevd",
|
|
14298
|
+
"udevd",
|
|
14299
|
+
"dbus-daemon",
|
|
14300
|
+
"polkitd",
|
|
14301
|
+
"sssd",
|
|
14302
|
+
"kubelet",
|
|
14303
|
+
"kube-apiserver",
|
|
14304
|
+
"crond",
|
|
14305
|
+
"cron",
|
|
14306
|
+
"atd",
|
|
14307
|
+
"auditd",
|
|
14308
|
+
"rsyslogd",
|
|
14309
|
+
"syslogd",
|
|
14310
|
+
"chronyd",
|
|
14311
|
+
"ntpd",
|
|
14312
|
+
"NetworkManager",
|
|
14313
|
+
"wpa_supplicant",
|
|
14314
|
+
"dhclient",
|
|
14315
|
+
"avahi-daemon",
|
|
14316
|
+
"firewalld",
|
|
14317
|
+
"ufw",
|
|
14318
|
+
"cupsd",
|
|
14319
|
+
"snapd",
|
|
14320
|
+
"bluetoothd",
|
|
14321
|
+
"Xorg",
|
|
14322
|
+
"Xwayland",
|
|
14323
|
+
"gdm",
|
|
14324
|
+
"sddm",
|
|
14325
|
+
"lightdm"
|
|
14326
|
+
];
|
|
14327
|
+
SERVER_SERVICES = [
|
|
14328
|
+
"nginx",
|
|
14329
|
+
"apache2",
|
|
14330
|
+
"httpd",
|
|
14331
|
+
"mysqld",
|
|
14332
|
+
"mariadbd",
|
|
14333
|
+
"postgres",
|
|
14334
|
+
"postgresql",
|
|
14335
|
+
"redis-server",
|
|
14336
|
+
"mongod"
|
|
14337
|
+
];
|
|
14338
|
+
SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
|
|
14339
|
+
escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
|
|
14340
|
+
SERVICE_WORD_RE = new RegExp(
|
|
14341
|
+
`(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
|
|
14342
|
+
"i"
|
|
14343
|
+
);
|
|
14344
|
+
INIT_PATTERN_RE = /(?:["'*])init(?:["'*])/;
|
|
14345
|
+
UNIT_ALIASES = {
|
|
14346
|
+
docker: "dockerd",
|
|
14347
|
+
ssh: "sshd",
|
|
14348
|
+
mysql: "mysqld",
|
|
14349
|
+
mariadb: "mariadbd",
|
|
14350
|
+
redis: "redis-server",
|
|
14351
|
+
mongodb: "mongod",
|
|
14352
|
+
apache: "apache2",
|
|
14353
|
+
rsyslog: "rsyslogd",
|
|
14354
|
+
"systemd-networkd": "systemd-udevd",
|
|
14355
|
+
dbus: "dbus-daemon",
|
|
14356
|
+
avahi: "avahi-daemon",
|
|
14357
|
+
bluetooth: "bluetoothd",
|
|
14358
|
+
cups: "cupsd",
|
|
14359
|
+
chrony: "chronyd"
|
|
14360
|
+
};
|
|
14050
14361
|
MAX_INLINE_CODE = 64 * 1024;
|
|
14051
14362
|
WHAT = {
|
|
14052
14363
|
deletes: "deletes files",
|
|
@@ -14058,7 +14369,15 @@ var init_dist = __esm({
|
|
|
14058
14369
|
"builds-code": "runs code it builds at run time",
|
|
14059
14370
|
permissions: "changes permissions or ownership",
|
|
14060
14371
|
monitors: "captures the screen, the clipboard or the keyboard",
|
|
14061
|
-
amplifies: "writes or sends in an endless loop"
|
|
14372
|
+
amplifies: "writes or sends in an endless loop",
|
|
14373
|
+
"kills-service": "stops a system service"
|
|
14374
|
+
};
|
|
14375
|
+
KILL_API = {
|
|
14376
|
+
python: /\bos\.kill(?:pg)?\s*\(|\.(?:kill|terminate)\s*\(|\bsignal\.SIGKILL\b/,
|
|
14377
|
+
node: /\bprocess\.kill\s*\(|\.kill\s*\(\s*['"`]?SIG/,
|
|
14378
|
+
perl: /\bkill\s+(?:-?\d+|['"]?[A-Z]+['"]?)\s*,/,
|
|
14379
|
+
ruby: /\bProcess\.kill\b/,
|
|
14380
|
+
php: /\bposix_kill\s*\(/
|
|
14062
14381
|
};
|
|
14063
14382
|
OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
|
|
14064
14383
|
pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
|
|
@@ -19957,6 +20276,7 @@ ${text}` : text);
|
|
|
19957
20276
|
"commands.sql-no-where",
|
|
19958
20277
|
"commands.temp-binary",
|
|
19959
20278
|
"commands.disk-destroy",
|
|
20279
|
+
"commands.system-processes",
|
|
19960
20280
|
"commands.dangerous-word",
|
|
19961
20281
|
"commands.node9-disarm",
|
|
19962
20282
|
"commands.reverse-shell",
|
|
@@ -20171,6 +20491,12 @@ ${text}` : text);
|
|
|
20171
20491
|
const char = value[index] ?? "";
|
|
20172
20492
|
return RUN_CHAR.test(char) || char !== "" && isInvisibleChar(char);
|
|
20173
20493
|
};
|
|
20494
|
+
PRESCREEN_RE3 = /\b(?:kill|pkill|killall|systemctl|service|launchctl|xargs)\b/;
|
|
20495
|
+
KILL_SIGNAL_RE = /^-(?:\d+|s|SIG[A-Z]+|[A-Z]{2,})$/;
|
|
20496
|
+
SYSTEMCTL_STOP_VERBS = /* @__PURE__ */ new Set(["stop", "kill", "disable", "mask"]);
|
|
20497
|
+
LAUNCHCTL_UNLOAD_VERBS = /* @__PURE__ */ new Set(["unload", "bootout", "remove"]);
|
|
20498
|
+
LAUNCH_DAEMONS_RE = /(?:^|\/)(?:System\/)?Library\/LaunchDaemons\//;
|
|
20499
|
+
MAX_PAYLOAD_DEPTH5 = 3;
|
|
20174
20500
|
RULE_NAME2 = "review-node9-disarm";
|
|
20175
20501
|
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.";
|
|
20176
20502
|
DAEMON_CMDLINES = [
|