Skip to main content

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 is SECURITY.md.

Supported line

The current 0.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 custom moduleFactory 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, use invariantcad/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.

Security is not geometry certification

Passing validation or conformance tests does not certify a model as safe for manufacturing, medical, structural, aerospace, or other high-consequence use. Applications must apply domain-specific verification and process controls.