Security

Hardened by default, verifiable end to end.

cardinal is a Linux container runtime, not a VM boundary. Namespaces, OverlayFS, cgroups, capability dropping, and strict validation reduce the impact of untrusted workloads — and every release is verifiable from source to binary.

seccomp profile

Blocks 30+ dangerous syscalls (mount, ptrace, reboot, kexec_load, bpf) by default. Bring your own JSON profile with --seccomp-profile.

AppArmor

A cardinal-container profile restricts access to /proc/sys, /sys/firmware, denies /dev/mem and /dev/kmem, and limits ptrace to the container.

Capability dropping

Safe default capability set, SYS_ADMIN and SYS_MODULE dropped, no_new_privs enabled, sysctls restricted to net.*. --cap-drop ALL for an empty set.

Dangerous-capability gate

Adding SYS_ADMIN, NET_ADMIN, BPF and similar is refused unless --allow-dangerous-caps is passed — and the escalation is flagged in the audit log.

Device restrictions

/dev/shm and /dev/mqueue mounted with noexec,nosuid,nodev; /proc/sys and /sys bind-mounted read-only; sensitive devices removed.

Network segmentation

--isolated blocks inter-container traffic via iptables, preventing lateral movement between workloads.

Encrypted backups

Backup archives carry SHA-256 sidecar checksums and optional AES-256-GCM encryption.

Protected bind mounts

Mounts into ~/.ssh, ~/.aws, credential dirs, and container runtime sockets are blocked. Traversal and symlink escapes are rejected.

Registry allowlist

CARDINAL_REGISTRY_STRICT plus cardinal registry allowlist add <host> refuses pulls and pushes from unapproved registries.

Verified supply chain

Every release publishes SHA256SUMS.txt, an SPDX-JSON SBOM, and optional cosign signatures. install.sh verifies digests before installing.

Deployment

The safe deployment checklist.

Ten rules from the project's SECURITY.md for running cardinal in production.

01

Pin versions

Install via the SHA256-verified install.sh or the signed APT repository. Verify images with cardinal verify.

02

Rootless by default

Prefer rootless mode with a dedicated service account and cgroup v2 quotas.

03

Lock down the API

Keep the API on 127.0.0.1 unless remote access is required; use CARDINAL_TOKEN and TLS for any external bind.

04

Filesystem discipline

Never mount /, /etc, /proc, /sys, credential dirs, or sibling runtime sockets into untrusted containers.

05

Use :ro

Mount configuration and certificates read-only where write access is unnecessary.

06

Set limits

memory, cpus, disk, restart budgets, and backup retention for every workload.

07

Image provenance

Maintain an explicit registry allowlist and run the cluster with CARDINAL_REGISTRY_STRICT=1.

08

Review Dockerfiles

Do not build untrusted Dockerfiles directly on a production host.

09

Enforce signatures

Use CARDINAL_REQUIRE_SIGNATURE=1 so cardinal update verifies cosign signatures.

10

Test restores

Practice backup restoration on a stopped container quarterly; rotate encryption keys on upgrades.

File transfer

How files move in and out.

The runtime deliberately ships no FTP server. For host ↔ container transfers, cardinal uses the paths that protect against the misconfigurations FTP enabled:

preferred

cardinal cp

Local copy, no network exposure, no new listening port. Ideal for one-off transfers.

cp
cardinal cp app.py web:/app/
encrypted

SSH / SFTP

Run openssh-server as the entrypoint, publish via -p 22:22, require key auth. SFTP inherits SSH's encryption.

steady state

Volumes & console

Named volumes for ongoing data exchange, or cardinal console for interactive file access over loopback.

Reporting

Found a vulnerability?

Don't publish an exploitable proof of concept before a fix exists. Open a private GitHub security advisory on the repository, or contact the maintainer via the GitHub profile in CONTRIBUTING.md. Include the affected version, reproduction steps, impact, and a minimal non-destructive PoC.

Security is a process.

cardinal runs daily govulncheck, gitleaks, and audit scans in CI, and publishes its full security model in SECURITY.md.

Read SECURITY.md