Sandbox-Runner mit bubblewrap (#654) - noch ungeprueft unter Linux

Jede Codeausfuehrung ausserhalb des Hauptprozesses: eigene Namensraeume
(Mount, PID, Netz nur loopback, User ohne verschachtelte), nur der
Arbeitsbereich unter /work beschreibbar, scripts/ darin schreibgeschuetzt,
keine Umgebung und keine Deskriptoren des Hauptprozesses, alle Capabilities
weg, no_new_privs, seccomp-Sperrliste (eigene BPF, x86_64 und arm64),
Grenzen fuer Zeit, Speicher, Prozesse, Dateigroesse und Ausgabe. Unter
Windows oder ohne bwrap: keine Ausfuehrung, mit Grund im Protokoll.

Erster Nutzer: ffmpeg im SocialMediaManager (fremde Mediendateien). yt-dlp
braucht Netz und folgt mit dem Egress-Proxy (#655).

Die Ausbruchstests (SandboxEscapeTests) laufen nur unter Linux mit bwrap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-09-25 18:40:42 +02:00
co-authored by Claude Opus 5.5
parent 8c5eca18f5
commit 257ba87cf5
9 changed files with 1096 additions and 4 deletions
+9
View File
@@ -589,6 +589,15 @@ public sealed class AppHost : IAsyncDisposable
SpecialBudgets = specialBudgets
};
// #654: Code runs only in the sandbox. Found once at start; without it, nothing that
// needs it runs — and the log says why.
var sandbox = Core.Sandbox.BwrapSandbox.Detect(loggerFactory.CreateLogger("ClawdDotNet.Core.Sandbox"));
if (!sandbox.IsAvailable)
logger.LogWarning("No sandbox: {Reason}", sandbox.UnavailableReason);
engine.Sandbox = sandbox;
foreach (var user in tools.GetAll().OfType<Core.Sandbox.ISandboxUser>())
user.Sandbox = sandbox;
engine.SetAgentConfigProvider(
() => instance.Agents,
instance.InstanceId,