44 lines
1.6 KiB
Markdown
44 lines
1.6 KiB
Markdown
---
|
|
id: DIS-003
|
|
status: ready
|
|
phase: 0
|
|
priority: p0
|
|
labels: [phase:0, type:fix, priority:p0, security]
|
|
branch: phase-0/sanitize-env
|
|
assignee: null
|
|
started: null
|
|
pr: null
|
|
merged: null
|
|
---
|
|
|
|
# DIS-003: `sanitizedEnv()` — Secrets aus Child-Env entfernen
|
|
|
|
## Ziel
|
|
Kein Secret (`DISCORD_BOT_TOKEN` etc.) darf im Environment des `claude`-Kindprozesses landen.
|
|
Ein Agent kann heute per `echo $DISCORD_BOT_TOKEN` den Bot-Token exfiltrieren.
|
|
|
|
## Kontext
|
|
`src/agent/runner.ts` vererbt aktuell `process.env` vollständig.
|
|
→ `docs/development-plan.md` §2.6, `docs/ai-engineer-analyse.md` §4.
|
|
|
|
## Scope
|
|
- **In**: `src/runtime/env.ts`: `sanitizedEnv(extra?)` entfernt `DISCORD_BOT_TOKEN`, `DISCORD_CLIENT_SECRET`, Pattern `/^(SECRET_|TOKEN_|API_KEY_?)/i`, setzt `CI=true`, `DISCLAW_AGENT=1`, `DISCLAW_AGENT_NAME=<name>` · optionale `env_blocklist` via `disclaw.yaml` · `runner.ts` nutzt `sanitizedEnv` statt `process.env`
|
|
- **Out**: Whitelist-statt-Blacklist-Modus
|
|
|
|
## Definition of Done
|
|
- [ ] `sanitizedEnv()` ist pur, keine Seiteneffekte
|
|
- [ ] Unit-Test `tests/unit/sanitize-env.test.ts` deckt: Token entfernt, Pattern-Match, PATH/HOME bleiben, Extras überschreiben, `env_blocklist` wird angewendet
|
|
- [ ] Runner nutzt `sanitizedEnv` an allen Spawn-Stellen
|
|
- [ ] `npm run build && npm test` grün
|
|
|
|
## Dateien (erwartet)
|
|
- `src/runtime/env.ts`
|
|
- `src/agent/runner.ts`
|
|
- `src/config/loader.ts`
|
|
- `tests/unit/sanitize-env.test.ts`
|
|
|
|
## Abhängigkeiten
|
|
Keine. Kann parallel zu DIS-002 laufen (beide editieren `runner.ts` — bei Merge-Konflikt rebased DIS-003 auf DIS-002).
|
|
|
|
## Spec
|
|
→ `docs/backlog.md` #DIS-003
|