@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.js
CHANGED
|
@@ -957,12 +957,46 @@ function wordValues(word, state) {
|
|
|
957
957
|
if (!dynamic) return out.map(asWord);
|
|
958
958
|
return out.filter((piece) => piece.value !== "").map((piece) => ({ value: piece.value, pattern: piece.pattern + "*", dynamic: true }));
|
|
959
959
|
}
|
|
960
|
+
function sedSubstitutions(script) {
|
|
961
|
+
const out = [];
|
|
962
|
+
for (const raw of script.split(/\r?\n|;/)) {
|
|
963
|
+
const cmd = raw.trim();
|
|
964
|
+
if (cmd === "") continue;
|
|
965
|
+
const m = /^(?:(?:\d+|\$|\/(?:\\.|[^\\/])*\/)(?:,(?:\d+|\$|\/(?:\\.|[^\\/])*\/))?)?s(.)/.exec(
|
|
966
|
+
cmd
|
|
967
|
+
);
|
|
968
|
+
if (!m) return null;
|
|
969
|
+
const delimiter = m[1];
|
|
970
|
+
if (delimiter === "\\") return null;
|
|
971
|
+
const parts = [];
|
|
972
|
+
let cur = "";
|
|
973
|
+
let i = m[0].length;
|
|
974
|
+
for (; i < cmd.length && parts.length < 2; i++) {
|
|
975
|
+
const ch = cmd[i];
|
|
976
|
+
if (ch === "\\" && i + 1 < cmd.length) {
|
|
977
|
+
cur += ch + cmd[++i];
|
|
978
|
+
continue;
|
|
979
|
+
}
|
|
980
|
+
if (ch === delimiter) {
|
|
981
|
+
parts.push(cur);
|
|
982
|
+
cur = "";
|
|
983
|
+
continue;
|
|
984
|
+
}
|
|
985
|
+
cur += ch;
|
|
986
|
+
}
|
|
987
|
+
if (parts.length < 2) return null;
|
|
988
|
+
if (!/^[gpiImM0-9]*$/.test(cmd.slice(i))) return null;
|
|
989
|
+
out.push(parts[1].replace(/\\(.)/g, "$1"));
|
|
990
|
+
}
|
|
991
|
+
return out.length > 0 ? out : null;
|
|
992
|
+
}
|
|
960
993
|
function collectShellFileAccesses(command, context = {}) {
|
|
961
994
|
const out = [];
|
|
962
995
|
let payloads = 256;
|
|
963
996
|
const functions = /* @__PURE__ */ new Map();
|
|
964
997
|
const seenCalls = /* @__PURE__ */ new Set();
|
|
965
998
|
const pipedStdin = /* @__PURE__ */ new WeakMap();
|
|
999
|
+
let currentStdin = null;
|
|
966
1000
|
let callWalks2 = MAX_CALL_WALKS;
|
|
967
1001
|
const initial = {
|
|
968
1002
|
cwd: [context.cwd ?? ""],
|
|
@@ -1057,8 +1091,9 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1057
1091
|
}
|
|
1058
1092
|
const locate = (p) => tokens.find((w) => w?.value === p) ?? { value: p };
|
|
1059
1093
|
if (name === "sed") {
|
|
1060
|
-
let inplace = false, hasScript = false, ended = false;
|
|
1094
|
+
let inplace = false, hasScript = false, ended = false, scriptUnknown = false;
|
|
1061
1095
|
const files = [];
|
|
1096
|
+
const scriptParts = [];
|
|
1062
1097
|
for (let i = 0; i < args.length; i++) {
|
|
1063
1098
|
const token = args[i];
|
|
1064
1099
|
if (!token) {
|
|
@@ -1076,7 +1111,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1076
1111
|
hasScript = true;
|
|
1077
1112
|
const eq = value.indexOf("=");
|
|
1078
1113
|
const script = eq < 0 ? args[++i] : { value: value.slice(eq + 1) };
|
|
1079
|
-
if (value.startsWith("--file")
|
|
1114
|
+
if (value.startsWith("--file")) {
|
|
1115
|
+
scriptUnknown = true;
|
|
1116
|
+
if (script) add("read", script, state);
|
|
1117
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1118
|
+
else scriptUnknown = true;
|
|
1080
1119
|
}
|
|
1081
1120
|
continue;
|
|
1082
1121
|
}
|
|
@@ -1091,7 +1130,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1091
1130
|
if (flag === "e" || flag === "f") {
|
|
1092
1131
|
hasScript = true;
|
|
1093
1132
|
const script = value.slice(j + 1) ? { value: value.slice(j + 1) } : args[++i];
|
|
1094
|
-
if (flag === "f"
|
|
1133
|
+
if (flag === "f") {
|
|
1134
|
+
scriptUnknown = true;
|
|
1135
|
+
if (script) add("read", script, state);
|
|
1136
|
+
} else if (script?.value) scriptParts.push(script.value);
|
|
1137
|
+
else scriptUnknown = true;
|
|
1095
1138
|
break;
|
|
1096
1139
|
}
|
|
1097
1140
|
if (flag === "l") {
|
|
@@ -1101,10 +1144,14 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1101
1144
|
}
|
|
1102
1145
|
continue;
|
|
1103
1146
|
}
|
|
1104
|
-
if (!hasScript)
|
|
1105
|
-
|
|
1147
|
+
if (!hasScript) {
|
|
1148
|
+
hasScript = true;
|
|
1149
|
+
scriptParts.push(value);
|
|
1150
|
+
} else files.push(token);
|
|
1106
1151
|
}
|
|
1107
|
-
|
|
1152
|
+
const edits = inplace && !scriptUnknown ? sedSubstitutions(scriptParts.join("\n")) : null;
|
|
1153
|
+
for (const file2 of files)
|
|
1154
|
+
add(inplace ? "write" : "read", file2, state, edits ? { edits } : {});
|
|
1108
1155
|
return;
|
|
1109
1156
|
}
|
|
1110
1157
|
if (FS_READ_TOOLS.has(name) && name !== "dd") {
|
|
@@ -1231,9 +1278,11 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1231
1278
|
continue;
|
|
1232
1279
|
const remove = name === "rm" || name === "unlink";
|
|
1233
1280
|
const append = name === "tee" && strings.some((s) => s === "--append" || /^-[^-]*a/.test(s));
|
|
1281
|
+
const teed = name === "tee" && !append ? currentStdin : null;
|
|
1234
1282
|
add(remove ? "remove" : name === "touch" ? "create" : "write", token, state, {
|
|
1235
1283
|
recursive: remove && strings.some((s) => /^-[^-]*[rR]/.test(s) || s === "--recursive"),
|
|
1236
|
-
...append ? { append: true } : {}
|
|
1284
|
+
...append ? { append: true } : {},
|
|
1285
|
+
...teed !== null ? { text: teed } : {}
|
|
1237
1286
|
});
|
|
1238
1287
|
}
|
|
1239
1288
|
return;
|
|
@@ -1555,11 +1604,18 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1555
1604
|
if (stmt.Background) state = clone(state);
|
|
1556
1605
|
const headWord = stmt.Cmd && stmt.Cmd.kind === "CallExpr" ? base(resolveWordLiteral(stmt.Cmd.Args?.[0])) : "";
|
|
1557
1606
|
const sends = SENDING_STDIN.has(headWord);
|
|
1607
|
+
let produced;
|
|
1558
1608
|
for (const redir of stmt.Redirs ?? []) {
|
|
1559
1609
|
substitutions(redir.Word, state, depth);
|
|
1560
1610
|
for (const word of wordValues(redir.Word, state)) {
|
|
1561
|
-
if (ops().WRITES.has(redir.Op))
|
|
1562
|
-
|
|
1611
|
+
if (ops().WRITES.has(redir.Op)) {
|
|
1612
|
+
if (ops().APPENDS.has(redir.Op)) add("write", word, state, { append: true });
|
|
1613
|
+
else {
|
|
1614
|
+
const stdout = redir.N == null || redir.N.Value === "1";
|
|
1615
|
+
if (stdout && produced === void 0) produced = producedText(stmt);
|
|
1616
|
+
add("write", word, state, stdout && produced ? { text: produced } : {});
|
|
1617
|
+
}
|
|
1618
|
+
}
|
|
1563
1619
|
if (ops().READS.has(redir.Op)) add("read", word, state, sends ? { upload: true } : {});
|
|
1564
1620
|
if (redir.Op === ops().DUP_OUT && word.value && !/^\d+$/.test(word.value))
|
|
1565
1621
|
add("write", word, state);
|
|
@@ -1571,6 +1627,7 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1571
1627
|
stdinScript(stmt, state, depth);
|
|
1572
1628
|
const fedText = stdinText(stmt);
|
|
1573
1629
|
if (fedText !== null) nestedPayload(xargsPayload(stmt, fedText), clone(state), depth);
|
|
1630
|
+
currentStdin = fedText;
|
|
1574
1631
|
switch (cmd.kind) {
|
|
1575
1632
|
case "CallExpr":
|
|
1576
1633
|
call(cmd, state, depth);
|
|
@@ -1684,6 +1741,26 @@ function collectShellFileAccesses(command, context = {}) {
|
|
|
1684
1741
|
}
|
|
1685
1742
|
return out;
|
|
1686
1743
|
}
|
|
1744
|
+
function serviceNamedIn(text) {
|
|
1745
|
+
const re = new RegExp(SERVICE_WORD_RE.source, "gi");
|
|
1746
|
+
for (let m = re.exec(text); m; m = re.exec(text)) {
|
|
1747
|
+
const lower2 = m[1].toLowerCase();
|
|
1748
|
+
if (lower2 === "init" && !INIT_PATTERN_RE.test(text)) continue;
|
|
1749
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? m[1];
|
|
1750
|
+
}
|
|
1751
|
+
return null;
|
|
1752
|
+
}
|
|
1753
|
+
function serviceOf(name) {
|
|
1754
|
+
const leaf = name.replace(/^.*[\\/]/, "").replace(/\.service$/, "").replace(/@.*$/, "");
|
|
1755
|
+
const lower2 = leaf.toLowerCase();
|
|
1756
|
+
return SYSTEM_SERVICES.find((s) => s.toLowerCase() === lower2) ?? UNIT_ALIASES[lower2] ?? null;
|
|
1757
|
+
}
|
|
1758
|
+
function killsService(language, code) {
|
|
1759
|
+
const api = KILL_API[language].exec(code);
|
|
1760
|
+
if (!api) return null;
|
|
1761
|
+
const service = serviceNamedIn(code);
|
|
1762
|
+
return service ? `${api[0].trim()} with ${service}` : null;
|
|
1763
|
+
}
|
|
1687
1764
|
function inlineLanguageOf(interp) {
|
|
1688
1765
|
const i = interp.toLowerCase();
|
|
1689
1766
|
if (/^python[\d.]*$/.test(i)) return "python";
|
|
@@ -1758,6 +1835,15 @@ function judgeInlineCode(language, code, isProtected) {
|
|
|
1758
1835
|
return { outcome: "unreadable", what: "is too long for node9 to read" };
|
|
1759
1836
|
}
|
|
1760
1837
|
const text = language === "python" ? resolvePythonAliases(code) : code;
|
|
1838
|
+
const killed = killsService(language, text);
|
|
1839
|
+
if (killed) {
|
|
1840
|
+
return {
|
|
1841
|
+
outcome: "dangerous",
|
|
1842
|
+
what: WHAT["kills-service"],
|
|
1843
|
+
evidence: killed.slice(0, 60),
|
|
1844
|
+
category: "kills-service"
|
|
1845
|
+
};
|
|
1846
|
+
}
|
|
1761
1847
|
for (const [category, re] of TABLES[language]) {
|
|
1762
1848
|
const m = re.exec(text);
|
|
1763
1849
|
if (!m) continue;
|
|
@@ -6572,8 +6658,16 @@ function evaluateGitHooksFileAccess(args, accesses, context, settings, shell) {
|
|
|
6572
6658
|
disarms = true;
|
|
6573
6659
|
how = "removed";
|
|
6574
6660
|
} else if (texts === null) {
|
|
6575
|
-
|
|
6576
|
-
|
|
6661
|
+
if (access.edits) {
|
|
6662
|
+
disarms = access.edits.some(editDisarms);
|
|
6663
|
+
how = "edited to exit";
|
|
6664
|
+
} else if (access.text !== void 0) {
|
|
6665
|
+
disarms = hookTextRunsNothing(access.text);
|
|
6666
|
+
how = "emptied";
|
|
6667
|
+
} else {
|
|
6668
|
+
disarms = true;
|
|
6669
|
+
how = "overwritten";
|
|
6670
|
+
}
|
|
6577
6671
|
} else if (texts.whole.length > 0) {
|
|
6578
6672
|
disarms = texts.whole.some(hookTextRunsNothing);
|
|
6579
6673
|
how = "emptied";
|
|
@@ -8405,6 +8499,118 @@ function scanArgumentSecrets(args) {
|
|
|
8405
8499
|
severity: "review"
|
|
8406
8500
|
} : null;
|
|
8407
8501
|
}
|
|
8502
|
+
function shownOf2(words) {
|
|
8503
|
+
return words.map((w) => w ?? "$?").join(" ").slice(0, 80);
|
|
8504
|
+
}
|
|
8505
|
+
function withoutComments(command) {
|
|
8506
|
+
return command.split("\n").map((line) => {
|
|
8507
|
+
for (let i = 0; i < line.length; i++) {
|
|
8508
|
+
if (line[i] === "#" && (i === 0 || line[i - 1] === " " || line[i - 1] === " ")) {
|
|
8509
|
+
return line.slice(0, i);
|
|
8510
|
+
}
|
|
8511
|
+
}
|
|
8512
|
+
return line;
|
|
8513
|
+
}).join("\n");
|
|
8514
|
+
}
|
|
8515
|
+
function detectSystemProcessStop(command, depth = 0) {
|
|
8516
|
+
if (!PRESCREEN_RE3.test(command)) return null;
|
|
8517
|
+
const named = serviceNamedIn(withoutComments(command));
|
|
8518
|
+
let direct = null;
|
|
8519
|
+
let dynamicKill = null;
|
|
8520
|
+
walkCommandScope(command, (node) => {
|
|
8521
|
+
const n = node;
|
|
8522
|
+
if (direct || !n || n.kind !== "CallExpr") return true;
|
|
8523
|
+
const words = (n.Args || []).map((a) => resolveWordLiteral(a));
|
|
8524
|
+
if (words.length === 0) return true;
|
|
8525
|
+
if (baseWord(words[0]) === "xargs" && words.some((w) => w !== null && baseWord(w) === "kill")) {
|
|
8526
|
+
dynamicKill ??= shownOf2(words);
|
|
8527
|
+
return true;
|
|
8528
|
+
}
|
|
8529
|
+
if (depth < MAX_PAYLOAD_DEPTH5) {
|
|
8530
|
+
const payload = literalShellPayload(words, baseWord(words[0]));
|
|
8531
|
+
if (payload !== null) {
|
|
8532
|
+
const inner = detectSystemProcessStop(payload, depth + 1);
|
|
8533
|
+
if (inner) direct = inner;
|
|
8534
|
+
return true;
|
|
8535
|
+
}
|
|
8536
|
+
}
|
|
8537
|
+
const head = unwrapCommandHead(words);
|
|
8538
|
+
if (head >= words.length) return true;
|
|
8539
|
+
const name = baseWord(words[head]);
|
|
8540
|
+
const rest = words.slice(head + 1);
|
|
8541
|
+
const shown = shownOf2(words);
|
|
8542
|
+
const viaXargs = words.slice(0, head).some((w) => w !== null && baseWord(w) === "xargs");
|
|
8543
|
+
if (name === "kill") {
|
|
8544
|
+
const targets = [];
|
|
8545
|
+
for (let i = 0; i < rest.length; i++) {
|
|
8546
|
+
const w = rest[i];
|
|
8547
|
+
if (i === 0 && w !== null && KILL_SIGNAL_RE.test(w)) {
|
|
8548
|
+
if (w === "-s") i++;
|
|
8549
|
+
continue;
|
|
8550
|
+
}
|
|
8551
|
+
if (w === "--") continue;
|
|
8552
|
+
targets.push(w);
|
|
8553
|
+
}
|
|
8554
|
+
if (targets.some((t) => t === "1" || t === "-1")) {
|
|
8555
|
+
direct = { service: "init (pid 1)", how: "kills", shown };
|
|
8556
|
+
} else if (viaXargs || targets.some((t) => t === null)) {
|
|
8557
|
+
dynamicKill ??= shown;
|
|
8558
|
+
}
|
|
8559
|
+
return true;
|
|
8560
|
+
}
|
|
8561
|
+
if (name === "pkill" || name === "killall") {
|
|
8562
|
+
let skipValue = false;
|
|
8563
|
+
for (const w of rest) {
|
|
8564
|
+
if (skipValue) {
|
|
8565
|
+
skipValue = false;
|
|
8566
|
+
continue;
|
|
8567
|
+
}
|
|
8568
|
+
if (w !== null && w.startsWith("-")) {
|
|
8569
|
+
if (/^-(?:u|U|g|G|t|P|s|n|o|r|q|-signal|-uid|-user)$/.test(w)) skipValue = true;
|
|
8570
|
+
continue;
|
|
8571
|
+
}
|
|
8572
|
+
if (w === null) {
|
|
8573
|
+
dynamicKill ??= shown;
|
|
8574
|
+
continue;
|
|
8575
|
+
}
|
|
8576
|
+
const service = serviceOf(w) ?? serviceNamedIn(w);
|
|
8577
|
+
if (service) direct = { service, how: "kills", shown };
|
|
8578
|
+
}
|
|
8579
|
+
return true;
|
|
8580
|
+
}
|
|
8581
|
+
if (name === "systemctl") {
|
|
8582
|
+
if (rest.includes("--user")) return true;
|
|
8583
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8584
|
+
if (verb === void 0 || verb === null || !SYSTEMCTL_STOP_VERBS.has(verb)) return true;
|
|
8585
|
+
for (const w of rest.slice(rest.indexOf(verb) + 1)) {
|
|
8586
|
+
const service = w === null ? null : serviceOf(w);
|
|
8587
|
+
if (service) direct = { service, how: verb === "kill" ? "kills" : "stops", shown };
|
|
8588
|
+
}
|
|
8589
|
+
return true;
|
|
8590
|
+
}
|
|
8591
|
+
if (name === "service") {
|
|
8592
|
+
const [unit, verb] = rest;
|
|
8593
|
+
const service = typeof unit === "string" ? serviceOf(unit) : null;
|
|
8594
|
+
if (service && verb === "stop") direct = { service, how: "stops", shown };
|
|
8595
|
+
return true;
|
|
8596
|
+
}
|
|
8597
|
+
if (name === "launchctl") {
|
|
8598
|
+
const verb = rest.find((w) => w !== null && !w.startsWith("-"));
|
|
8599
|
+
if (verb === void 0 || verb === null || !LAUNCHCTL_UNLOAD_VERBS.has(verb)) return true;
|
|
8600
|
+
const daemon = rest.find((w) => w !== null && LAUNCH_DAEMONS_RE.test(w));
|
|
8601
|
+
if (daemon) {
|
|
8602
|
+
direct = { service: daemon.replace(/^.*\//, ""), how: "unloads the system daemon", shown };
|
|
8603
|
+
}
|
|
8604
|
+
return true;
|
|
8605
|
+
}
|
|
8606
|
+
return true;
|
|
8607
|
+
});
|
|
8608
|
+
if (direct) return direct;
|
|
8609
|
+
if (dynamicKill !== null && named) {
|
|
8610
|
+
return { service: named, how: "kills the processes of", shown: dynamicKill };
|
|
8611
|
+
}
|
|
8612
|
+
return null;
|
|
8613
|
+
}
|
|
8408
8614
|
function patternSelects(pattern, targets) {
|
|
8409
8615
|
const pieces = pattern.toLowerCase().split(/[\\^$.*+?()[\]{}|]+/).filter(Boolean);
|
|
8410
8616
|
if (pieces.length === 0) return false;
|
|
@@ -9024,6 +9230,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
|
|
|
9024
9230
|
checkId: "commands.eval-dynamic"
|
|
9025
9231
|
});
|
|
9026
9232
|
}
|
|
9233
|
+
const stopped = detectSystemProcessStop(shellCommand);
|
|
9234
|
+
if (stopped) {
|
|
9235
|
+
consider("commands.system-processes", {
|
|
9236
|
+
decision: "review",
|
|
9237
|
+
blockedByLabel: "Node9: System Service Stopped",
|
|
9238
|
+
reason: `The AI ${stopped.how} ${stopped.service}: ${stopped.shown}`,
|
|
9239
|
+
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.",
|
|
9240
|
+
tier: 3,
|
|
9241
|
+
checkId: "commands.system-processes"
|
|
9242
|
+
});
|
|
9243
|
+
}
|
|
9027
9244
|
const builtin = strictestVerdict(candidates);
|
|
9028
9245
|
if (builtin) return builtin;
|
|
9029
9246
|
{
|
|
@@ -10102,7 +10319,7 @@ function matchCanaryArgs(args, values) {
|
|
|
10102
10319
|
return null;
|
|
10103
10320
|
}
|
|
10104
10321
|
}
|
|
10105
|
-
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, 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;
|
|
10322
|
+
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, 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;
|
|
10106
10323
|
var init_dist = __esm({
|
|
10107
10324
|
"packages/policy-engine/dist/index.mjs"() {
|
|
10108
10325
|
"use strict";
|
|
@@ -11988,6 +12205,11 @@ var init_dist = __esm({
|
|
|
11988
12205
|
example: "/tmp/build-helper --serve",
|
|
11989
12206
|
advice: "Keep Review. Malware often runs from /tmp."
|
|
11990
12207
|
},
|
|
12208
|
+
"commands.system-processes": {
|
|
12209
|
+
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.",
|
|
12210
|
+
example: "ps -eo pid,cmd | grep sshd | awk '{print $1}' | xargs kill -9",
|
|
12211
|
+
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."
|
|
12212
|
+
},
|
|
11991
12213
|
"commands.disk-destroy": {
|
|
11992
12214
|
plain: "The agent formats, overwrites or securely erases a disk or file.",
|
|
11993
12215
|
example: "dd if=/dev/zero of=/dev/sda",
|
|
@@ -12157,6 +12379,7 @@ var init_dist = __esm({
|
|
|
12157
12379
|
"commands.sql-no-where": "log",
|
|
12158
12380
|
"commands.temp-binary": "log",
|
|
12159
12381
|
"commands.disk-destroy": "log",
|
|
12382
|
+
"commands.system-processes": "log",
|
|
12160
12383
|
"commands.dangerous-word": "log",
|
|
12161
12384
|
"files.system-dirs": "log",
|
|
12162
12385
|
"files.shell-startup": "log",
|
|
@@ -12475,6 +12698,16 @@ var init_dist = __esm({
|
|
|
12475
12698
|
defaultValue: "review",
|
|
12476
12699
|
legacy: ["Manual Nuclear Protection"]
|
|
12477
12700
|
},
|
|
12701
|
+
{
|
|
12702
|
+
id: "commands.system-processes",
|
|
12703
|
+
group: "commands",
|
|
12704
|
+
owasp: "ASI02",
|
|
12705
|
+
title: "Stops a system service",
|
|
12706
|
+
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",
|
|
12707
|
+
values: ALL,
|
|
12708
|
+
defaultValue: "review",
|
|
12709
|
+
legacy: ["Node9: System Service Stopped"]
|
|
12710
|
+
},
|
|
12478
12711
|
{
|
|
12479
12712
|
id: "commands.dangerous-word",
|
|
12480
12713
|
group: "commands",
|
|
@@ -13134,6 +13367,82 @@ var init_dist = __esm({
|
|
|
13134
13367
|
)
|
|
13135
13368
|
)
|
|
13136
13369
|
}));
|
|
13370
|
+
INFRASTRUCTURE_SERVICES = [
|
|
13371
|
+
"init",
|
|
13372
|
+
"sshd",
|
|
13373
|
+
"dockerd",
|
|
13374
|
+
"docker-proxy",
|
|
13375
|
+
"containerd",
|
|
13376
|
+
"containerd-shim",
|
|
13377
|
+
"docker-containerd-shim",
|
|
13378
|
+
"runc",
|
|
13379
|
+
"systemd-journald",
|
|
13380
|
+
"journald",
|
|
13381
|
+
"systemd-logind",
|
|
13382
|
+
"systemd-udevd",
|
|
13383
|
+
"udevd",
|
|
13384
|
+
"dbus-daemon",
|
|
13385
|
+
"polkitd",
|
|
13386
|
+
"sssd",
|
|
13387
|
+
"kubelet",
|
|
13388
|
+
"kube-apiserver",
|
|
13389
|
+
"crond",
|
|
13390
|
+
"cron",
|
|
13391
|
+
"atd",
|
|
13392
|
+
"auditd",
|
|
13393
|
+
"rsyslogd",
|
|
13394
|
+
"syslogd",
|
|
13395
|
+
"chronyd",
|
|
13396
|
+
"ntpd",
|
|
13397
|
+
"NetworkManager",
|
|
13398
|
+
"wpa_supplicant",
|
|
13399
|
+
"dhclient",
|
|
13400
|
+
"avahi-daemon",
|
|
13401
|
+
"firewalld",
|
|
13402
|
+
"ufw",
|
|
13403
|
+
"cupsd",
|
|
13404
|
+
"snapd",
|
|
13405
|
+
"bluetoothd",
|
|
13406
|
+
"Xorg",
|
|
13407
|
+
"Xwayland",
|
|
13408
|
+
"gdm",
|
|
13409
|
+
"sddm",
|
|
13410
|
+
"lightdm"
|
|
13411
|
+
];
|
|
13412
|
+
SERVER_SERVICES = [
|
|
13413
|
+
"nginx",
|
|
13414
|
+
"apache2",
|
|
13415
|
+
"httpd",
|
|
13416
|
+
"mysqld",
|
|
13417
|
+
"mariadbd",
|
|
13418
|
+
"postgres",
|
|
13419
|
+
"postgresql",
|
|
13420
|
+
"redis-server",
|
|
13421
|
+
"mongod"
|
|
13422
|
+
];
|
|
13423
|
+
SYSTEM_SERVICES = [...INFRASTRUCTURE_SERVICES, ...SERVER_SERVICES];
|
|
13424
|
+
escape = (s) => s.replace(/[.*+?^${}()|[\]\\-]/g, "\\$&");
|
|
13425
|
+
SERVICE_WORD_RE = new RegExp(
|
|
13426
|
+
`(?:^|[^A-Za-z0-9_.-])(${SYSTEM_SERVICES.map(escape).join("|")})(?![A-Za-z0-9_.-])`,
|
|
13427
|
+
"i"
|
|
13428
|
+
);
|
|
13429
|
+
INIT_PATTERN_RE = /(?:["'*])init(?:["'*])/;
|
|
13430
|
+
UNIT_ALIASES = {
|
|
13431
|
+
docker: "dockerd",
|
|
13432
|
+
ssh: "sshd",
|
|
13433
|
+
mysql: "mysqld",
|
|
13434
|
+
mariadb: "mariadbd",
|
|
13435
|
+
redis: "redis-server",
|
|
13436
|
+
mongodb: "mongod",
|
|
13437
|
+
apache: "apache2",
|
|
13438
|
+
rsyslog: "rsyslogd",
|
|
13439
|
+
"systemd-networkd": "systemd-udevd",
|
|
13440
|
+
dbus: "dbus-daemon",
|
|
13441
|
+
avahi: "avahi-daemon",
|
|
13442
|
+
bluetooth: "bluetoothd",
|
|
13443
|
+
cups: "cupsd",
|
|
13444
|
+
chrony: "chronyd"
|
|
13445
|
+
};
|
|
13137
13446
|
MAX_INLINE_CODE = 64 * 1024;
|
|
13138
13447
|
WHAT = {
|
|
13139
13448
|
deletes: "deletes files",
|
|
@@ -13145,7 +13454,15 @@ var init_dist = __esm({
|
|
|
13145
13454
|
"builds-code": "runs code it builds at run time",
|
|
13146
13455
|
permissions: "changes permissions or ownership",
|
|
13147
13456
|
monitors: "captures the screen, the clipboard or the keyboard",
|
|
13148
|
-
amplifies: "writes or sends in an endless loop"
|
|
13457
|
+
amplifies: "writes or sends in an endless loop",
|
|
13458
|
+
"kills-service": "stops a system service"
|
|
13459
|
+
};
|
|
13460
|
+
KILL_API = {
|
|
13461
|
+
python: /\bos\.kill(?:pg)?\s*\(|\.(?:kill|terminate)\s*\(|\bsignal\.SIGKILL\b/,
|
|
13462
|
+
node: /\bprocess\.kill\s*\(|\.kill\s*\(\s*['"`]?SIG/,
|
|
13463
|
+
perl: /\bkill\s+(?:-?\d+|['"]?[A-Z]+['"]?)\s*,/,
|
|
13464
|
+
ruby: /\bProcess\.kill\b/,
|
|
13465
|
+
php: /\bposix_kill\s*\(/
|
|
13149
13466
|
};
|
|
13150
13467
|
OUTSIDE = String.raw`(?:~|\.\.[\\/]|/(?!(?:tmp|var/tmp)/(?![^'"\n]*\.\.)|dev/(?:null|stdout|stderr)\b))`;
|
|
13151
13468
|
pyImport = (mods) => new RegExp(String.raw`\b(?:import\s+(?:[\w.]+(?:\s+as\s+\w+)?\s*,\s*)*|from\s+)(?:${mods})\b`);
|
|
@@ -19036,6 +19353,7 @@ ${text}` : text);
|
|
|
19036
19353
|
"commands.sql-no-where",
|
|
19037
19354
|
"commands.temp-binary",
|
|
19038
19355
|
"commands.disk-destroy",
|
|
19356
|
+
"commands.system-processes",
|
|
19039
19357
|
"commands.dangerous-word",
|
|
19040
19358
|
"commands.node9-disarm",
|
|
19041
19359
|
"commands.reverse-shell",
|
|
@@ -19250,6 +19568,12 @@ ${text}` : text);
|
|
|
19250
19568
|
const char = value[index] ?? "";
|
|
19251
19569
|
return RUN_CHAR.test(char) || char !== "" && isInvisibleChar(char);
|
|
19252
19570
|
};
|
|
19571
|
+
PRESCREEN_RE3 = /\b(?:kill|pkill|killall|systemctl|service|launchctl|xargs)\b/;
|
|
19572
|
+
KILL_SIGNAL_RE = /^-(?:\d+|s|SIG[A-Z]+|[A-Z]{2,})$/;
|
|
19573
|
+
SYSTEMCTL_STOP_VERBS = /* @__PURE__ */ new Set(["stop", "kill", "disable", "mask"]);
|
|
19574
|
+
LAUNCHCTL_UNLOAD_VERBS = /* @__PURE__ */ new Set(["unload", "bootout", "remove"]);
|
|
19575
|
+
LAUNCH_DAEMONS_RE = /(?:^|\/)(?:System\/)?Library\/LaunchDaemons\//;
|
|
19576
|
+
MAX_PAYLOAD_DEPTH5 = 3;
|
|
19253
19577
|
RULE_NAME2 = "review-node9-disarm";
|
|
19254
19578
|
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.";
|
|
19255
19579
|
DAEMON_CMDLINES = [
|