You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Verified each finding before changing anything; one was rejected as unreachable.
The P1 is real and mine. `validateMcpServerSsrf` used one profile for every
caller, so OAuth legs — whose URLs come out of authorization-server metadata,
as that file's own docstring says — inherited configured-endpoint privileges. A
hostile MCP server could have steered discovery, token exchange or revocation at
whatever the operator allowlisted for their own workflows. Those legs take
`contentFetch` now.
That made two branches in the OAuth fetch dead, one of them badly: a null
resolution fell through to an unguarded `globalThis.fetch`. Under `contentFetch`
the only way to get there is an unresolved env-var hostname, which is never a
real authorization-server URL, so it refuses instead. No leg of that flow reaches
the network unguarded now.
Also restored: 26 tests for `validateSupabaseProjectId`, which is live in two
production call sites. Its suite was nested inside the `validateMondayColumnId`
describe on staging, so removing that dead block took it as collateral. It is
top-level now, where it belongs.
The rest:
- The boundary script missed `await import()` and `require()`, and falsely
flagged `import type`. All four forms are covered and verified with probes.
- `validateVendorHostedUrl` accepted plain HTTP to ServiceNow, Workday and
Databricks if an operator happened to allowlist the vendor's domain. They are
HTTPS-only SaaS; enforced before the general policy runs.
- STT resolved an internal file to a presigned storage URL and then judged it as
content, so a self-hosted MinIO on a private address would have failed. Same
provenance threading as textract.
- The env-flags warning printed the allowlist entries; internal topology stays
out of a log line that may leave the deployment.
- The testing mock served egress config while hosted, which production never
does — a test could assert a posture that cannot exist.
- The security doc's example allowlisted `*.svc.cluster.local` and all of
`10.0.0.0/8` directly under a warning to name specific hosts.
- `--strict` restored on lint:helm; it passes, and the original intent stands.
- My own end-to-end test rejected on scheme rather than address, so it would have
passed even if `contentFetch` started honouring the allowlist.
Not changed: the guarded lookup ignoring the request profile. Both callers route
a private resolution to the pinned path (`client.ts`, `pinned-fetch.ts`), so an
allowlisted private address never reaches that lookup, and it fails closed.
A wildcard (`*.svc.cluster.local`) and a broad range (`10.0.0.0/8`) are accepted, but they hand every workflow author the whole namespace or network. Name the hosts you actually use.
157
+
156
158
Naming a destination permits plain HTTP to it and lifts the blocked-port list for it, since those are the same decision about the same host. Cloud metadata endpoints (`169.254.169.254` and equivalents) stay blocked no matter how broad the allowlist is, and both variables are ignored entirely on Sim Cloud.
157
159
158
160
To reach a service on the Docker host, pair the allowlist with the host alias that Compose already sets up:
Copy file name to clipboardExpand all lines: apps/sim/lib/core/config/env-flags.ts
+3-2Lines changed: 3 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -196,9 +196,10 @@ if (env.EGRESS_ALLOWED_HOSTS || env.EGRESS_ALLOWED_IP_RANGES) {
196
196
'EGRESS_ALLOWED_HOSTS/EGRESS_ALLOWED_IP_RANGES are set but ignored on hosted environment. Private, reserved, and loopback destinations remain blocked for security.'
197
197
)
198
198
}else{
199
+
// The entries themselves are internal network topology and stay out of
200
+
// the log line, which may leave the deployment.
199
201
logger.warn(
200
-
'Private-network egress allowlist is configured. Outbound requests may reach the listed destinations. Only use this on a trusted private network.',
0 commit comments