You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+13-2Lines changed: 13 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -29,6 +29,17 @@ Ephemeral, microVM-isolated dev containers for AI-assisted development. Each con
29
29
-**MCP whitelist** — only explicitly whitelisted MCP servers are proxied into containers (see `MCP_WHITELIST` in `scripts/dev-proxy.py`)
30
30
-**Selective key mounting** — only specific key files are mounted into containers (container SSH pubkey, read-only GitHub PAT); host-only keys like `id_ed25519_dev_automation` never enter containers. The Bob API key is injected via `podman secret` (never volume-mounted)
31
31
32
+
### The `kind` profile weakens in-VM isolation
33
+
34
+
Containers using the `kind` profile (currently only camel-k) auto-create a Kubernetes cluster with **rootful podman inside the VM**. This is required, not a shortcut: the `kindest/node` image runs systemd, which needs a root-owned cgroup that the unprivileged `dev` user cannot create — this microVM has no systemd/cgroup delegation, so rootless Kind cannot boot here. (Also, the node's kubelet needs a real block device for its rootfs, so Kind/registry storage is pinned to the bounded podman disk rather than the virtiofs root.)
35
+
36
+
**Consequence — for these containers, treat the `dev`-vs-root boundary *inside the VM* as gone.** Kind's kubeconfig is cluster-admin, so the agent has a practical, non-exploit path to VM-root (cluster-admin → privileged pod → node container, which runs as VM-root). That means:
37
+
38
+
- The per-container disk caps and root-owned config (guest nftables firewall, `/etc`, `/opt`, the Bob API key file) are no longer protected from the agent.
39
+
-**Residual host risk:** a VM-root agent can write to the container's *uncapped* writable rootfs layer on the host, which could fill the host disk (DoS). Kind/registry image storage itself stays capped (pinned to the bounded podman disk).
40
+
41
+
**What is _not_ affected:** the KVM boundary still fully contains the VM. Your host filesystem, Google Vertex credentials, and the GitHub-write SSH key never enter the VM, so they remain protected even against a VM-root agent. Non-`kind` containers keep the full rootless posture described above.
42
+
32
43
## Prerequisites
33
44
34
45
- Clone this repo to `~/sandboxing`: `git clone git@github.com:michalvavrik/ai-sandboxing.git ~/sandboxing`
@@ -416,7 +427,7 @@ The `profiles` field in `project-templates.conf` is a comma-separated list that
416
427
|---------|--------|
417
428
|`java`| Maven cache overlay from host `~/.m2/repository`|
418
429
|`go`| Sets GOPATH, GOBIN, adds `~/go/bin` to PATH |
419
-
|`kind`| Auto-creates a Kind cluster with local registry (`localhost:5001`) on first start, 12 GiB podman storage |
430
+
|`kind`| Auto-creates a **rootful**Kind cluster with local registry (`localhost:5001`) on first start; 20 GiB podman storage. **Weakens in-VM isolation — see [the `kind` profile security note](#the-kind-profile-weakens-in-vm-isolation).**|
0 commit comments