Report privately
Use GitHub private vulnerability reporting for a suspected vulnerability. Do not disclose an unpatched issue in a public issue, discussion, pull request, or social post. Include the affected version and runtime, a minimal reproducer, impact, reachable trust boundary, whether untrusted input is required, and any proposed mitigation. The canonical response policy isSECURITY.md.
Supported line
The current0.1.x line receives security fixes. Pre-release development
commits and old 0.x minor lines may require upgrading to the newest supported
minor.
Threat boundaries
InvariantCAD processes potentially hostile JSON documents, parameters, topology evidence and snapshots, native exchange or future artifact bytes, WebAssembly modules, custom module factories, and output metadata. Document parsing applies byte, structure, depth, query, reference, adjacency, and evidence limits before schema validation. Kernel/native boundaries apply capability checks, exact fingerprints, record ceilings, and ownership rollback where the protocol defines them.WebAssembly is native-capability code
Only load JavaScript glue and WASM from trusted, matched sources. A custommoduleFactory executes code with the privileges of the containing JavaScript
realm. In Node.js, that can include filesystem and process access available to
the application.
Run untrusted or high-cost workloads in a worker, process, or container with
host resource limits. An AbortSignal is cooperative and cannot preempt every
same-thread synchronous native call.
Attested owned OCCT loading
For a reviewed owned-facade bundle, useinvariantcad/kernels/occt/node or
invariantcad/kernels/occt/browser. The loaders copy caller-owned manifest,
JavaScript, and WASM bytes; verify exact canonical metadata/release.json
against an independently trusted SHA-256 pin; and verify the runtime file sizes
and digests before supplied JavaScript executes. A digest fetched beside an
otherwise untrusted bundle is not an independent trust anchor.
The resulting attestedRuntime is an opaque authority accepted only by the
evaluated InvariantCAD internal module instance that created it. Its visible
attestation report can be cloned, but the executable authority cannot be
reproduced or transferred to another Worker. createOcctKernel supplies a
fresh verified WASM copy, checks the initialized facade marker, and binds the
exact pair identity only into the repository-private artifact fingerprint. It
still does not advertise shapeArtifacts.
In Node.js, the loader creates no temporary executable file. Node 22.15 and
newer use an isolated node:module.registerHooks() hook per load and
deregister it after import. Node 22.13 and 22.14 retain the compatible
process-wide node:module.register() worker-hook fallback, for which the
Permission Model must allow workers. The evaluated module cache remains for
the process lifetime on either path. In browsers, the loader imports a unique
Blob module URL and requires blob: in the applicable script-src policy. A
Worker or child process remains the hard reclamation boundary.
The report’s separate declared-build identity hashes the exact release manifest,
but buildExecutionObserved, buildExecutionAuthenticated,
publisherAuthenticated, and certifiesCompatibility remain false. This
mechanism does not defend a compromised realm, browser, extension, service
worker, Node module-hook chain, same-process attacker, host, or engine, and it
does not attest the wider application, InvariantCAD wrapper/library, or machine
instructions. See
OCCT runtime attestation.
Dependency policy
Production releases require a zero-advisory package audit. The default Manifold geometry core is vendored as versioned, SHA-256-pinned upstream artifacts, avoiding its unrelated image/glTF dependency graph.occt-wasm is pinned
exactly because its JavaScript and WASM form a matched runtime.
Dependency alerts are not dismissed merely to make a badge green. Any future
exception requires documented reachability, fail-closed CI, and a removal plan.