Security
Our software is developed in Rust, a programming language designed for memory safety and type safety without sacrificing system-level performance. By leveraging Rust’s ownership model, strict type system, and compile-time checks, we effectively prevent common classes of vulnerabilities such as memory corruption, buffer overflows, and use-after-free errors.
Unsafe code is forbidden across the crate (#![forbid(unsafe_code)]), and the linting policy denies panicking shortcuts (unwrap, expect, panic), unchecked arithmetic and unchecked indexing in production code.
The viewer serves HTTPS only: a TLS 1.3 listener built on rustls (aws-lc-rs provider with prefer-post-quantum, so the X25519MLKEM768 post-quantum hybrid key-exchange group is offered first), with a self-signed certificate regenerated at every start-up. It binds to localhost by default, serves only the in-memory SARIF logs the operator has loaded together with the embedded static assets, and sets defence-in-depth response headers on every response: HTTP Strict-Transport-Security, X-Frame-Options DENY, a restrictive Content-Security-Policy, X-Content-Type-Options nosniff, referrer minimisation, a Permissions-Policy deny list and cross-origin isolation headers. HTTP/3 is additionally offered over QUIC on the same provider.
Filesystem writes happen only on explicit request (the Export menu or the export subcommand) and are performed through capability-based cap-std directory handles with create-new semantics, preventing path traversal and time-of-check/time-of-use attacks.
Static code analysis is enforced with Clippy (pedantic), cargo-audit and cargo-deny. We explicitly guarantee that our software contains no built-in backdoors or hidden functionalities. The code is developed transparently and adheres to the principles of trustworthy and verifiable software engineering.
Our processes and software design therefore fulfil state-of-the-art IT security and data protection requirements, supporting the principles of privacy by design and privacy by default. The solution meets the criteria for the TeleTrusT trust marks “IT Security made in Germany” and “IT Security made in Europe”.
Technical controls
- Transport. TLS 1.3 only — HTTP/1.1 + HTTP/2 over TCP and HTTP/3 over QUIC/UDP — on the rustls aws-lc-rs provider with prefer-post-quantum (X25519MLKEM768 offered first); self-signed localhost certificate minted at start-up.
- Schema validation gate. Every import and export is validated against the embedded SARIF 2.1.0 and 2.2 schemas; invalid documents are rejected on import and refused on export.
- Response hardening. Strict security headers on every response: CSP script-src 'self' (no inline scripts), HSTS, X-Frame-Options: DENY, nosniff, Referrer-Policy: no-referrer, COOP/COEP/CORP.
- Path security. Exports are written through a capability-scoped (cap-std 4.x, openat2(RESOLVE_BENEATH)) directory handle from a single audited boundary; output filenames are slugified and re-checked as safe single segments. A path-traversal regression corpus and a dedicated fuzz target guard the lexical primitive — per the ndaal rust-path-security skill. Per-file checksum sidecars (SHA-256/512, SHA3-512, BLAKE3-512, SHAKE256-512) support integrity verification.
- Connection limits. Bounded concurrency, a TLS-handshake timeout and a slowloris header-read timeout.
Report a vulnerability to security@ndaal.eu.