@agent-beam/beam 0.2.31 → 0.2.33
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/README.md +26 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/monitor-client.d.ts +44 -0
- package/dist/monitor-client.js.map +1 -1
- package/dist/monitor-pipeline.d.ts +60 -9
- package/dist/monitor-pipeline.js +325 -5
- package/dist/monitor-pipeline.js.map +1 -1
- package/dist/monitor-rules.d.ts +58 -0
- package/dist/monitor-rules.js +130 -1
- package/dist/monitor-rules.js.map +1 -1
- package/dist/monitor-signals.d.ts +63 -0
- package/dist/monitor-signals.js +125 -0
- package/dist/monitor-signals.js.map +1 -0
- package/dist/monitor-stacks.d.ts +41 -0
- package/dist/monitor-stacks.js +129 -0
- package/dist/monitor-stacks.js.map +1 -0
- package/dist/monitor.d.ts +2 -0
- package/dist/monitor.js +9 -1
- package/dist/monitor.js.map +1 -1
- package/dist/sdk.d.ts +60 -0
- package/dist/sdk.js +93 -8
- package/dist/sdk.js.map +1 -1
- package/dist/stack-detect.d.ts +3 -0
- package/dist/stack-detect.js +62 -0
- package/dist/stack-detect.js.map +1 -0
- package/package.json +3 -1
- package/stress-report.json +51 -44
package/dist/monitor-rules.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
// from prompt-attacks.ts. Heuristic, like everything else in Beam.
|
|
7
7
|
import { builtinRulesById } from "./rule-catalog.js";
|
|
8
8
|
import { promptAttack, revealHidden } from "./prompt-attacks.js";
|
|
9
|
+
import { foreignTo, pathFamilies, stackRules } from "./monitor-stacks.js";
|
|
9
10
|
// Trailing boundary for shell commands, so `| id=5` in a log line isn't read as running `id`.
|
|
10
11
|
const END = String.raw `(?=$|[\s;'"&|)\x60])`;
|
|
11
12
|
const commandInjection = new RegExp(String.raw `(?:[;|\x60]|\$\(|&&)\s*(?:id|whoami|uname\s+-a|cat\s+/etc/(?:passwd|shadow)|(?:curl|wget)\s+\S+|nc\s+-\w|bash\s+-[ic]|sh\s+-c|ping\s+-c\s*\d+)${END}`, "i");
|
|
@@ -138,7 +139,7 @@ const sharedRules = builtinRulesById(["network.reverse-shell", "execution.remote
|
|
|
138
139
|
// An agent asked to fetch the metadata endpoint is the same attack as a request for it.
|
|
139
140
|
...(r.id === "network.metadata" ? { sources: EVERYWHERE } : {}),
|
|
140
141
|
}));
|
|
141
|
-
export const monitorRules = [...appRules, ...llmRules, ...sharedRules];
|
|
142
|
+
export const monitorRules = [...appRules, ...llmRules, ...sharedRules, ...stackRules];
|
|
142
143
|
const CLASSIC = ["log", "http"];
|
|
143
144
|
const HTTP_LINE = /"(?:GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|CONNECT|TRACE) \S+ HTTP\/[\d.]+"|^\S+ \S+ \S+ \[[^\]]+\] "|"(?:method|http_method|request_method)"\s*:\s*"[A-Z]+"/;
|
|
144
145
|
export function lineSource(line) {
|
|
@@ -216,6 +217,66 @@ export function isLlmRequest(line) {
|
|
|
216
217
|
const path = request?.[2] ?? line.match(JSON_PATH)?.[1];
|
|
217
218
|
return method === "POST" && Boolean(path && LLM_PATH.test(path.split("?")[0]));
|
|
218
219
|
}
|
|
220
|
+
// nginx/Apache combined: "GET /x HTTP/1.1" 404 512 "referer" "agent"
|
|
221
|
+
const COMBINED = /"([A-Z]+) (\S+) HTTP\/[\d.]+" (\d{3}) (\d+|-)(?: "([^"]*)" "([^"]*)")?/;
|
|
222
|
+
const jsonField = (names, number = false) => new RegExp(`"(?:${names})"\\s*:\\s*${number ? String.raw `"?(\d{1,12}(?:\.\d+)?)` : String.raw `"((?:[^"\\]|\\.){0,2000})"`}`);
|
|
223
|
+
const J_HOST = jsonField("host|hostname|http_host|domain|requestHost");
|
|
224
|
+
const J_UA = jsonField("clientUa|userAgent|user_agent|http_user_agent|ua|requestUserAgent");
|
|
225
|
+
const J_REFERER = jsonField("referer|referrer|http_referer");
|
|
226
|
+
const J_COUNTRY = jsonField("country|geo_country|cf_ipcountry|clientCountry|ipCountry|countryCode");
|
|
227
|
+
const J_STATUS = jsonField("status|httpStatus|status_code|statusCode|response_status|responseStatusCode", true);
|
|
228
|
+
const J_BYTES = jsonField("bytes|body_bytes_sent|bytes_sent|responseBytes|response_size|responseSize", true);
|
|
229
|
+
const J_DURATION = jsonField("durationMs|duration_ms|responseTimeMs|response_time_ms|latencyMs", true);
|
|
230
|
+
const J_ASN = jsonField("asn|as_number|clientAsn|asNumber", true);
|
|
231
|
+
const unescape = (s) => (s === undefined ? undefined : s.replace(/\\(["\\/])/g, "$1"));
|
|
232
|
+
const num = (s, max) => {
|
|
233
|
+
const n = s === undefined ? NaN : Number(s);
|
|
234
|
+
return Number.isFinite(n) && n >= 0 && n <= max ? n : undefined;
|
|
235
|
+
};
|
|
236
|
+
/** Method, path, status, size, client agent and so on, from a combined-format or JSON access-log line. */
|
|
237
|
+
export function requestMeta(line) {
|
|
238
|
+
const text = line.length > 16_384 ? line.slice(0, 16_384) : line;
|
|
239
|
+
const c = text.match(COMBINED);
|
|
240
|
+
const request = c ? null : text.match(REQUEST_LINE);
|
|
241
|
+
const status = num(c?.[3] ?? text.match(J_STATUS)?.[1], 599);
|
|
242
|
+
const country = unescape(text.match(J_COUNTRY)?.[1])?.toUpperCase();
|
|
243
|
+
const meta = {
|
|
244
|
+
method: c?.[1] ?? request?.[1] ?? text.match(JSON_METHOD)?.[1],
|
|
245
|
+
path: c?.[2] ?? request?.[2] ?? unescape(text.match(JSON_PATH)?.[1]),
|
|
246
|
+
host: unescape(text.match(J_HOST)?.[1]),
|
|
247
|
+
status: status !== undefined && status >= 100 ? Math.floor(status) : undefined,
|
|
248
|
+
bytes: num(c?.[4] === "-" ? undefined : (c?.[4] ?? text.match(J_BYTES)?.[1]), 1e12),
|
|
249
|
+
durationMs: num(text.match(J_DURATION)?.[1], 3_600_000),
|
|
250
|
+
userAgent: c?.[6] ?? unescape(text.match(J_UA)?.[1]),
|
|
251
|
+
referer: c?.[5] && c[5] !== "-" ? c[5] : unescape(text.match(J_REFERER)?.[1]),
|
|
252
|
+
country: country && /^[A-Z]{2}$/.test(country) ? country : undefined,
|
|
253
|
+
asn: num(text.match(J_ASN)?.[1], 4_294_967_295),
|
|
254
|
+
};
|
|
255
|
+
for (const key of Object.keys(meta))
|
|
256
|
+
if (meta[key] === undefined || meta[key] === "")
|
|
257
|
+
delete meta[key];
|
|
258
|
+
return meta;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* With no status, a path only another stack serves (PHP, WordPress, ASP.NET, Java, a Vite dev
|
|
262
|
+
* server...) can't have worked on an app that declares its stack. `javascriptApp` is the SDK's
|
|
263
|
+
* older switch, the same as stack "node".
|
|
264
|
+
*/
|
|
265
|
+
export function requestOutcome(meta, options = {}) {
|
|
266
|
+
const status = meta.status;
|
|
267
|
+
if (status !== undefined) {
|
|
268
|
+
if (status >= 500)
|
|
269
|
+
return "failed";
|
|
270
|
+
if (status >= 300)
|
|
271
|
+
return "blocked";
|
|
272
|
+
if (status >= 200)
|
|
273
|
+
return "served";
|
|
274
|
+
}
|
|
275
|
+
const stack = options.stack ?? (options.javascriptApp ? "node" : undefined);
|
|
276
|
+
if (stack && meta.path && foreignTo(stack, pathFamilies(meta.path)))
|
|
277
|
+
return "not_applicable";
|
|
278
|
+
return "unknown";
|
|
279
|
+
}
|
|
219
280
|
/** A failed sign-in: a 401/403 on an auth path in an access log, or an app's own "login failed" line. */
|
|
220
281
|
export function isAuthFailure(line, source) {
|
|
221
282
|
if (source === "prompt" || source === "output")
|
|
@@ -224,4 +285,72 @@ export function isAuthFailure(line, source) {
|
|
|
224
285
|
return (/"\s(?:401|403)\s/.test(line) || /"(?:status|httpStatus|status_code|statusCode|response_status)"\s*:\s*"?(?:401|403)\b/.test(line)) && AUTH_PATH.test(line);
|
|
225
286
|
return AUTH_FAIL_TEXT.test(line);
|
|
226
287
|
}
|
|
288
|
+
/** Method, path and status only: the few fields the attack-in-progress signals read on every request. */
|
|
289
|
+
export function quickRequest(line) {
|
|
290
|
+
const text = line.length > 16_384 ? line.slice(0, 16_384) : line;
|
|
291
|
+
const request = text.match(REQUEST_LINE);
|
|
292
|
+
const status = text.match(ACCESS_STATUS);
|
|
293
|
+
const code = Number(status?.[1] ?? status?.[2]);
|
|
294
|
+
return {
|
|
295
|
+
method: request?.[1] ?? text.match(JSON_METHOD)?.[1],
|
|
296
|
+
path: request?.[2] ?? text.match(JSON_PATH)?.[1],
|
|
297
|
+
status: code >= 100 && code <= 599 ? code : undefined,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/** A path as a route: no query, and ids, numbers and hashes as ":id" ("/orders/8812?x=1" -> "/orders/:id"). */
|
|
301
|
+
export function routeKey(path) {
|
|
302
|
+
return (path.split(/[?#]/)[0] || "/")
|
|
303
|
+
.split("/")
|
|
304
|
+
.map(s => (/^\d+$|^[0-9a-f]{8,}$|^[0-9a-f]{8}-[0-9a-f-]{27}$|^(?=.*\d)[A-Za-z0-9_-]{16,}$/i.test(s) ? ":id" : s))
|
|
305
|
+
.join("/")
|
|
306
|
+
.slice(0, 200);
|
|
307
|
+
}
|
|
308
|
+
const AUTH_SUCCESS_TEXT = /\b(?:login|sign[- ]?in|authentication|auth)\s+(?:succeeded|successful|success|ok)\b|\b(?:successfully\s+)?(?:logged|signed)\s+in\b|\bsession\s+(?:created|started)\s+for\b/i;
|
|
309
|
+
/** A successful sign-in: a POST to an auth path answered 2xx or 3xx, or an app's "login succeeded" line. */
|
|
310
|
+
export function isAuthSuccess(line, source) {
|
|
311
|
+
if (source === "http") {
|
|
312
|
+
const r = quickRequest(line);
|
|
313
|
+
return r.method === "POST" && r.status !== undefined && r.status >= 200 && r.status < 400 && Boolean(r.path && AUTH_PATH.test(r.path.split("?")[0]));
|
|
314
|
+
}
|
|
315
|
+
return source === "log" && AUTH_SUCCESS_TEXT.test(line) && !AUTH_FAIL_TEXT.test(line);
|
|
316
|
+
}
|
|
317
|
+
// Privilege changes. Text: an app's own audit lines. Traffic: a write, answered 2xx, to an
|
|
318
|
+
// endpoint whose path names roles, permissions or keys.
|
|
319
|
+
const ADMIN_TEXT = /\b(?:granted|assigned|added|promoted|elevated|made|set)\b[^.\n]{0,60}\b(?:admin(?:istrator)?|owner|superuser|super[- ]admin|root)\b(?:\s+(?:role|access|privileges?|permissions?))?|\b(?:role|is_?admin|is_?superuser|permission)s?\b["']?\s*[:=]\s*["']?(?:admin|owner|superuser|true)\b[^.\n]{0,40}\b(?:granted|assigned|changed|updated|set)\b/i;
|
|
320
|
+
const KEY_TEXT = /\b(?:api[ _-]?key|access[ _-]?token|personal access token|service[ _-]account(?: key)?|secret key)\b[^.\n]{0,40}\b(?:created|generated|issued|added|minted)\b|\b(?:created|generated|issued|minted)\b[^.\n]{0,40}\b(?:api[ _-]?key|access[ _-]?token|personal access token|service[ _-]account key)\b/i;
|
|
321
|
+
const ADMIN_PATH = /\/(?:roles?|permissions?|grants?|promote|make[-_]admin|admins|privileges?)(?:\/|$)/i;
|
|
322
|
+
const KEY_PATH = /\/(?:api[-_]?keys?|keys|tokens|access[-_]tokens|personal[-_]access[-_]tokens|credentials|service[-_]accounts)(?:\/|$)/i;
|
|
323
|
+
/** "admin" for a role or permission grant, "key" for a new API key or token, else null. */
|
|
324
|
+
export function privilegeChange(line, source) {
|
|
325
|
+
if (source === "http") {
|
|
326
|
+
const r = quickRequest(line);
|
|
327
|
+
if (!r.method || !["POST", "PUT", "PATCH"].includes(r.method) || r.status === undefined || r.status < 200 || r.status >= 300 || !r.path)
|
|
328
|
+
return null;
|
|
329
|
+
const path = r.path.split("?")[0];
|
|
330
|
+
return ADMIN_PATH.test(path) ? "admin" : KEY_PATH.test(path) ? "key" : null;
|
|
331
|
+
}
|
|
332
|
+
if (source !== "log")
|
|
333
|
+
return null;
|
|
334
|
+
return ADMIN_TEXT.test(line) ? "admin" : KEY_TEXT.test(line) ? "key" : null;
|
|
335
|
+
}
|
|
336
|
+
const TOKENS_TOTAL = /"(?:total_tokens|totalTokens|tokens_used|tokensUsed)"\s*:\s*(\d{1,9})/;
|
|
337
|
+
const TOKENS_IN = /"(?:input_tokens|prompt_tokens|inputTokens|promptTokens)"\s*:\s*(\d{1,9})/;
|
|
338
|
+
const TOKENS_OUT = /"(?:output_tokens|completion_tokens|outputTokens|completionTokens)"\s*:\s*(\d{1,9})/;
|
|
339
|
+
const LOG_USER = /"(?:user|userId|user_id|uid|account|accountId|account_id)"\s*:\s*"([^"]{1,80})"|\b(?:user(?:_?id)?|uid|account(?:_?id)?)=([\w.@:-]{1,80})/i;
|
|
340
|
+
/** LLM token usage logged by the app (OpenAI and Anthropic usage fields), with the user it's for. */
|
|
341
|
+
export function tokenUsage(line) {
|
|
342
|
+
if (!line.includes("tokens") && !line.includes("Tokens"))
|
|
343
|
+
return null;
|
|
344
|
+
const total = line.match(TOKENS_TOTAL)?.[1];
|
|
345
|
+
const tokens = total ? Number(total) : Number(line.match(TOKENS_IN)?.[1] ?? 0) + Number(line.match(TOKENS_OUT)?.[1] ?? 0);
|
|
346
|
+
if (!tokens)
|
|
347
|
+
return null;
|
|
348
|
+
const user = line.match(LOG_USER);
|
|
349
|
+
return { tokens, user: user?.[1] ?? user?.[2] };
|
|
350
|
+
}
|
|
351
|
+
/** The user a log line is about (user=, "userId": ...), for keying sign-ins and spend. */
|
|
352
|
+
export function logUser(line) {
|
|
353
|
+
const m = line.match(LOG_USER);
|
|
354
|
+
return m?.[1] ?? m?.[2];
|
|
355
|
+
}
|
|
227
356
|
//# sourceMappingURL=monitor-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-rules.js","sourceRoot":"","sources":["../src/monitor-rules.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor-rules.js","sourceRoot":"","sources":["../src/monitor-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export declare const SIGNAL_THRESHOLDS: {
|
|
2
|
+
/** 4xx answers to one address in 10 minutes before its next 2xx counts as a scan finding something. */
|
|
3
|
+
probeMisses: {
|
|
4
|
+
light: number;
|
|
5
|
+
standard: number;
|
|
6
|
+
strict: number;
|
|
7
|
+
};
|
|
8
|
+
/** 5xx on one route in 5 minutes (and at least 5× its usual rate) before it counts as a spike. */
|
|
9
|
+
errorSpike: {
|
|
10
|
+
light: number;
|
|
11
|
+
standard: number;
|
|
12
|
+
strict: number;
|
|
13
|
+
};
|
|
14
|
+
/** Distinct paths from one address in one minute before it counts as walking the app. */
|
|
15
|
+
pathWalk: {
|
|
16
|
+
light: number;
|
|
17
|
+
standard: number;
|
|
18
|
+
strict: number;
|
|
19
|
+
};
|
|
20
|
+
/** Failed sign-ins (same address or user, 15 minutes) before a success counts as a takeover risk. */
|
|
21
|
+
loginAfterFailures: {
|
|
22
|
+
light: number;
|
|
23
|
+
standard: number;
|
|
24
|
+
strict: number;
|
|
25
|
+
};
|
|
26
|
+
/** LLM tokens for one user in an hour. */
|
|
27
|
+
tokensPerHour: {
|
|
28
|
+
light: number;
|
|
29
|
+
standard: number;
|
|
30
|
+
strict: number;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Per-key counts in one-minute slots over the last `minutes`, for sums over any part of that span
|
|
35
|
+
* (the last 5 minutes against the 30 before them). At most `maxKeys` keys; the least recently
|
|
36
|
+
* active go first.
|
|
37
|
+
*/
|
|
38
|
+
export declare class MinuteSeries {
|
|
39
|
+
private readonly minutes;
|
|
40
|
+
private readonly maxKeys;
|
|
41
|
+
private keys;
|
|
42
|
+
constructor(minutes: number, maxKeys?: number);
|
|
43
|
+
get size(): number;
|
|
44
|
+
add(key: string, now: number, amount?: number): void;
|
|
45
|
+
/** Sum over minutes `from` to `to` ago (0 is the current minute), inclusive. */
|
|
46
|
+
sum(key: string, now: number, from: number, to: number): number;
|
|
47
|
+
prune(now: number): void;
|
|
48
|
+
}
|
|
49
|
+
/** Distinct values per key in the current minute, counted up to `cap` (values are hashed to numbers). */
|
|
50
|
+
export declare class DistinctPerMinute {
|
|
51
|
+
private readonly cap;
|
|
52
|
+
private readonly maxKeys;
|
|
53
|
+
private keys;
|
|
54
|
+
constructor(cap: number, maxKeys?: number);
|
|
55
|
+
get size(): number;
|
|
56
|
+
/** Records the value and returns how many distinct values the key has this minute. */
|
|
57
|
+
add(key: string, value: string, now: number): number;
|
|
58
|
+
prune(now: number): void;
|
|
59
|
+
}
|
|
60
|
+
/** A 2xx here is worth noticing after a scan: not the home page, not a static asset. */
|
|
61
|
+
export declare function meaningfulPath(path: string): boolean;
|
|
62
|
+
/** The hostname of a URL or host string, lowercased, without port; null when it isn't one. */
|
|
63
|
+
export declare function outboundHost(value: string): string | null;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export const SIGNAL_THRESHOLDS = {
|
|
2
|
+
/** 4xx answers to one address in 10 minutes before its next 2xx counts as a scan finding something. */
|
|
3
|
+
probeMisses: { light: 60, standard: 30, strict: 15 },
|
|
4
|
+
/** 5xx on one route in 5 minutes (and at least 5× its usual rate) before it counts as a spike. */
|
|
5
|
+
errorSpike: { light: 50, standard: 20, strict: 10 },
|
|
6
|
+
/** Distinct paths from one address in one minute before it counts as walking the app. */
|
|
7
|
+
pathWalk: { light: 250, standard: 100, strict: 50 },
|
|
8
|
+
/** Failed sign-ins (same address or user, 15 minutes) before a success counts as a takeover risk. */
|
|
9
|
+
loginAfterFailures: { light: 20, standard: 10, strict: 5 },
|
|
10
|
+
/** LLM tokens for one user in an hour. */
|
|
11
|
+
tokensPerHour: { light: 2_000_000, standard: 500_000, strict: 200_000 },
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Per-key counts in one-minute slots over the last `minutes`, for sums over any part of that span
|
|
15
|
+
* (the last 5 minutes against the 30 before them). At most `maxKeys` keys; the least recently
|
|
16
|
+
* active go first.
|
|
17
|
+
*/
|
|
18
|
+
export class MinuteSeries {
|
|
19
|
+
minutes;
|
|
20
|
+
maxKeys;
|
|
21
|
+
keys = new Map();
|
|
22
|
+
constructor(minutes, maxKeys = 2000) {
|
|
23
|
+
this.minutes = minutes;
|
|
24
|
+
this.maxKeys = maxKeys;
|
|
25
|
+
}
|
|
26
|
+
get size() { return this.keys.size; }
|
|
27
|
+
add(key, now, amount = 1) {
|
|
28
|
+
const minute = Math.floor(now / 60_000);
|
|
29
|
+
let entry = this.keys.get(key);
|
|
30
|
+
if (entry)
|
|
31
|
+
this.keys.delete(key);
|
|
32
|
+
else
|
|
33
|
+
entry = { minutes: new Int32Array(this.minutes).fill(-1), counts: new Float64Array(this.minutes) };
|
|
34
|
+
const slot = minute % this.minutes;
|
|
35
|
+
if (entry.minutes[slot] !== minute) {
|
|
36
|
+
entry.minutes[slot] = minute;
|
|
37
|
+
entry.counts[slot] = 0;
|
|
38
|
+
}
|
|
39
|
+
entry.counts[slot] += amount;
|
|
40
|
+
this.keys.set(key, entry);
|
|
41
|
+
if (this.keys.size > this.maxKeys)
|
|
42
|
+
this.keys.delete(this.keys.keys().next().value);
|
|
43
|
+
}
|
|
44
|
+
/** Sum over minutes `from` to `to` ago (0 is the current minute), inclusive. */
|
|
45
|
+
sum(key, now, from, to) {
|
|
46
|
+
const entry = this.keys.get(key);
|
|
47
|
+
if (!entry)
|
|
48
|
+
return 0;
|
|
49
|
+
const minute = Math.floor(now / 60_000);
|
|
50
|
+
let total = 0;
|
|
51
|
+
for (let i = 0; i < this.minutes; i++) {
|
|
52
|
+
const age = minute - entry.minutes[i];
|
|
53
|
+
if (age >= from && age <= to)
|
|
54
|
+
total += entry.counts[i];
|
|
55
|
+
}
|
|
56
|
+
return total;
|
|
57
|
+
}
|
|
58
|
+
prune(now) {
|
|
59
|
+
const minute = Math.floor(now / 60_000);
|
|
60
|
+
for (const [key, entry] of this.keys)
|
|
61
|
+
if (Math.max(...entry.minutes) <= minute - this.minutes)
|
|
62
|
+
this.keys.delete(key);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Distinct values per key in the current minute, counted up to `cap` (values are hashed to numbers). */
|
|
66
|
+
export class DistinctPerMinute {
|
|
67
|
+
cap;
|
|
68
|
+
maxKeys;
|
|
69
|
+
keys = new Map();
|
|
70
|
+
constructor(cap, maxKeys = 2000) {
|
|
71
|
+
this.cap = cap;
|
|
72
|
+
this.maxKeys = maxKeys;
|
|
73
|
+
}
|
|
74
|
+
get size() { return this.keys.size; }
|
|
75
|
+
/** Records the value and returns how many distinct values the key has this minute. */
|
|
76
|
+
add(key, value, now) {
|
|
77
|
+
const minute = Math.floor(now / 60_000);
|
|
78
|
+
let entry = this.keys.get(key);
|
|
79
|
+
if (entry)
|
|
80
|
+
this.keys.delete(key);
|
|
81
|
+
if (!entry || entry.minute !== minute)
|
|
82
|
+
entry = { minute, seen: new Set() };
|
|
83
|
+
if (entry.seen.size < this.cap)
|
|
84
|
+
entry.seen.add(hash32(value));
|
|
85
|
+
this.keys.set(key, entry);
|
|
86
|
+
if (this.keys.size > this.maxKeys)
|
|
87
|
+
this.keys.delete(this.keys.keys().next().value);
|
|
88
|
+
return entry.seen.size;
|
|
89
|
+
}
|
|
90
|
+
prune(now) {
|
|
91
|
+
const minute = Math.floor(now / 60_000);
|
|
92
|
+
for (const [key, entry] of this.keys)
|
|
93
|
+
if (entry.minute < minute - 1)
|
|
94
|
+
this.keys.delete(key);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function hash32(s) {
|
|
98
|
+
let h = 0x811c9dc5;
|
|
99
|
+
for (let i = 0; i < s.length; i++)
|
|
100
|
+
h = Math.imul(h ^ s.charCodeAt(i), 16777619);
|
|
101
|
+
return h >>> 0;
|
|
102
|
+
}
|
|
103
|
+
// Static files a scanner's 2xx on means nothing (they're public by design).
|
|
104
|
+
const STATIC = /\.(?:js|mjs|css|map|png|jpe?g|gif|webp|avif|svg|ico|woff2?|ttf|otf|txt|xml|json|webmanifest)$/i;
|
|
105
|
+
/** A 2xx here is worth noticing after a scan: not the home page, not a static asset. */
|
|
106
|
+
export function meaningfulPath(path) {
|
|
107
|
+
const route = path.split(/[?#]/)[0] || "/";
|
|
108
|
+
return route !== "/" && !STATIC.test(route) && !route.startsWith("/_next/") && !route.startsWith("/assets/");
|
|
109
|
+
}
|
|
110
|
+
/** The hostname of a URL or host string, lowercased, without port; null when it isn't one. */
|
|
111
|
+
export function outboundHost(value) {
|
|
112
|
+
const text = value.trim();
|
|
113
|
+
if (!text)
|
|
114
|
+
return null;
|
|
115
|
+
let host;
|
|
116
|
+
try {
|
|
117
|
+
host = new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(text) ? text : `https://${text}`).hostname;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
host = host.toLowerCase().replace(/^\[|\]$/g, "").replace(/\.$/, "");
|
|
123
|
+
return host && host.length <= 253 && /^[a-z0-9.:-]+$/.test(host) ? host : null;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=monitor-signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-signals.js","sourceRoot":"","sources":["../src/monitor-signals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { MonitorRule } from "./monitor-rules.js";
|
|
2
|
+
/** What an app can declare. Each runs a set of families; paths and attacks belong to families. */
|
|
3
|
+
export declare const STACK_FAMILIES: {
|
|
4
|
+
readonly nextjs: readonly ["js", "nextjs", "react"];
|
|
5
|
+
readonly node: readonly ["js"];
|
|
6
|
+
readonly express: readonly ["js"];
|
|
7
|
+
readonly nestjs: readonly ["js"];
|
|
8
|
+
readonly vite: readonly ["js", "vite"];
|
|
9
|
+
readonly django: readonly ["python", "django"];
|
|
10
|
+
readonly flask: readonly ["python", "flask"];
|
|
11
|
+
readonly fastapi: readonly ["python", "fastapi"];
|
|
12
|
+
readonly rails: readonly ["ruby", "rails"];
|
|
13
|
+
readonly laravel: readonly ["php", "laravel"];
|
|
14
|
+
readonly php: readonly ["php"];
|
|
15
|
+
readonly wordpress: readonly ["php", "wordpress"];
|
|
16
|
+
readonly spring: readonly ["java", "spring"];
|
|
17
|
+
readonly java: readonly ["java"];
|
|
18
|
+
readonly go: readonly ["go"];
|
|
19
|
+
readonly dotnet: readonly ["dotnet"];
|
|
20
|
+
readonly static: readonly [];
|
|
21
|
+
};
|
|
22
|
+
export type Stack = keyof typeof STACK_FAMILIES;
|
|
23
|
+
export declare const STACKS: Stack[];
|
|
24
|
+
export declare const isStack: (v: unknown) => v is Stack;
|
|
25
|
+
/** The families a path belongs to (empty for an ordinary path any app might serve). */
|
|
26
|
+
export declare function pathFamilies(path: string): string[];
|
|
27
|
+
/** True when the stack runs none of the families the path or rule belongs to. */
|
|
28
|
+
export declare function foreignTo(stack: Stack, families: readonly string[]): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Every pattern here must stay linear in its input (this runs inside customer apps, on attacker-
|
|
31
|
+
* written text): match fixed markers with separate tests, never `marker[^x]*other` across a line.
|
|
32
|
+
*
|
|
33
|
+
* Attacks on particular frameworks, and their debug or admin endpoints answering the public.
|
|
34
|
+
* `families` says which software each targets: against an app that declares a stack without it,
|
|
35
|
+
* the request is rolled up as not applicable. Exposures need a 2xx, so they need the status.
|
|
36
|
+
*/
|
|
37
|
+
export declare const stackRules: (MonitorRule & {
|
|
38
|
+
families: string[];
|
|
39
|
+
})[];
|
|
40
|
+
/** The families a rule targets (stack rules only; built-in rules target every stack). */
|
|
41
|
+
export declare function ruleFamilies(ruleId: string): string[];
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/** What an app can declare. Each runs a set of families; paths and attacks belong to families. */
|
|
2
|
+
export const STACK_FAMILIES = {
|
|
3
|
+
nextjs: ["js", "nextjs", "react"],
|
|
4
|
+
node: ["js"],
|
|
5
|
+
express: ["js"],
|
|
6
|
+
nestjs: ["js"],
|
|
7
|
+
vite: ["js", "vite"],
|
|
8
|
+
django: ["python", "django"],
|
|
9
|
+
flask: ["python", "flask"],
|
|
10
|
+
fastapi: ["python", "fastapi"],
|
|
11
|
+
rails: ["ruby", "rails"],
|
|
12
|
+
laravel: ["php", "laravel"],
|
|
13
|
+
php: ["php"],
|
|
14
|
+
wordpress: ["php", "wordpress"],
|
|
15
|
+
spring: ["java", "spring"],
|
|
16
|
+
java: ["java"],
|
|
17
|
+
go: ["go"],
|
|
18
|
+
dotnet: ["dotnet"],
|
|
19
|
+
static: [],
|
|
20
|
+
};
|
|
21
|
+
export const STACKS = Object.keys(STACK_FAMILIES);
|
|
22
|
+
export const isStack = (v) => typeof v === "string" && v in STACK_FAMILIES;
|
|
23
|
+
// Paths only one family serves. A request for one, from an app that doesn't run that family and
|
|
24
|
+
// with no response status to go on, can't have worked.
|
|
25
|
+
const FAMILY_PATHS = [
|
|
26
|
+
["php", /\.(?:php\d?|phtml)(?=[/?#;]|$)|\/phpmyadmin(?=[/?#]|$)/i],
|
|
27
|
+
["wordpress", /\/(?:wordpress|wp-(?:admin|content|includes|json|login\.php))(?=[/?#]|$)|\/xmlrpc\.php/i],
|
|
28
|
+
["dotnet", /\.(?:aspx?|ashx|asmx|axd)(?=[/?#;]|$)|\/web\.config(?=[?#]|$)/i],
|
|
29
|
+
["java", /\.(?:jsp|jspx|do|action)(?=[/?#;]|$)|\/(?:actuator|jolokia|manager\/html|jmx-console|web-console)(?=[/?#]|$)/i],
|
|
30
|
+
["cgi", /\.(?:cgi|pl)(?=[/?#;]|$)|\/cgi-bin(?=[/?#]|$)/i],
|
|
31
|
+
["vite", /\/@(?:fs|vite|id)\//i],
|
|
32
|
+
["rails", /\/rails\/info(?=[/?#]|$)/i],
|
|
33
|
+
["laravel", /\/(?:_ignition|telescope|horizon|_debugbar)(?=[/?#]|$)|\/storage\/logs\/laravel\.log/i],
|
|
34
|
+
["django", /\/__debug__(?=[/?#]|$)/i],
|
|
35
|
+
["go", /\/debug\/(?:pprof|vars)(?=[/?#]|$)/i],
|
|
36
|
+
];
|
|
37
|
+
/** The families a path belongs to (empty for an ordinary path any app might serve). */
|
|
38
|
+
export function pathFamilies(path) {
|
|
39
|
+
const route = path.split(/[?#]/)[0];
|
|
40
|
+
const families = FAMILY_PATHS.filter(([, re]) => re.test(route)).map(([family]) => family);
|
|
41
|
+
// wp-login.php is WordPress, not any PHP app: a Laravel app can't serve it either.
|
|
42
|
+
return families.includes("wordpress") ? ["wordpress"] : families;
|
|
43
|
+
}
|
|
44
|
+
/** True when the stack runs none of the families the path or rule belongs to. */
|
|
45
|
+
export function foreignTo(stack, families) {
|
|
46
|
+
const runs = STACK_FAMILIES[stack];
|
|
47
|
+
return families.length > 0 && !families.some(f => runs.includes(f));
|
|
48
|
+
}
|
|
49
|
+
// The response status in an access-log line was 2xx (same reading as monitor-rules.ts).
|
|
50
|
+
const ACCESS_STATUS = /"[A-Z]+ \S+ HTTP\/[\d.]+" (\d{3})\b|"(?:status|httpStatus|status_code|statusCode|response_status)"\s*:\s*"?(\d{3})\b/;
|
|
51
|
+
const served = (raw) => ((raw.match(ACCESS_STATUS)?.[1] ?? raw.match(ACCESS_STATUS)?.[2]) ?? "").startsWith("2");
|
|
52
|
+
/**
|
|
53
|
+
* Every pattern here must stay linear in its input (this runs inside customer apps, on attacker-
|
|
54
|
+
* written text): match fixed markers with separate tests, never `marker[^x]*other` across a line.
|
|
55
|
+
*
|
|
56
|
+
* Attacks on particular frameworks, and their debug or admin endpoints answering the public.
|
|
57
|
+
* `families` says which software each targets: against an app that declares a stack without it,
|
|
58
|
+
* the request is rolled up as not applicable. Exposures need a 2xx, so they need the status.
|
|
59
|
+
*/
|
|
60
|
+
export const stackRules = [
|
|
61
|
+
// Next.js and React
|
|
62
|
+
{ id: "stack.nextjs.middleware_bypass", title: "Next.js middleware bypass attempt (x-middleware-subrequest)", severity: "critical", category: "exploit", families: ["nextjs"], sources: ["http"],
|
|
63
|
+
match: s => /"x-middleware-subrequest"\s*:/i.test(s) },
|
|
64
|
+
{ id: "stack.nextjs.sourcemap_exposed", title: "Next.js source maps served publicly", severity: "medium", category: "recon", families: ["nextjs"], sources: ["http"],
|
|
65
|
+
match: (s, raw) => /\.js\.map(?=[\s?"#]|$)/i.test(s) && /\/_next\/static\//i.test(s) && served(raw) },
|
|
66
|
+
// Vite dev servers (CVE-2025-30208 and kin): arbitrary file read through /@fs and ?raw??.
|
|
67
|
+
{ id: "stack.vite.fs_read", title: "Vite dev server file read attempt", severity: "high", category: "exploit", families: ["vite"], sources: ["http"],
|
|
68
|
+
match: s => /\/@fs\/|[?&](?:raw|import&raw|inline)\?\?|\?import&raw\?\?/i.test(s) },
|
|
69
|
+
// Node.js
|
|
70
|
+
{ id: "stack.node.package_files_exposed", title: "Node.js package files served publicly", severity: "high", category: "secrets", families: ["js"], sources: ["http"],
|
|
71
|
+
match: (s, raw) => /\/(?:\.npmrc|package-lock\.json|node_modules\/[^\s"?]+)(?=[\s?"#]|$)/i.test(s) && served(raw) },
|
|
72
|
+
// Python
|
|
73
|
+
{ id: "stack.flask.debugger_console", title: "Werkzeug debugger console attempt", severity: "critical", category: "exploit", families: ["flask", "python"], sources: ["http"],
|
|
74
|
+
match: s => /[?&]__debugger__=yes&(?:cmd|frm)=/i.test(s) },
|
|
75
|
+
{ id: "stack.flask.console_exposed", title: "Werkzeug debugger console served publicly", severity: "critical", category: "secrets", families: ["flask", "python"], sources: ["http"],
|
|
76
|
+
match: (s, raw) => /"[A-Z]+ \/console(?:[?\s])|"path"\s*:\s*"\/console(?:[?"])/i.test(s) && served(raw) },
|
|
77
|
+
{ id: "stack.django.debug_toolbar_exposed", title: "Django debug toolbar served publicly", severity: "high", category: "secrets", families: ["django"], sources: ["http"],
|
|
78
|
+
match: (s, raw) => /\/__debug__\//i.test(s) && served(raw) },
|
|
79
|
+
// Ruby on Rails
|
|
80
|
+
{ id: "stack.rails.info_exposed", title: "Rails info pages served publicly", severity: "high", category: "secrets", families: ["rails"], sources: ["http"],
|
|
81
|
+
match: (s, raw) => /\/rails\/info\/(?:properties|routes)/i.test(s) && served(raw) },
|
|
82
|
+
// PHP and Laravel
|
|
83
|
+
{ id: "stack.laravel.ignition_rce", title: "Laravel Ignition remote code execution attempt (CVE-2021-3129)", severity: "critical", category: "exploit", families: ["laravel"], sources: ["http"],
|
|
84
|
+
match: s => /\/_ignition\/execute-solution/i.test(s) },
|
|
85
|
+
{ id: "stack.laravel.debug_tools_exposed", title: "Laravel debug tools or logs served publicly", severity: "high", category: "secrets", families: ["laravel"], sources: ["http"],
|
|
86
|
+
match: (s, raw) => /\/(?:telescope|horizon|_debugbar)(?:\/|[\s?"]|$)|\/storage\/logs\/laravel\.log/i.test(s) && served(raw) },
|
|
87
|
+
{ id: "stack.php.phpunit_rce", title: "PHPUnit eval-stdin remote code execution attempt (CVE-2017-9841)", severity: "critical", category: "exploit", families: ["php"], sources: ["http"],
|
|
88
|
+
match: s => /eval-stdin\.php/i.test(s) && /\/phpunit\//i.test(s) },
|
|
89
|
+
{ id: "stack.php.cgi_argument_injection", title: "PHP-CGI argument injection attempt (CVE-2024-4577)", severity: "critical", category: "exploit", families: ["php"], sources: ["http"],
|
|
90
|
+
match: s => /\?(?:|-)d[\s+]*(?:allow_url_include|auto_prepend_file|cgi\.force_redirect)/i.test(s) },
|
|
91
|
+
{ id: "stack.php.stream_wrapper", title: "PHP stream wrapper injection attempt", severity: "high", category: "exploit", families: ["php"], sources: ["http"],
|
|
92
|
+
match: s => /\b(?:php:\/\/(?:input|filter|stdin)|phar:\/\/|expect:\/\/|data:\/\/text\/plain;base64)/i.test(s) },
|
|
93
|
+
// WordPress
|
|
94
|
+
{ id: "stack.wordpress.recon_user_enum", title: "WordPress user enumeration", severity: "medium", category: "recon", families: ["wordpress"], sources: ["http"],
|
|
95
|
+
match: s => /\/wp-json\/wp\/v2\/users|[?&]author=\d+(?:[&\s"]|$)/i.test(s) },
|
|
96
|
+
{ id: "stack.wordpress.plugin_file_read", title: "WordPress plugin file read attempt", severity: "high", category: "exploit", families: ["wordpress"], sources: ["http"],
|
|
97
|
+
match: s => /admin-ajax\.php\?/i.test(s) && /[?&]action=(?:revslider_show_image|duplicator_download|kc_get_thumbn)/i.test(s) },
|
|
98
|
+
// Java and Spring
|
|
99
|
+
{ id: "stack.spring.spring4shell", title: "Spring4Shell attempt (CVE-2022-22965)", severity: "critical", category: "exploit", families: ["spring", "java"], sources: ["http"],
|
|
100
|
+
match: s => /class\.module\.classLoader/i.test(s) },
|
|
101
|
+
{ id: "stack.java.expression_injection", title: "Java expression injection attempt (SpEL or OGNL)", severity: "critical", category: "exploit", families: ["java"], sources: ["http", "log"],
|
|
102
|
+
match: s => /T\(java\.lang\.(?:Runtime|ProcessBuilder|System)\)|%\{\(#|\$\{#_memberAccess|@ognl\.OgnlContext|#context\[/i.test(s) },
|
|
103
|
+
{ id: "stack.spring.actuator_exposed", title: "Spring Boot actuator served publicly", severity: "critical", category: "secrets", families: ["spring"], sources: ["http"],
|
|
104
|
+
match: (s, raw) => /\/actuator\/(?:env|heapdump|threaddump|configprops|gateway\/routes|jolokia|loggers|mappings)(?=[\s?"#/]|$)/i.test(s) && served(raw) },
|
|
105
|
+
{ id: "stack.java.admin_console_exposed", title: "Java admin console served publicly", severity: "high", category: "secrets", families: ["java"], sources: ["http"],
|
|
106
|
+
match: (s, raw) => /\/(?:manager\/html|jolokia|jmx-console|web-console)(?=[\s?"#/]|$)/i.test(s) && served(raw) },
|
|
107
|
+
// Go
|
|
108
|
+
{ id: "stack.go.pprof_exposed", title: "Go pprof or expvar served publicly", severity: "high", category: "secrets", families: ["go"], sources: ["http"],
|
|
109
|
+
match: (s, raw) => /\/debug\/(?:pprof|vars)(?=[\s?"#/]|$)/i.test(s) && served(raw) },
|
|
110
|
+
// .NET
|
|
111
|
+
{ id: "stack.dotnet.diagnostics_exposed", title: "ASP.NET diagnostics served publicly (elmah or trace)", severity: "high", category: "secrets", families: ["dotnet"], sources: ["http"],
|
|
112
|
+
match: (s, raw) => /\/(?:elmah|trace)\.axd/i.test(s) && served(raw) },
|
|
113
|
+
{ id: "stack.dotnet.telerik_rau", title: "Telerik UI upload exploit attempt (CVE-2019-18935)", severity: "critical", category: "exploit", families: ["dotnet"], sources: ["http"],
|
|
114
|
+
match: s => /Telerik\.Web\.UI\.WebResource\.axd\?/i.test(s) && /[?&]type=rau\b/i.test(s) },
|
|
115
|
+
{ id: "stack.dotnet.web_config_exposed", title: "web.config served publicly", severity: "critical", category: "secrets", families: ["dotnet"], sources: ["http"],
|
|
116
|
+
match: (s, raw) => /\/web\.config(?=[\s?"#]|$)/i.test(s) && served(raw) },
|
|
117
|
+
// GraphQL, any stack
|
|
118
|
+
{ id: "stack.graphql.recon_introspection", title: "GraphQL introspection query", severity: "medium", category: "recon", families: [], sources: ["http"],
|
|
119
|
+
// Each query parameter once, then its value: one regex across the line backtracked quadratically.
|
|
120
|
+
match: s => { for (const [, value] of s.matchAll(/[?&]query=([^\s"&]*)/gi))
|
|
121
|
+
if (/__(?:schema|type)\b/i.test(value))
|
|
122
|
+
return true; return false; } },
|
|
123
|
+
];
|
|
124
|
+
const byId = new Map(stackRules.map(r => [r.id, r]));
|
|
125
|
+
/** The families a rule targets (stack rules only; built-in rules target every stack). */
|
|
126
|
+
export function ruleFamilies(ruleId) {
|
|
127
|
+
return byId.get(ruleId)?.families ?? [];
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=monitor-stacks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-stacks.js","sourceRoot":"","sources":["../src/monitor-stacks.ts"],"names":[],"mappings":"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"}
|