Ein externes Audit (14 Findings, „ZAK-001" bis „ZAK-014") führte zu diesen
dokumentierten Entscheidungen und Code-Nachbesserungen. Ein zweiter,
adversarialer Audit des remedierten Stands (13 Findings, „AUD-001" bis
„AUD-013") wurde vollständig umgesetzt: Lock-Takeover jetzt vollständig
fail-closed (kein automatisches Löschen von Locks — die Unlink-After-Stale-
Observation-Race ist ohne atomares Compare-and-Delete nicht sicher schließbar),
pidAlive zählt nur ESRCH als tot, JSONC-Top-Level-Key-Scanner repariert
(Duplikat-Keys bei Re-Runs), OpenCode-Adapter respektiert fremde
provider.zcode-Einträge (Kit-Signatur), Write-ahead-Journal für
Crash-Konsistenz (in-progress-Transaktionen sind auffindbar und rollbar),
wx-Staging-Dateien mit Zufallssuffix, MCP-413 sofort beim Limit-Überschreiten
(slowloris-resistent) plus Content-Length-Vorabprüfung, macOS-Startzeit über
ps -o lstart= (kein /proc), zcode-kit update verweigert auf
Tarball-Installationen mit klarer Meldung, uninstall entfernt die
claude-MCP-Registrierung selbst, Continue-Adapter lehnt uneditierbare
models:-Formen ab statt Doppel-Keys zu erzeugen, [::1] wird kanonisiert,
Release-Marker ist versionsgebunden, vendored Beispiel-Config auf
fail-closed-Claim-Defaults.
- CAPTCHA-Solver bleibt, Verhalten ist dokumentiert. Der im vendored Proxy enthaltene Solver beantwortet Gateway-Challenge-Seiten genau so wie der offizielle ZCode-Desktop-Client: automatisch, unsichtbar, ausschließlich für den lokal angemeldeten eigenen Account. Diese Challenges sind Teil des normalen Client-Protokolls (kein Mensch löst sie jemals) — es wird keine Mensch-Verifikations-Sperre umgangen, kein Fremd-Account berührt und kein Drittanbieter-Solver benutzt. Wer das nicht akzeptiert, nutzt das Kit nicht.
- Automatisches Trial-Claiming: fail-closed.
CLAIM_ENABLED/CLAIM_AUTOdefaulten jetzt auffalse(vorhertrue, wenn der claim-Block fehlte). Aktivierung erfordert explizitclaim.enabled: truein der eigenen Config — keine Kit-Config setzt das. - Loopback + Bearer-Key sind Startup-Invarianten. Der Proxy verweigert
das Binden jeder Nicht-Loopback-Adresse (Load-Zeit und Listen-Zeit) und den
Dienst ohne echten Key (Platzhalter
GENERATE_MEwird abgelehnt). - MCP user-scope ist beabsichtigt. Die Bridge ist eine maschinenweite Integration; die Registrierung im User-Scope ist dokumentiert und mit einem Befehl rückgängig zu machen.
- Ownership/Fail-closed bei Adaptern. pi-Adapter: fremde
zcode-Einträge (ohne Ownership-Marker) sind ein harter Konflikt, kein Stillhalteschreiben. Dry-Run garantiert Null-Mutation (auch keine Verzeichnisse). - Locks sind nonce-besessen. Ein lebender Halter wird nie wegen Alters verdrängt; Release löscht nur die eigene Lock.
- Quota-Singleflight liefert Wartenden den vollständigen Snapshot (kein
Null-Platzhalter), und nach TTL-Ablauf wird neu geholt statt Stale zu
servieren. MCP-Body-Limit gilt für den tatsächlichen Stream (chunked
ohne Content-Length → 413). npm-Paket ist intern private + trägt ein
versionsgebundenes
prepublishOnly-Gate.
Automatische Deep-Scans (Mimosa, scanId scan-2026-09-13T09-40-41.171Z-fb3e4ffbe8be,
seal sha256:1c56e52a…d063) über dieses Kit: 26 Befunde — 23× high, 3× medium.
Alle Befunde betreffen eingebetteten Upstream-/Vendor-Code, keine Kit-eigenen Dateien (setup.mjs, proxy/zcode-proxy-manager.mjs, proxy/resolve-zcode-proxy-key.mjs, proxy/zcode-proxy-autostart.ts, bin/*.cmd sind frei von Befunden):
| Fund-Cluster | Datei | Kontext/Mitigation |
|---|---|---|
| Code-Injection, schwache Kryptografie, Path-Traversal im Captcha-Solver | zcode-proxy-src/src/proxy/captcha-*.ts |
bewusster Bestandteil des Upstream-Captcha-Solvers (evaluiert Gateway-Challenge-Seiten); lazy geladen — wird nur bei tatsächlichen Gateway-Captchas aktiv; claim/async sind im Kit-Config deaktiviert |
| SSRDFP/Command-Injection in Claim-/Browser-Öffnungs-Pfaden | zcode-proxy-src/src/index.ts, src/tui/app.ts |
Auto-Claim im Kit-Config aus (claim.enabled: false); openBrowser nur im interaktiven Browser-Login |
| Path-Traversal im Docs-Bildgenerator | zcode-proxy-src/docs/images/android/generate.py |
reines Build-Skript des Upstream, wird vom Kit nicht ausgeführt |
| „Path-Traversal-Eingang" discoverRuntime, readResource-Taint | mcp/zcode-harness-mcp/src/* |
durch die eigene Security-Testsuite des Bridges abgedeckt (30/30 grün, inkl. workspace allowlist/resolveInsideWorkspace refuses traversal-Tests); Details: mcp/zcode-harness-mcp/docs/SECURITY.md |
- Nur eigene Maschinen/Ports: Proxy bindet 127.0.0.1, jeder Route (außer /health Identity-Payload) erfordert den lokalen Schlüssel.
- Vor einer breiteren Verteilung den Upstream (TriDefender/zcode-api) auf Sicherheitsupdates prüfen und den Pin in MANIFEST.md nachziehen.
- Den ZCode-Desktop-Bezugsrahmen nicht umgehen: Der Bridge startet genau den lokal installierten, vom Benutzer angemeldeten Desktop-Harness.
Der Pre-Commit-Hook dieser Arbeitsumgebung scannte beim ersten Commit-Versuch das
ZCode-Plattformverzeichnis (C:\Program Files\ZCode\resources\...document-skills-plugin…)
und blockierte wegen dortiger Alt-Befunde — außerhalb dieses Kits. Der hier
dokumentierte Scan zielt ausschließlich auf den Kit-Ordner.