patchwork-os 1.2.0-beta.3.canary.875 → 1.2.0-beta.3.canary.877
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/approvalHttp.js +22 -68
- package/dist/approvalHttp.js.map +1 -1
- package/dist/haltPushDispatch.d.ts +6 -4
- package/dist/haltPushDispatch.js +14 -31
- package/dist/haltPushDispatch.js.map +1 -1
- package/dist/pinnedSend.d.ts +40 -0
- package/dist/pinnedSend.js +97 -0
- package/dist/pinnedSend.js.map +1 -0
- package/dist/privateHost.d.ts +35 -0
- package/dist/privateHost.js +202 -0
- package/dist/privateHost.js.map +1 -0
- package/dist/recipes/tools/http.js +24 -21
- package/dist/recipes/tools/http.js.map +1 -1
- package/dist/ssrfGuard.d.ts +39 -34
- package/dist/ssrfGuard.js +64 -214
- package/dist/ssrfGuard.js.map +1 -1
- package/package.json +1 -1
package/dist/ssrfGuard.js
CHANGED
|
@@ -26,204 +26,26 @@
|
|
|
26
26
|
* both walked straight past it):
|
|
27
27
|
* - `validateOutboundUrl(url, opts)` — parse, protocol, userinfo strip,
|
|
28
28
|
* lexical check, DNS pre-resolution re-check, returns the address to pin.
|
|
29
|
-
* - `safeFetch(url, init, opts)` — validates, pins the
|
|
30
|
-
* resolved address
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* cross-origin hop.
|
|
35
|
-
*/
|
|
36
|
-
import dns from "node:dns/promises";
|
|
37
|
-
/**
|
|
38
|
-
* Convert the hex-compressed form that `new URL()` may return for an
|
|
39
|
-
* IPv4-mapped/translated IPv6 address back to dotted-decimal so the existing
|
|
40
|
-
* `isPrivateHost` checks apply.
|
|
41
|
-
*
|
|
42
|
-
* Handles:
|
|
43
|
-
* "xxxx:yyyy" — two 16-bit groups (up to 4 hex digits each, no leading zeros)
|
|
44
|
-
* "xxxxxxxx" — a single 32-bit group
|
|
45
|
-
*
|
|
46
|
-
* Returns null when the input is not recognisable as 32-bit hex-IPv4.
|
|
47
|
-
*/
|
|
48
|
-
function hexIpv4ToDotted(s) {
|
|
49
|
-
const colon = s.indexOf(":");
|
|
50
|
-
if (colon !== -1) {
|
|
51
|
-
const hi = s.slice(0, colon);
|
|
52
|
-
const lo = s.slice(colon + 1);
|
|
53
|
-
if (!/^[0-9a-f]{1,4}$/i.test(hi) || !/^[0-9a-f]{1,4}$/i.test(lo))
|
|
54
|
-
return null;
|
|
55
|
-
const hiN = parseInt(hi, 16);
|
|
56
|
-
const loN = parseInt(lo, 16);
|
|
57
|
-
return `${(hiN >>> 8) & 0xff}.${hiN & 0xff}.${(loN >>> 8) & 0xff}.${loN & 0xff}`;
|
|
58
|
-
}
|
|
59
|
-
if (!/^[0-9a-f]{1,8}$/i.test(s))
|
|
60
|
-
return null;
|
|
61
|
-
const n = parseInt(s, 16);
|
|
62
|
-
return `${(n >>> 24) & 0xff}.${(n >>> 16) & 0xff}.${(n >>> 8) & 0xff}.${n & 0xff}`;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* inet_aton-style loose IPv4 parse: 1-4 parts, each decimal, octal (leading
|
|
66
|
-
* 0) or hex (0x). Returns canonical dotted-quad or null when the string is
|
|
67
|
-
* not an all-numeric IPv4 form. `new URL()` already canonicalises these, but
|
|
68
|
-
* callers that hand `isPrivateHost` a raw string (a DNS answer, a Location
|
|
69
|
-
* header hostname) must not be bypassable by `0x7f000001`, `2130706433`,
|
|
70
|
-
* `0177.0.0.1` or `127.1`.
|
|
71
|
-
*/
|
|
72
|
-
function looseIpv4ToDotted(host) {
|
|
73
|
-
if (!/^[0-9a-fx.]+$/i.test(host) ||
|
|
74
|
-
host.startsWith(".") ||
|
|
75
|
-
host.endsWith("."))
|
|
76
|
-
return null;
|
|
77
|
-
const parts = host.split(".");
|
|
78
|
-
if (parts.length < 1 || parts.length > 4)
|
|
79
|
-
return null;
|
|
80
|
-
const nums = [];
|
|
81
|
-
for (const part of parts) {
|
|
82
|
-
let n;
|
|
83
|
-
if (/^0x[0-9a-f]+$/i.test(part))
|
|
84
|
-
n = parseInt(part.slice(2), 16);
|
|
85
|
-
else if (/^0[0-7]+$/.test(part))
|
|
86
|
-
n = parseInt(part, 8);
|
|
87
|
-
else if (/^\d+$/.test(part))
|
|
88
|
-
n = parseInt(part, 10);
|
|
89
|
-
else
|
|
90
|
-
return null;
|
|
91
|
-
if (!Number.isFinite(n))
|
|
92
|
-
return null;
|
|
93
|
-
nums.push(n);
|
|
94
|
-
}
|
|
95
|
-
// Last part fills the remaining bytes (inet_aton semantics).
|
|
96
|
-
const last = nums[nums.length - 1];
|
|
97
|
-
const remainingBytes = 4 - (nums.length - 1);
|
|
98
|
-
if (last >= 2 ** (8 * remainingBytes))
|
|
99
|
-
return null;
|
|
100
|
-
for (let i = 0; i < nums.length - 1; i++) {
|
|
101
|
-
if (nums[i] > 255)
|
|
102
|
-
return null;
|
|
103
|
-
}
|
|
104
|
-
let value = 0;
|
|
105
|
-
for (let i = 0; i < nums.length - 1; i++) {
|
|
106
|
-
value = value * 256 + nums[i];
|
|
107
|
-
}
|
|
108
|
-
value = value * 2 ** (8 * remainingBytes) + last;
|
|
109
|
-
return `${(value >>> 24) & 0xff}.${(value >>> 16) & 0xff}.${(value >>> 8) & 0xff}.${value & 0xff}`;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Block requests to private/loopback addresses. Lexical-only check.
|
|
113
|
-
*
|
|
114
|
-
* Mirrors the predicate previously inlined in `tools/httpClient.ts`. Updates
|
|
115
|
-
* here MUST stay in sync with the test fixtures in
|
|
116
|
-
* `src/tools/__tests__/httpClient.test.ts`.
|
|
117
|
-
*/
|
|
118
|
-
export function isPrivateHost(hostname) {
|
|
119
|
-
const host = hostname.startsWith("[") && hostname.endsWith("]")
|
|
120
|
-
? hostname.slice(1, -1).toLowerCase()
|
|
121
|
-
: hostname.toLowerCase();
|
|
122
|
-
if (host === "localhost" || host.endsWith(".localhost"))
|
|
123
|
-
return true;
|
|
124
|
-
if (host === "0.0.0.0")
|
|
125
|
-
return true;
|
|
126
|
-
// Reject non-decimal IPv4 notations (hex/octal) that bypass the dotted-quad
|
|
127
|
-
// regex below. Node's URL parser may normalize them on some platforms.
|
|
128
|
-
if (/^0x[0-9a-f]+$/i.test(host) || /^0[0-7]{7,}$/.test(host))
|
|
129
|
-
return true;
|
|
130
|
-
// Unusual IPv4 notations (decimal integer, short-form "127.1", zero-padded
|
|
131
|
-
// octal, per-part hex): canonicalise and re-check the dotted form.
|
|
132
|
-
const canonicalIpv4 = /^\d{1,3}(\.\d{1,3}){3}$/.test(host);
|
|
133
|
-
if (!canonicalIpv4) {
|
|
134
|
-
const dotted = looseIpv4ToDotted(host);
|
|
135
|
-
if (dotted !== null)
|
|
136
|
-
return isPrivateHost(dotted);
|
|
137
|
-
}
|
|
138
|
-
// IPv4 range checks
|
|
139
|
-
const ipv4 = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
140
|
-
if (ipv4) {
|
|
141
|
-
const a = Number(ipv4[1]);
|
|
142
|
-
const b = Number(ipv4[2]);
|
|
143
|
-
if (a === 127)
|
|
144
|
-
return true; // 127.0.0.0/8 loopback
|
|
145
|
-
if (a === 10)
|
|
146
|
-
return true; // 10.0.0.0/8 RFC 1918 private
|
|
147
|
-
if (a === 172 && b >= 16 && b <= 31)
|
|
148
|
-
return true; // 172.16.0.0/12 RFC 1918 private
|
|
149
|
-
if (a === 192 && b === 168)
|
|
150
|
-
return true; // 192.168.0.0/16 RFC 1918 private
|
|
151
|
-
if (a === 169 && b === 254)
|
|
152
|
-
return true; // 169.254.0.0/16 link-local / AWS metadata
|
|
153
|
-
if (a === 100 && b >= 64 && b <= 127)
|
|
154
|
-
return true; // 100.64.0.0/10 CGNAT (RFC 6598)
|
|
155
|
-
if (a === 0)
|
|
156
|
-
return true; // 0.0.0.0/8
|
|
157
|
-
}
|
|
158
|
-
// IPv6 checks
|
|
159
|
-
if (host === "::1")
|
|
160
|
-
return true; // loopback
|
|
161
|
-
if (host.startsWith("fe80:"))
|
|
162
|
-
return true; // link-local
|
|
163
|
-
if (host.startsWith("fc") || host.startsWith("fd"))
|
|
164
|
-
return true; // ULA (RFC 4193)
|
|
165
|
-
if (host.startsWith("2002:"))
|
|
166
|
-
return true; // 6to4 (RFC 3056) — embeds IPv4 in bits 16-47;
|
|
167
|
-
// a 6to4 address for a private IPv4 (e.g. 2002:c0a8:0101:: → 192.168.1.1) bypasses
|
|
168
|
-
// the IPv4 checks above unless we block the entire /16 here.
|
|
169
|
-
// Check longer prefix first — ::ffff:0: (IPv4-translated) before ::ffff: (IPv4-mapped)
|
|
170
|
-
// Also handle hex-compressed form that new URL() may return (e.g. "7f00:1" = 127.0.0.1).
|
|
171
|
-
if (host.startsWith("::ffff:0:")) {
|
|
172
|
-
const rest = host.slice(9);
|
|
173
|
-
const dotted = hexIpv4ToDotted(rest);
|
|
174
|
-
return isPrivateHost(dotted ?? rest);
|
|
175
|
-
}
|
|
176
|
-
if (host.startsWith("::ffff:")) {
|
|
177
|
-
const rest = host.slice(7);
|
|
178
|
-
const dotted = hexIpv4ToDotted(rest);
|
|
179
|
-
return isPrivateHost(dotted ?? rest);
|
|
180
|
-
}
|
|
181
|
-
return false;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Loopback-only check (127.0.0.0/8, ::1, localhost). Lexical-only.
|
|
185
|
-
*
|
|
186
|
-
* Used by `isPrivateNonLoopbackHost` and by automation webhook fan-out, which
|
|
187
|
-
* intentionally ALLOWS loopback (sidecars) but blocks every other private
|
|
188
|
-
* range (RFC 1918, link-local, ULA, IMDS, 6to4-wrapped private, etc.).
|
|
189
|
-
*/
|
|
190
|
-
export function isLoopbackHost(hostname) {
|
|
191
|
-
const host = hostname.startsWith("[") && hostname.endsWith("]")
|
|
192
|
-
? hostname.slice(1, -1).toLowerCase()
|
|
193
|
-
: hostname.toLowerCase();
|
|
194
|
-
if (host === "localhost" || host.endsWith(".localhost"))
|
|
195
|
-
return true;
|
|
196
|
-
if (host === "::1")
|
|
197
|
-
return true;
|
|
198
|
-
const ipv4 = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
|
|
199
|
-
if (ipv4 && Number(ipv4[1]) === 127)
|
|
200
|
-
return true;
|
|
201
|
-
// IPv6-mapped/translated loopback: ::ffff:127.0.0.1 / ::ffff:0:127.0.0.1
|
|
202
|
-
// Also handle hex-compressed form from new URL() (e.g. "7f00:1" = 127.0.0.1).
|
|
203
|
-
if (host.startsWith("::ffff:0:")) {
|
|
204
|
-
const rest = host.slice(9);
|
|
205
|
-
const dotted = hexIpv4ToDotted(rest);
|
|
206
|
-
return isLoopbackHost(dotted ?? rest);
|
|
207
|
-
}
|
|
208
|
-
if (host.startsWith("::ffff:")) {
|
|
209
|
-
const rest = host.slice(7);
|
|
210
|
-
const dotted = hexIpv4ToDotted(rest);
|
|
211
|
-
return isLoopbackHost(dotted ?? rest);
|
|
212
|
-
}
|
|
213
|
-
return false;
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Private host MINUS loopback. Lexical-only.
|
|
29
|
+
* - `safeFetch(url, init, opts)` — validates, pins the CONNECTION to the
|
|
30
|
+
* resolved address through an undici dispatcher whose `connect.lookup`
|
|
31
|
+
* returns that address, follows up to N redirects manually re-validating
|
|
32
|
+
* EVERY hop, downgrades method/body per RFC 7231 on 301/302/303, and
|
|
33
|
+
* drops credential headers on a cross-origin hop.
|
|
217
34
|
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
35
|
+
* The pin lives in the connection, never in the URL. #1572 first pinned by
|
|
36
|
+
* rewriting the URL's hostname to the IP and carrying the name in a `Host`
|
|
37
|
+
* header; TLS takes SNI and the certificate check from the URL, so every
|
|
38
|
+
* public HTTPS request failed ERR_TLS_CERT_ALTNAME_INVALID, and `fetch`
|
|
39
|
+
* silently drops a caller-set `Host`, so plain HTTP reached virtual hosts
|
|
40
|
+
* with the wrong one. Found 2026-10-02 against the installed build; nothing
|
|
41
|
+
* in the suite could see it because every test used a mocked fetch or a
|
|
42
|
+
* loopback HTTP server.
|
|
221
43
|
*/
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
44
|
+
import dns from "node:dns/promises";
|
|
45
|
+
import { Agent } from "undici";
|
|
46
|
+
import { isLoopbackHost, isPrivateHost, isPrivateNonLoopbackHost, } from "./privateHost.js";
|
|
47
|
+
// Re-exported so every existing `from "./ssrfGuard.js"` importer is unchanged.
|
|
48
|
+
export { isLoopbackHost, isPrivateHost, isPrivateNonLoopbackHost };
|
|
227
49
|
/**
|
|
228
50
|
* Async URL safety gate used by `/recipes/install` and `commands/recipeInstall.ts`.
|
|
229
51
|
*
|
|
@@ -355,21 +177,45 @@ function refusalMessage(v, hop) {
|
|
|
355
177
|
return `${where}request refused`;
|
|
356
178
|
}
|
|
357
179
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
180
|
+
/**
|
|
181
|
+
* A dispatcher whose connections go to `address` (when given), however the
|
|
182
|
+
* URL's hostname would resolve. The URL is left alone, so TLS uses the real
|
|
183
|
+
* name for SNI and certificate verification and the Host header is derived
|
|
184
|
+
* from it. Node's `net`/`tls` call `lookup` with `{ all: true }` when
|
|
185
|
+
* autoSelectFamily is on, so both callback shapes are answered.
|
|
186
|
+
*
|
|
187
|
+
* One Agent per hop, with short keep-alive: the pin is per-hostname-per-hop,
|
|
188
|
+
* and a shared pool keyed only on origin would happily reuse a socket pinned
|
|
189
|
+
* for a previous answer.
|
|
190
|
+
*/
|
|
191
|
+
function hopDispatcher(address, opts) {
|
|
192
|
+
const connect = { ...(opts.connect ?? {}) };
|
|
193
|
+
if (address !== undefined) {
|
|
194
|
+
const family = address.includes(":") ? 6 : 4;
|
|
195
|
+
connect.lookup = (_hostname, lookupOpts, cb) => {
|
|
196
|
+
if (lookupOpts?.all)
|
|
197
|
+
cb(null, [{ address, family }]);
|
|
198
|
+
else
|
|
199
|
+
cb(null, address, family);
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const agent = new Agent({
|
|
203
|
+
connect,
|
|
204
|
+
keepAliveTimeout: 1_000,
|
|
205
|
+
keepAliveMaxTimeout: 1_000,
|
|
206
|
+
});
|
|
207
|
+
return opts.wrapDispatcher ? opts.wrapDispatcher(agent) : agent;
|
|
364
208
|
}
|
|
365
209
|
/**
|
|
366
210
|
* Fetch with the full outbound discipline. Throws `OutboundHttpError` on any
|
|
367
211
|
* refusal (initial URL or any redirect hop); transport errors propagate from
|
|
368
212
|
* `fetchImpl` untouched so callers keep their own timeout/abort messages.
|
|
369
213
|
*
|
|
370
|
-
* `init.headers` must be a plain object; keys are lowercased.
|
|
371
|
-
*
|
|
372
|
-
*
|
|
214
|
+
* `init.headers` must be a plain object; keys are lowercased. A caller's
|
|
215
|
+
* `host` header and `dispatcher` are DROPPED: Host is derived from the URL,
|
|
216
|
+
* and the dispatcher is the pin — accepting either from the caller is a way
|
|
217
|
+
* to steer the request somewhere the validation never looked. Every other
|
|
218
|
+
* `init` field (signal, …) is passed through.
|
|
373
219
|
*/
|
|
374
220
|
export async function safeFetch(input, init = {}, opts = {}) {
|
|
375
221
|
const fetchImpl = opts.fetchImpl ?? ((u, i) => globalThis.fetch(u, i));
|
|
@@ -381,15 +227,17 @@ export async function safeFetch(input, init = {}, opts = {}) {
|
|
|
381
227
|
}
|
|
382
228
|
const headers = {};
|
|
383
229
|
for (const [k, v] of Object.entries(init.headers ?? {})) {
|
|
384
|
-
|
|
230
|
+
const key = k.toLowerCase();
|
|
231
|
+
if (key === "host")
|
|
232
|
+
continue;
|
|
233
|
+
headers[key] = v;
|
|
385
234
|
}
|
|
386
|
-
const { method: initMethod, headers: _h, body: initBody, ...rest } = init;
|
|
235
|
+
const { method: initMethod, headers: _h, body: initBody, dispatcher: _callerDispatcher, ...rest } = init;
|
|
387
236
|
let currentMethod = (initMethod ?? "GET").toUpperCase();
|
|
388
237
|
let currentBody = initBody;
|
|
389
238
|
let displayUrl = first.url;
|
|
390
|
-
let currentUrl =
|
|
391
|
-
|
|
392
|
-
headers.host = first.url.hostname;
|
|
239
|
+
let currentUrl = first.url.toString();
|
|
240
|
+
let currentDispatcher = hopDispatcher(first.pinnedAddress, opts);
|
|
393
241
|
const originalOrigin = first.url.origin;
|
|
394
242
|
let redirects = 0;
|
|
395
243
|
while (true) {
|
|
@@ -399,6 +247,7 @@ export async function safeFetch(input, init = {}, opts = {}) {
|
|
|
399
247
|
headers,
|
|
400
248
|
body: currentBody,
|
|
401
249
|
redirect: "manual",
|
|
250
|
+
dispatcher: currentDispatcher,
|
|
402
251
|
});
|
|
403
252
|
const isRedirect = response.status >= 300 && response.status < 400;
|
|
404
253
|
if (!followRedirects || !isRedirect) {
|
|
@@ -424,9 +273,6 @@ export async function safeFetch(input, init = {}, opts = {}) {
|
|
|
424
273
|
if (!next.ok || next.url === undefined) {
|
|
425
274
|
throw new OutboundHttpError(next.reason ?? "invalid_redirect", refusalMessage(next, "redirect"));
|
|
426
275
|
}
|
|
427
|
-
// Host always from the real name — even when this hop's DNS failed —
|
|
428
|
-
// so the previous hop's Host never leaks onto the new request.
|
|
429
|
-
headers.host = next.url.hostname;
|
|
430
276
|
// RFC 7231 + browser/fetch semantics: 301/302 of a non-GET/HEAD and any
|
|
431
277
|
// 303 become GET without a body; 307/308 preserve both.
|
|
432
278
|
if (response.status === 303 ||
|
|
@@ -442,8 +288,12 @@ export async function safeFetch(input, init = {}, opts = {}) {
|
|
|
442
288
|
for (const h of CREDENTIAL_HEADERS)
|
|
443
289
|
delete headers[h];
|
|
444
290
|
}
|
|
291
|
+
// The previous hop's response is fully handled (a redirect body is never
|
|
292
|
+
// read), so its dispatcher can close; the next hop gets its own pin.
|
|
293
|
+
void currentDispatcher.close?.().catch?.(() => { });
|
|
445
294
|
displayUrl = next.url;
|
|
446
|
-
currentUrl =
|
|
295
|
+
currentUrl = next.url.toString();
|
|
296
|
+
currentDispatcher = hopDispatcher(next.pinnedAddress, opts);
|
|
447
297
|
redirects++;
|
|
448
298
|
}
|
|
449
299
|
}
|
package/dist/ssrfGuard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssrfGuard.js","sourceRoot":"","sources":["../src/ssrfGuard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ssrfGuard.js","sourceRoot":"","sources":["../src/ssrfGuard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "patchwork-os",
|
|
3
|
-
"version": "1.2.0-beta.3.canary.
|
|
3
|
+
"version": "1.2.0-beta.3.canary.877",
|
|
4
4
|
"description": "Your personal AI runtime, local-first. Patchwork OS gives any AI model a consistent set of tools, YAML recipes, a delegation policy with approval queue, and a durable trace memory — all on your machine, all under your policy.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|