# Risk map — QwikDev/qwik

> Canonical page: https://codevetter.com/unpack/qwik/risk-map

# Risk map — QwikDev/qwik

Scanned commit 8eb4589be115eb8f2dabfd12c107dcc23647caec (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The main sensitive boundaries are HTML/script generation, browser chunk loading, request routing and execution, scaffold filesystem writes, local inspection IPC, and privileged CI deployment. Concrete guards exist at several boundaries, including escaping, origin validation, byte limits, and loopback/token checks. Source inconsistencies and operational hypotheses below are not confirmed vulnerabilities. No runtime exploit, production configuration, credential value, or whole-repository absence was established.
- SSR escapes ordinary text and attribute values, while htmlNode writes raw HTML and dangerouslySetInnerHTML preserves supplied HTML; callers choosing raw output own a sensitive trust boundary. — [packages/qwik/src/server/ssr-container.ts#L933-942](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/server/ssr-container.ts#L933-L942) [packages/qwik/src/server/ssr-container.ts#L1797-1807](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/server/ssr-container.ts#L1797-L1807) [packages/qwik/src/server/ssr-container.ts#L1823-1835](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/server/ssr-container.ts#L1823-L1835) [packages/qwik/src/core/shared/utils/character-escaping.ts#L3-32](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/core/shared/utils/character-escaping.ts#L3-L32)
- Backpatch scripts replace '<' with a Unicode escape and apply a supplied nonce; sync-function scripts also propagate serverData.nonce. — [packages/qwik/src/server/ssr-container.ts#L1367-1375](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/server/ssr-container.ts#L1367-L1375) [packages/qwik/src/server/ssr-container.ts#L1422-1427](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/server/ssr-container.ts#L1422-L1427)
- Browser resolveHandler imports a URL derived from chunk metadata and q:base, then selects a named export; integrity of server-emitted QRL metadata is therefore a code-loading boundary. — [packages/qwik/src/qwikloader.ts#L218-235](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/qwikloader.ts#L218-L235) [packages/qwik/src/qwikloader.ts#L318-331](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/qwikloader.ts#L318-L331)
- Router enables checkOrigin by default and prepends CSRF checks for mutation methods; the check compares origins for simple content types, with an explicit lax-proto mode. — [packages/qwik-router/src/middleware/request-handler/request-handler.ts#L129-134](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/request-handler.ts#L129-L134) [packages/qwik-router/src/middleware/request-handler/resolve-request-handlers-core.ts#L112-120](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers-core.ts#L112-L120) [packages/qwik-router/src/middleware/request-handler/resolve-request-handlers-core.ts#L713-745](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers-core.ts#L713-L745)
- Server-function dispatch requires matching query hash/X-QRL and application/qwik-json, validates argument-array shape, and masks ordinary execution failures with an Invalid request response. — [packages/qwik-router/src/middleware/request-handler/resolve-request-handlers-core.ts#L557-586](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/resolve-request-handlers-core.ts#L557-L586)
- Internal full-path headers must be relative absolute-path forms under the loader prefix; scheme-relative paths, foreign origins, and malformed URLs are rejected. — [packages/qwik-router/src/middleware/request-handler/request-path.ts#L67-87](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/request-path.ts#L67-L87) [packages/qwik-router/src/middleware/request-handler/request-handler.ts#L101-110](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/request-handler.ts#L101-L110)
- limitRequestBody validates a positive safe integer and enforces a 10 MiB default by counting streamed bytes; Node middleware combines configured and caller-supplied limits using the smaller value. — [packages/qwik-router/src/middleware/request-handler/request-body-limit.ts#L3-42](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/request-body-limit.ts#L3-L42) [packages/qwik-router/src/middleware/node/index.ts#L55-70](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/node/index.ts#L55-L70)
- Loader result caching excludes redirect, error, and failed-result envelopes; developer-provided cache keys still define which successful serialized responses share cache entries. — [packages/qwik-router/src/middleware/request-handler/handlers/loader-handler.ts#L66-92](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/handlers/loader-handler.ts#L66-L92) [packages/qwik-router/src/middleware/request-handler/handlers/loader-handler.ts#L97-115](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik-router/src/middleware/request-handler/handlers/loader-handler.ts#L97-L115)
- Scaffolding can clear an existing target directory under --force, write outside the repository into an absolute outDir, and invoke package-manager install through execa. — [packages/create-qwik/src/run-create-cli.ts#L73-98](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/create-qwik/src/run-create-cli.ts#L73-L98) [packages/create-qwik/src/create-app.ts#L26-44](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/create-qwik/src/create-app.ts#L26-L44) [packages/qwik/src/cli/add/update-app.ts#L54-76](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/cli/add/update-app.ts#L54-L76) [packages/qwik/src/cli/utils/utils.ts#L8-12](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/qwik/src/cli/utils/utils.ts#L8-L12)
- MCP inspection guards its HTTP endpoint with loopback address, bearer token, absent Origin, exact Host, POST-only handling, and an 8192-byte request limit; discovery files use restrictive creation modes. — [packages/mcp/src/index.ts#L158-173](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/mcp/src/index.ts#L158-L173) [packages/mcp/src/index.ts#L243-268](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/mcp/src/index.ts#L243-L268) [packages/mcp/src/access.ts#L1-3](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/mcp/src/access.ts#L1-L3)
- Insights dashboard middleware requires a session email, but the inspected telemetry handler accepts a validated publicApiKey payload and permits auto-creation; schema validation is not itself proof of application ownership authorization. — [packages/insights/src/routes/app/layout.tsx#L6-13](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/routes/app/layout.tsx#L6-L13) [packages/insights/src/routes/api/v1/[publicApiKey]/post/index.tsx#L8-24](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/routes/api/v1/%5BpublicApiKey%5D/post/index.tsx#L8-L24) [packages/insights/src/root.tsx#L34-41](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/root.tsx#L34-L41)
- Insights sends its OK response before database operations finish, and counter-update comments explicitly accept missed-update risk from avoiding transactions. — [packages/insights/src/routes/api/v1/[publicApiKey]/post/index.tsx#L17-43](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/routes/api/v1/%5BpublicApiKey%5D/post/index.tsx#L17-L43) [packages/insights/src/db/query.ts#L267-269](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/db/query.ts#L267-L269) [packages/insights/src/db/query.ts#L306-308](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/db/query.ts#L306-L308)
- Hypothesis: first-insert delay histograms may use the wrong bucket because updateEdge increments delayBucketField(edge.latencyBucket), while existing-row updates use edge.delayBucket. This source inconsistency was not reproduced. (inferred) — [packages/insights/src/db/query.ts#L270-291](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/insights/src/db/query.ts#L270-L291)
- The root Dockerfile uses Node 16.12.0 and a network-fetched Rust installer, whereas the root manifest requires Node >=22.18.0; the CLI's checkNodeVersion also retains older Node thresholds. — [Dockerfile#L1-8](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/Dockerfile#L1-L8) [package.json#L188-194](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/package.json#L188-L194) [packages/create-qwik/index.ts#L26-49](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/create-qwik/index.ts#L26-L49) [packages/create-qwik/package.json#L17-23](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/packages/create-qwik/package.json#L17-L23)
- Docs deployment is a privileged workflow_run artifact boundary: the job checks repository identity and artifact presence, but the inspected gating does not require workflow_run.conclusion == success despite the header comment. — [.github/workflows/deploy-docs.yml#L1-23](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/.github/workflows/deploy-docs.yml#L1-L23) [.github/workflows/deploy-docs.yml#L25-41](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/.github/workflows/deploy-docs.yml#L25-L41) [.github/workflows/deploy-docs.yml#L48-71](https://github.com/QwikDev/qwik/blob/8eb4589be115eb8f2dabfd12c107dcc23647caec/.github/workflows/deploy-docs.yml#L48-L71)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
