@spinabot/brigade 1.7.0 → 1.8.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/agents/agent-loop.d.ts +13 -0
- package/dist/agents/agent-loop.d.ts.map +1 -1
- package/dist/agents/agent-loop.js +5 -0
- package/dist/agents/agent-loop.js.map +1 -1
- package/dist/agents/channels/access-control/group-tool-policy.d.ts +73 -0
- package/dist/agents/channels/access-control/group-tool-policy.d.ts.map +1 -0
- package/dist/agents/channels/access-control/group-tool-policy.js +193 -0
- package/dist/agents/channels/access-control/group-tool-policy.js.map +1 -0
- package/dist/agents/channels/access-control/index.d.ts +1 -0
- package/dist/agents/channels/access-control/index.d.ts.map +1 -1
- package/dist/agents/channels/access-control/index.js +1 -0
- package/dist/agents/channels/access-control/index.js.map +1 -1
- package/dist/agents/channels/bluebubbles/account-config.d.ts +253 -0
- package/dist/agents/channels/bluebubbles/account-config.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/account-config.js +486 -0
- package/dist/agents/channels/bluebubbles/account-config.js.map +1 -0
- package/dist/agents/channels/bluebubbles/account-registry.d.ts +33 -0
- package/dist/agents/channels/bluebubbles/account-registry.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/account-registry.js +46 -0
- package/dist/agents/channels/bluebubbles/account-registry.js.map +1 -0
- package/dist/agents/channels/bluebubbles/adapter.d.ts +45 -0
- package/dist/agents/channels/bluebubbles/adapter.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/adapter.js +366 -0
- package/dist/agents/channels/bluebubbles/adapter.js.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts +52 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.js +118 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.js.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup.d.ts +114 -0
- package/dist/agents/channels/bluebubbles/catchup.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup.js +220 -0
- package/dist/agents/channels/bluebubbles/catchup.js.map +1 -0
- package/dist/agents/channels/bluebubbles/chat.d.ts +75 -0
- package/dist/agents/channels/bluebubbles/chat.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/chat.js +182 -0
- package/dist/agents/channels/bluebubbles/chat.js.map +1 -0
- package/dist/agents/channels/bluebubbles/connection.d.ts +95 -0
- package/dist/agents/channels/bluebubbles/connection.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/connection.js +413 -0
- package/dist/agents/channels/bluebubbles/connection.js.map +1 -0
- package/dist/agents/channels/bluebubbles/contact-names.d.ts +79 -0
- package/dist/agents/channels/bluebubbles/contact-names.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/contact-names.js +188 -0
- package/dist/agents/channels/bluebubbles/contact-names.js.map +1 -0
- package/dist/agents/channels/bluebubbles/debounce.d.ts +78 -0
- package/dist/agents/channels/bluebubbles/debounce.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/debounce.js +173 -0
- package/dist/agents/channels/bluebubbles/debounce.js.map +1 -0
- package/dist/agents/channels/bluebubbles/dedupe.d.ts +25 -0
- package/dist/agents/channels/bluebubbles/dedupe.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/dedupe.js +35 -0
- package/dist/agents/channels/bluebubbles/dedupe.js.map +1 -0
- package/dist/agents/channels/bluebubbles/effects.d.ts +17 -0
- package/dist/agents/channels/bluebubbles/effects.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/effects.js +57 -0
- package/dist/agents/channels/bluebubbles/effects.js.map +1 -0
- package/dist/agents/channels/bluebubbles/history.d.ts +56 -0
- package/dist/agents/channels/bluebubbles/history.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/history.js +140 -0
- package/dist/agents/channels/bluebubbles/history.js.map +1 -0
- package/dist/agents/channels/bluebubbles/index.d.ts +18 -0
- package/dist/agents/channels/bluebubbles/index.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/index.js +18 -0
- package/dist/agents/channels/bluebubbles/index.js.map +1 -0
- package/dist/agents/channels/bluebubbles/media.d.ts +104 -0
- package/dist/agents/channels/bluebubbles/media.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/media.js +222 -0
- package/dist/agents/channels/bluebubbles/media.js.map +1 -0
- package/dist/agents/channels/bluebubbles/messaging.d.ts +13 -0
- package/dist/agents/channels/bluebubbles/messaging.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/messaging.js +36 -0
- package/dist/agents/channels/bluebubbles/messaging.js.map +1 -0
- package/dist/agents/channels/bluebubbles/module.d.ts +24 -0
- package/dist/agents/channels/bluebubbles/module.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/module.js +52 -0
- package/dist/agents/channels/bluebubbles/module.js.map +1 -0
- package/dist/agents/channels/bluebubbles/normalize.d.ts +111 -0
- package/dist/agents/channels/bluebubbles/normalize.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/normalize.js +239 -0
- package/dist/agents/channels/bluebubbles/normalize.js.map +1 -0
- package/dist/agents/channels/bluebubbles/plugin.d.ts +46 -0
- package/dist/agents/channels/bluebubbles/plugin.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/plugin.js +242 -0
- package/dist/agents/channels/bluebubbles/plugin.js.map +1 -0
- package/dist/agents/channels/bluebubbles/probe.d.ts +79 -0
- package/dist/agents/channels/bluebubbles/probe.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/probe.js +138 -0
- package/dist/agents/channels/bluebubbles/probe.js.map +1 -0
- package/dist/agents/channels/bluebubbles/reactions.d.ts +46 -0
- package/dist/agents/channels/bluebubbles/reactions.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/reactions.js +207 -0
- package/dist/agents/channels/bluebubbles/reactions.js.map +1 -0
- package/dist/agents/channels/bluebubbles/send.d.ts +132 -0
- package/dist/agents/channels/bluebubbles/send.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/send.js +327 -0
- package/dist/agents/channels/bluebubbles/send.js.map +1 -0
- package/dist/agents/channels/bluebubbles/status-issues.d.ts +57 -0
- package/dist/agents/channels/bluebubbles/status-issues.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/status-issues.js +93 -0
- package/dist/agents/channels/bluebubbles/status-issues.js.map +1 -0
- package/dist/agents/channels/bluebubbles/types.d.ts +69 -0
- package/dist/agents/channels/bluebubbles/types.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/types.js +118 -0
- package/dist/agents/channels/bluebubbles/types.js.map +1 -0
- package/dist/agents/channels/bluebubbles/webhook.d.ts +97 -0
- package/dist/agents/channels/bluebubbles/webhook.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/webhook.js +249 -0
- package/dist/agents/channels/bluebubbles/webhook.js.map +1 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts +13 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts.map +1 -1
- package/dist/agents/channels/bundled-channel-metas.js +33 -0
- package/dist/agents/channels/bundled-channel-metas.js.map +1 -1
- package/dist/agents/channels/imessage/account-config.d.ts +178 -0
- package/dist/agents/channels/imessage/account-config.d.ts.map +1 -0
- package/dist/agents/channels/imessage/account-config.js +371 -0
- package/dist/agents/channels/imessage/account-config.js.map +1 -0
- package/dist/agents/channels/imessage/adapter.d.ts +36 -0
- package/dist/agents/channels/imessage/adapter.d.ts.map +1 -0
- package/dist/agents/channels/imessage/adapter.js +286 -0
- package/dist/agents/channels/imessage/adapter.js.map +1 -0
- package/dist/agents/channels/imessage/client.d.ts +99 -0
- package/dist/agents/channels/imessage/client.d.ts.map +1 -0
- package/dist/agents/channels/imessage/client.js +231 -0
- package/dist/agents/channels/imessage/client.js.map +1 -0
- package/dist/agents/channels/imessage/connection.d.ts +101 -0
- package/dist/agents/channels/imessage/connection.d.ts.map +1 -0
- package/dist/agents/channels/imessage/connection.js +367 -0
- package/dist/agents/channels/imessage/connection.js.map +1 -0
- package/dist/agents/channels/imessage/format.d.ts +45 -0
- package/dist/agents/channels/imessage/format.d.ts.map +1 -0
- package/dist/agents/channels/imessage/format.js +170 -0
- package/dist/agents/channels/imessage/format.js.map +1 -0
- package/dist/agents/channels/imessage/history.d.ts +49 -0
- package/dist/agents/channels/imessage/history.d.ts.map +1 -0
- package/dist/agents/channels/imessage/history.js +74 -0
- package/dist/agents/channels/imessage/history.js.map +1 -0
- package/dist/agents/channels/imessage/index.d.ts +25 -0
- package/dist/agents/channels/imessage/index.d.ts.map +1 -0
- package/dist/agents/channels/imessage/index.js +25 -0
- package/dist/agents/channels/imessage/index.js.map +1 -0
- package/dist/agents/channels/imessage/media.d.ts +92 -0
- package/dist/agents/channels/imessage/media.d.ts.map +1 -0
- package/dist/agents/channels/imessage/media.js +196 -0
- package/dist/agents/channels/imessage/media.js.map +1 -0
- package/dist/agents/channels/imessage/messaging.d.ts +14 -0
- package/dist/agents/channels/imessage/messaging.d.ts.map +1 -0
- package/dist/agents/channels/imessage/messaging.js +37 -0
- package/dist/agents/channels/imessage/messaging.js.map +1 -0
- package/dist/agents/channels/imessage/module.d.ts +16 -0
- package/dist/agents/channels/imessage/module.d.ts.map +1 -0
- package/dist/agents/channels/imessage/module.js +23 -0
- package/dist/agents/channels/imessage/module.js.map +1 -0
- package/dist/agents/channels/imessage/monitor.d.ts +207 -0
- package/dist/agents/channels/imessage/monitor.d.ts.map +1 -0
- package/dist/agents/channels/imessage/monitor.js +504 -0
- package/dist/agents/channels/imessage/monitor.js.map +1 -0
- package/dist/agents/channels/imessage/plugin.d.ts +53 -0
- package/dist/agents/channels/imessage/plugin.d.ts.map +1 -0
- package/dist/agents/channels/imessage/plugin.js +215 -0
- package/dist/agents/channels/imessage/plugin.js.map +1 -0
- package/dist/agents/channels/imessage/probe.d.ts +68 -0
- package/dist/agents/channels/imessage/probe.d.ts.map +1 -0
- package/dist/agents/channels/imessage/probe.js +134 -0
- package/dist/agents/channels/imessage/probe.js.map +1 -0
- package/dist/agents/channels/imessage/remote-attachments.d.ts +61 -0
- package/dist/agents/channels/imessage/remote-attachments.d.ts.map +1 -0
- package/dist/agents/channels/imessage/remote-attachments.js +131 -0
- package/dist/agents/channels/imessage/remote-attachments.js.map +1 -0
- package/dist/agents/channels/imessage/send.d.ts +61 -0
- package/dist/agents/channels/imessage/send.d.ts.map +1 -0
- package/dist/agents/channels/imessage/send.js +108 -0
- package/dist/agents/channels/imessage/send.js.map +1 -0
- package/dist/agents/channels/imessage/targets.d.ts +91 -0
- package/dist/agents/channels/imessage/targets.d.ts.map +1 -0
- package/dist/agents/channels/imessage/targets.js +245 -0
- package/dist/agents/channels/imessage/targets.js.map +1 -0
- package/dist/agents/channels/imessage/watch-error.d.ts +23 -0
- package/dist/agents/channels/imessage/watch-error.d.ts.map +1 -0
- package/dist/agents/channels/imessage/watch-error.js +69 -0
- package/dist/agents/channels/imessage/watch-error.js.map +1 -0
- package/dist/agents/channels/inbound-pipeline.d.ts +11 -0
- package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
- package/dist/agents/channels/inbound-pipeline.js +20 -1
- package/dist/agents/channels/inbound-pipeline.js.map +1 -1
- package/dist/agents/channels/manager.d.ts +9 -0
- package/dist/agents/channels/manager.d.ts.map +1 -1
- package/dist/agents/channels/manager.js.map +1 -1
- package/dist/agents/channels/sdk.d.ts +4 -0
- package/dist/agents/channels/sdk.d.ts.map +1 -1
- package/dist/agents/channels/sdk.js +4 -0
- package/dist/agents/channels/sdk.js.map +1 -1
- package/dist/agents/extensions/modules/index.d.ts.map +1 -1
- package/dist/agents/extensions/modules/index.js +12 -0
- package/dist/agents/extensions/modules/index.js.map +1 -1
- package/dist/agents/session-wiring.d.ts +31 -0
- package/dist/agents/session-wiring.d.ts.map +1 -1
- package/dist/agents/session-wiring.js +45 -2
- package/dist/agents/session-wiring.js.map +1 -1
- package/dist/agents/tools/bluebubbles-action-tool.d.ts +66 -0
- package/dist/agents/tools/bluebubbles-action-tool.d.ts.map +1 -0
- package/dist/agents/tools/bluebubbles-action-tool.js +234 -0
- package/dist/agents/tools/bluebubbles-action-tool.js.map +1 -0
- package/dist/agents/tools/registry.d.ts.map +1 -1
- package/dist/agents/tools/registry.js +18 -0
- package/dist/agents/tools/registry.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +48 -2
- package/dist/core/server.js.map +1 -1
- package/dist/infra/net/fetch-guard.d.ts +24 -2
- package/dist/infra/net/fetch-guard.d.ts.map +1 -1
- package/dist/infra/net/fetch-guard.js +78 -31
- package/dist/infra/net/fetch-guard.js.map +1 -1
- package/package.json +1 -1
|
@@ -19,6 +19,20 @@
|
|
|
19
19
|
*/
|
|
20
20
|
/** Default redirect cap — matches the upstream reference. */
|
|
21
21
|
export declare const DEFAULT_MAX_REDIRECTS = 3;
|
|
22
|
+
/** The injectable fetch primitive — production uses the global `fetch`. */
|
|
23
|
+
export type FetchLike = typeof fetch;
|
|
24
|
+
/**
|
|
25
|
+
* SSRF classification options. `allowPrivateNetwork` is a DANGEROUS opt-in for
|
|
26
|
+
* channels that legitimately talk to a LAN / private-IP host (e.g. a BlueBubbles
|
|
27
|
+
* macOS server on `192.168.x.x`). It relaxes the private/loopback/link-local IP
|
|
28
|
+
* checks — but NEVER the cloud-metadata block: `169.254.169.254`, the
|
|
29
|
+
* `metadata.*` hostnames, and the IPv6 metadata literal stay forbidden, so a
|
|
30
|
+
* redirect-to-metadata SSRF is still blocked even with private access on.
|
|
31
|
+
*/
|
|
32
|
+
export interface SsrfClassifyOptions {
|
|
33
|
+
/** Allow RFC1918 / loopback / link-local / ULA targets (cloud-metadata stays blocked). */
|
|
34
|
+
allowPrivateNetwork?: boolean;
|
|
35
|
+
}
|
|
22
36
|
/** Custom error thrown when an SSRF gate rejects a URL or resolved IP. */
|
|
23
37
|
export declare class SsrfBlockedError extends Error {
|
|
24
38
|
readonly url: string;
|
|
@@ -35,7 +49,7 @@ export declare class RedirectError extends Error {
|
|
|
35
49
|
* obvious cases (literal `localhost`, IP-in-hostname, forbidden suffix)
|
|
36
50
|
* so we don't even spend a DNS round-trip.
|
|
37
51
|
*/
|
|
38
|
-
export declare function classifyHostnameSync(hostname: string): string | null;
|
|
52
|
+
export declare function classifyHostnameSync(hostname: string, opts?: SsrfClassifyOptions): string | null;
|
|
39
53
|
/**
|
|
40
54
|
* Full SSRF check — sync hostname classify + DNS resolution + re-classify
|
|
41
55
|
* every resolved A/AAAA record. A hostname like `attacker.com` passing
|
|
@@ -46,13 +60,21 @@ export declare function classifyHostnameSync(hostname: string): string | null;
|
|
|
46
60
|
* URL is safe, returns an `SsrfBlockedError`-shaped reason string when
|
|
47
61
|
* not. Caller throws.
|
|
48
62
|
*/
|
|
49
|
-
export declare function classifyUrlForSsrf(rawUrl: string): Promise<string | null>;
|
|
63
|
+
export declare function classifyUrlForSsrf(rawUrl: string, opts?: SsrfClassifyOptions): Promise<string | null>;
|
|
50
64
|
export interface GuardedFetchOptions {
|
|
51
65
|
method?: string;
|
|
52
66
|
headers?: Record<string, string>;
|
|
53
67
|
body?: RequestInit["body"];
|
|
54
68
|
maxRedirects?: number;
|
|
55
69
|
timeoutMs?: number;
|
|
70
|
+
/**
|
|
71
|
+
* DANGEROUS opt-in: allow private/LAN/loopback targets (cloud-metadata stays
|
|
72
|
+
* blocked on every hop). For channels that talk to an operator's own host
|
|
73
|
+
* (e.g. a BlueBubbles macOS server on `192.168.x.x`).
|
|
74
|
+
*/
|
|
75
|
+
allowPrivateNetwork?: boolean;
|
|
76
|
+
/** Inject the network primitive (TEST SEAM). Defaults to the global `fetch`. */
|
|
77
|
+
fetchImpl?: FetchLike;
|
|
56
78
|
/** Signal from the caller (e.g. agent turn cancel). Combined with the timeout signal. */
|
|
57
79
|
signal?: AbortSignal;
|
|
58
80
|
/** When set, retry transient failures (429 / 5xx / network) with exp-backoff. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-guard.d.ts","sourceRoot":"","sources":["../../../src/infra/net/fetch-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,0EAA0E;AAC1E,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMvC;AAED,4EAA4E;AAC5E,qBAAa,aAAc,SAAQ,KAAK;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAKvC;
|
|
1
|
+
{"version":3,"file":"fetch-guard.d.ts","sourceRoot":"","sources":["../../../src/infra/net/fetch-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IACnC,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAeD,0EAA0E;AAC1E,qBAAa,gBAAiB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMvC;AAED,4EAA4E;AAC5E,qBAAa,aAAc,SAAQ,KAAK;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACT,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAKvC;AA0HD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,MAAM,GAAG,IAAI,CA2BpG;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgC/G;AAED,MAAM,WAAW,mBAAmB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gFAAgF;IAChF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,yFAAyF;IACzF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;KAC/E,CAAC;CACF;AAKD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,mBAAwB,GAC5B,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAuK5E"}
|
|
@@ -24,6 +24,18 @@ import { fetchWithRetry } from "../../agents/tools/web-retry.js";
|
|
|
24
24
|
import { buildPinnedDispatcherForHostname, undiciFetch } from "./dns-pinning.js";
|
|
25
25
|
/** Default redirect cap — matches the upstream reference. */
|
|
26
26
|
export const DEFAULT_MAX_REDIRECTS = 3;
|
|
27
|
+
/**
|
|
28
|
+
* Cloud-metadata + forbidden-literal hosts that stay blocked EVEN WHEN
|
|
29
|
+
* `allowPrivateNetwork` is set — these are never a legitimate LAN target and are
|
|
30
|
+
* the highest-value SSRF destinations.
|
|
31
|
+
*/
|
|
32
|
+
const METADATA_HOSTNAMES = new Set([
|
|
33
|
+
"metadata.google.internal",
|
|
34
|
+
"metadata.aws.amazon.com",
|
|
35
|
+
"metadata.azure.com",
|
|
36
|
+
"169.254.169.254",
|
|
37
|
+
"fd00:ec2::254",
|
|
38
|
+
]);
|
|
27
39
|
/** Custom error thrown when an SSRF gate rejects a URL or resolved IP. */
|
|
28
40
|
export class SsrfBlockedError extends Error {
|
|
29
41
|
url;
|
|
@@ -88,14 +100,29 @@ function isLegacyIpv4Literal(host) {
|
|
|
88
100
|
}
|
|
89
101
|
/**
|
|
90
102
|
* Classify an IPv4 address. Returns a reason string when the IP is in a
|
|
91
|
-
* forbidden range, or `null` when it's safe to fetch.
|
|
103
|
+
* forbidden range, or `null` when it's safe to fetch. When `allowPrivate` is
|
|
104
|
+
* set, RFC1918 / loopback / link-local / CGNAT ranges are permitted — but the
|
|
105
|
+
* exact cloud-metadata address `169.254.169.254` and multicast/reserved stay
|
|
106
|
+
* forbidden.
|
|
92
107
|
*/
|
|
93
|
-
function classifyIPv4(ip) {
|
|
108
|
+
function classifyIPv4(ip, allowPrivate = false) {
|
|
94
109
|
const parts = ip.split(".").map((p) => Number.parseInt(p, 10));
|
|
95
110
|
if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {
|
|
96
111
|
return "invalid IPv4";
|
|
97
112
|
}
|
|
98
|
-
const [a, b] = parts;
|
|
113
|
+
const [a, b, c, d] = parts;
|
|
114
|
+
// Cloud-metadata is ALWAYS blocked (even with private access on).
|
|
115
|
+
if (a === 169 && b === 254 && c === 169 && d === 254)
|
|
116
|
+
return "cloud-metadata (169.254.169.254)";
|
|
117
|
+
// 224.0.0.0/4 — multicast (never a valid unicast target).
|
|
118
|
+
if (a >= 224 && a <= 239)
|
|
119
|
+
return "multicast (224.0.0.0/4)";
|
|
120
|
+
// 240.0.0.0/4 — reserved.
|
|
121
|
+
if (a >= 240)
|
|
122
|
+
return "reserved (240.0.0.0/4)";
|
|
123
|
+
// Below: private/loopback/link-local ranges. Permitted when allowPrivate.
|
|
124
|
+
if (allowPrivate)
|
|
125
|
+
return null;
|
|
99
126
|
// 0.0.0.0/8 — "this network"
|
|
100
127
|
if (a === 0)
|
|
101
128
|
return "0.0.0.0/8 unspecified";
|
|
@@ -120,12 +147,6 @@ function classifyIPv4(ip) {
|
|
|
120
147
|
// 192.0.0.0/24 — IANA reserved
|
|
121
148
|
if (a === 192 && b === 0)
|
|
122
149
|
return "IANA reserved (192.0.0/24)";
|
|
123
|
-
// 224.0.0.0/4 — multicast
|
|
124
|
-
if (a >= 224 && a <= 239)
|
|
125
|
-
return "multicast (224.0.0.0/4)";
|
|
126
|
-
// 240.0.0.0/4 — reserved
|
|
127
|
-
if (a >= 240)
|
|
128
|
-
return "reserved (240.0.0.0/4)";
|
|
129
150
|
return null;
|
|
130
151
|
}
|
|
131
152
|
/**
|
|
@@ -133,11 +154,25 @@ function classifyIPv4(ip) {
|
|
|
133
154
|
* forbidden range, or `null` when it's safe. Conservative — when in doubt
|
|
134
155
|
* we refuse.
|
|
135
156
|
*/
|
|
136
|
-
function classifyIPv6(ip) {
|
|
157
|
+
function classifyIPv6(ip, allowPrivate = false) {
|
|
137
158
|
// Strip zone identifier (`fe80::1%eth0`) before classifying — the
|
|
138
159
|
// address itself is what we judge; zone routes locally only.
|
|
139
160
|
const noZone = ip.split("%", 1)[0] ?? ip;
|
|
140
161
|
const lower = noZone.toLowerCase();
|
|
162
|
+
// AWS IPv6 metadata literal is ALWAYS blocked.
|
|
163
|
+
if (lower === "fd00:ec2::254")
|
|
164
|
+
return "cloud-metadata (fd00:ec2::254)";
|
|
165
|
+
// ::ffff:0:0/96 — IPv4-mapped — re-classify the embedded v4 (respects allowPrivate).
|
|
166
|
+
const mapped = lower.match(/^::ffff:([0-9.]+)$/);
|
|
167
|
+
if (mapped) {
|
|
168
|
+
const inner = classifyIPv4(mapped[1] ?? "", allowPrivate);
|
|
169
|
+
if (inner)
|
|
170
|
+
return `IPv4-mapped IPv6 → ${inner}`;
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
// Below: loopback/ULA/link-local ranges. Permitted when allowPrivate.
|
|
174
|
+
if (allowPrivate)
|
|
175
|
+
return null;
|
|
141
176
|
// ::1 — loopback
|
|
142
177
|
if (lower === "::1" || lower === "::ffff:127.0.0.1")
|
|
143
178
|
return "IPv6 loopback";
|
|
@@ -156,13 +191,6 @@ function classifyIPv6(ip) {
|
|
|
156
191
|
if (lower.startsWith("fec") || lower.startsWith("fed") || lower.startsWith("fee") || lower.startsWith("fef")) {
|
|
157
192
|
return "IPv6 site-local (fec0::/10, deprecated)";
|
|
158
193
|
}
|
|
159
|
-
// ::ffff:0:0/96 — IPv4-mapped — re-classify the embedded v4
|
|
160
|
-
const mapped = lower.match(/^::ffff:([0-9.]+)$/);
|
|
161
|
-
if (mapped) {
|
|
162
|
-
const inner = classifyIPv4(mapped[1] ?? "");
|
|
163
|
-
if (inner)
|
|
164
|
-
return `IPv4-mapped IPv6 → ${inner}`;
|
|
165
|
-
}
|
|
166
194
|
return null;
|
|
167
195
|
}
|
|
168
196
|
/**
|
|
@@ -170,29 +198,38 @@ function classifyIPv6(ip) {
|
|
|
170
198
|
* obvious cases (literal `localhost`, IP-in-hostname, forbidden suffix)
|
|
171
199
|
* so we don't even spend a DNS round-trip.
|
|
172
200
|
*/
|
|
173
|
-
export function classifyHostnameSync(hostname) {
|
|
201
|
+
export function classifyHostnameSync(hostname, opts = {}) {
|
|
174
202
|
const host = hostname.toLowerCase();
|
|
175
203
|
if (!host)
|
|
176
204
|
return "empty hostname";
|
|
177
|
-
|
|
205
|
+
const allowPrivate = opts.allowPrivateNetwork === true;
|
|
206
|
+
// Cloud-metadata hostnames are ALWAYS forbidden, even with private access on.
|
|
207
|
+
if (METADATA_HOSTNAMES.has(host))
|
|
178
208
|
return `forbidden hostname (${host})`;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
209
|
+
// The remaining literal/suffix bans are private-network markers: skip them
|
|
210
|
+
// when the caller has opted into a trusted LAN host.
|
|
211
|
+
if (!allowPrivate) {
|
|
212
|
+
if (FORBIDDEN_HOSTNAMES.has(host))
|
|
213
|
+
return `forbidden hostname (${host})`;
|
|
214
|
+
for (const suffix of FORBIDDEN_HOSTNAME_SUFFIXES) {
|
|
215
|
+
if (host.endsWith(suffix))
|
|
216
|
+
return `forbidden hostname suffix (${suffix})`;
|
|
217
|
+
}
|
|
182
218
|
}
|
|
183
219
|
// Strip brackets from IPv6 literals before classifying.
|
|
184
220
|
const stripped = host.startsWith("[") && host.endsWith("]") ? host.slice(1, -1) : host;
|
|
185
221
|
// Refuse non-canonical IPv4 (octal/hex/decimal-int/short forms) outright —
|
|
186
222
|
// these resolve to the same IP via legacy inet_aton parsers but bypass a
|
|
187
|
-
// dotted-quad sanity check.
|
|
223
|
+
// dotted-quad sanity check. (Refused regardless of allowPrivate — a real LAN
|
|
224
|
+
// target uses a canonical dotted-quad.)
|
|
188
225
|
if (isLegacyIpv4Literal(stripped))
|
|
189
226
|
return "legacy IPv4 literal (non-canonical form)";
|
|
190
227
|
if (isIPv4(stripped))
|
|
191
|
-
return classifyIPv4(stripped);
|
|
228
|
+
return classifyIPv4(stripped, allowPrivate);
|
|
192
229
|
// Drop zone identifier before IPv6 classification.
|
|
193
230
|
const noZone = stripped.split("%", 1)[0] ?? stripped;
|
|
194
231
|
if (isIPv6(noZone))
|
|
195
|
-
return classifyIPv6(noZone);
|
|
232
|
+
return classifyIPv6(noZone, allowPrivate);
|
|
196
233
|
if (isIP(stripped) === 0 && /^[\d.]+$/.test(stripped))
|
|
197
234
|
return "invalid IPv4 literal";
|
|
198
235
|
return null;
|
|
@@ -207,7 +244,7 @@ export function classifyHostnameSync(hostname) {
|
|
|
207
244
|
* URL is safe, returns an `SsrfBlockedError`-shaped reason string when
|
|
208
245
|
* not. Caller throws.
|
|
209
246
|
*/
|
|
210
|
-
export async function classifyUrlForSsrf(rawUrl) {
|
|
247
|
+
export async function classifyUrlForSsrf(rawUrl, opts = {}) {
|
|
211
248
|
let parsed;
|
|
212
249
|
try {
|
|
213
250
|
parsed = new URL(rawUrl);
|
|
@@ -218,7 +255,8 @@ export async function classifyUrlForSsrf(rawUrl) {
|
|
|
218
255
|
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
219
256
|
return `forbidden protocol (${parsed.protocol})`;
|
|
220
257
|
}
|
|
221
|
-
const
|
|
258
|
+
const allowPrivate = opts.allowPrivateNetwork === true;
|
|
259
|
+
const hostReason = classifyHostnameSync(parsed.hostname, opts);
|
|
222
260
|
if (hostReason)
|
|
223
261
|
return hostReason;
|
|
224
262
|
// If hostname is already an IP, the sync check has already classified
|
|
@@ -232,7 +270,7 @@ export async function classifyUrlForSsrf(rawUrl) {
|
|
|
232
270
|
try {
|
|
233
271
|
const addresses = await dnsPromises.lookup(parsed.hostname, { all: true });
|
|
234
272
|
for (const a of addresses) {
|
|
235
|
-
const reason = a.family === 6 ? classifyIPv6(a.address) : classifyIPv4(a.address);
|
|
273
|
+
const reason = a.family === 6 ? classifyIPv6(a.address, allowPrivate) : classifyIPv4(a.address, allowPrivate);
|
|
236
274
|
if (reason)
|
|
237
275
|
return `${parsed.hostname} resolves to ${a.address}: ${reason}`;
|
|
238
276
|
}
|
|
@@ -263,6 +301,9 @@ export async function guardedFetch(rawUrl, opts = {}) {
|
|
|
263
301
|
const timeoutTimer = setTimeout(() => timeoutController.abort(new Error("timeout")), timeoutMs);
|
|
264
302
|
timeoutTimer.unref?.();
|
|
265
303
|
const signal = mergeSignals([opts.signal, timeoutController.signal]);
|
|
304
|
+
const allowPrivate = opts.allowPrivateNetwork === true;
|
|
305
|
+
const classifyOpts = allowPrivate ? { allowPrivateNetwork: true } : {};
|
|
306
|
+
const fetchImpl = opts.fetchImpl ?? fetch;
|
|
266
307
|
const visited = new Set();
|
|
267
308
|
const chain = [];
|
|
268
309
|
let currentUrl = rawUrl;
|
|
@@ -276,7 +317,7 @@ export async function guardedFetch(rawUrl, opts = {}) {
|
|
|
276
317
|
}
|
|
277
318
|
visited.add(currentUrl);
|
|
278
319
|
chain.push(currentUrl);
|
|
279
|
-
const ssrfReason = await classifyUrlForSsrf(currentUrl);
|
|
320
|
+
const ssrfReason = await classifyUrlForSsrf(currentUrl, classifyOpts);
|
|
280
321
|
if (ssrfReason)
|
|
281
322
|
throw new SsrfBlockedError(currentUrl, ssrfReason);
|
|
282
323
|
// DNS pinning: pre-resolve + classify every A/AAAA record;
|
|
@@ -295,7 +336,7 @@ export async function guardedFetch(rawUrl, opts = {}) {
|
|
|
295
336
|
try {
|
|
296
337
|
const pinned = await buildPinnedDispatcherForHostname({
|
|
297
338
|
hostname: parsedNow.hostname,
|
|
298
|
-
classifyAddress: (addr, family) => family === 6 ? classifyIPv6(addr) : classifyIPv4(addr),
|
|
339
|
+
classifyAddress: (addr, family) => family === 6 ? classifyIPv6(addr, allowPrivate) : classifyIPv4(addr, allowPrivate),
|
|
299
340
|
});
|
|
300
341
|
if (!pinned) {
|
|
301
342
|
throw new SsrfBlockedError(currentUrl, "all resolved IPs failed SSRF check");
|
|
@@ -325,6 +366,12 @@ export async function guardedFetch(rawUrl, opts = {}) {
|
|
|
325
366
|
redirect: "manual",
|
|
326
367
|
signal,
|
|
327
368
|
};
|
|
369
|
+
// An injected fetch (test seam, or a channel-supplied transport)
|
|
370
|
+
// wins — the SSRF classify above already vetted this hop, so we
|
|
371
|
+
// hand the request straight to it (no real-network pinning).
|
|
372
|
+
if (opts.fetchImpl) {
|
|
373
|
+
return fetchImpl(currentUrl, init);
|
|
374
|
+
}
|
|
328
375
|
if (pinnedDispatcher) {
|
|
329
376
|
// Cast through `unknown` then a permissive `RequestInit` —
|
|
330
377
|
// Node-bundled `undici-types` and the externally-imported
|
|
@@ -337,7 +384,7 @@ export async function guardedFetch(rawUrl, opts = {}) {
|
|
|
337
384
|
dispatcher: pinnedDispatcher,
|
|
338
385
|
});
|
|
339
386
|
}
|
|
340
|
-
return
|
|
387
|
+
return fetchImpl(currentUrl, init);
|
|
341
388
|
};
|
|
342
389
|
const response = opts.retry
|
|
343
390
|
? await fetchWithRetry(doFetch, { ...opts.retry, signal })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-guard.js","sourceRoot":"","sources":["../../../src/infra/net/fetch-guard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fetch-guard.js","sourceRoot":"","sources":["../../../src/infra/net/fetch-guard.ts"],"names":[],"mappings":"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"}
|