Security baseline
What we protect
Private hardware designs (schematics, boards, firmware, HDL), user accounts and sessions, the integrity of manufacturing output, physical devices connected to a user’s machine, and the build and supply chain.
Controls that exist today
| Threat | Control | Evidence |
|---|---|---|
| Malicious project files | Schema validation, safe relative paths (no traversal, devices, drive letters), realpath symlink confinement, size caps, zip-slip and zip-bomb limits, newer-version refusal | falcad-format tests |
| Corrupting edits | Every mutation is a validated, atomic transaction with referential-integrity and document checks | falcad-kernel tests, conformance vectors |
| Enumerable identifiers | UUID v4 from the OS CSPRNG everywhere; numeric ids rejected by schema | format tests |
| Renderer compromise in desktop | Sandbox, context isolation, no Node, custom scheme, blocked navigation and windows, permissions denied, opaque per-window folder handles, sender checks on every IPC call | Electron e2e test (no require/process, exact bridge, forged handle refused) |
| Untrusted HDL/tool runs | No shell, argument arrays, cwd confinement, env allowlist, output caps, deadlines with process-tree kill; WebAssembly runs in workers with deadlines | falcad-hdl, falcad-mcu tests (being consolidated into falcad-toolchains) |
| Hardware misuse | Flash/erase/debug only with a single-use approval bound to device identity and firmware SHA-256; no device I/O exposed to automation | falcad-mcu tests |
| Automation and prompt injection | MCP: only exposed projects, ids instead of paths, read-only plus proposals, no approval/device tools, design text returned as labelled data | falcad-cli MCP tests |
| Supply chain | Pinned versions, npm audit in CI, overrides for vulnerable transitive packages, license ledger |
falcad-toolchains/LICENSE_LEDGER.md, app package.json overrides |
| Cloud access control (BOLA/IDOR) | Resource-based authorization loading current membership on every request and hub call; 404 for invisible resources; an authorization matrix test enumerating every endpoint across roles and tenants | private falcad-cloud test suite |
| Content injection in the web app | Strict CSP generated at build time; no remote scripts; build fails if production targets localhost | vite.config.ts |
Known gaps
- No code signing or notarization yet: the certificates must be held by a person.
- Extensions run in a sandboxed iframe within the renderer process. That isolates them from the app’s DOM and data, but it isn’t a process boundary against renderer exploits. Native extensions aren’t supported.
- Fuzzing of the project and Gerber parsers is planned. Current coverage is example-based.
- The hosted service hasn’t had an external penetration test, and none will be claimed until one happens.
Report vulnerabilities as described in Reporting vulnerabilities.