DIS-002: shell:false + cross-spawn Windows-Fix im Runner #21

Merged
dev merged 1 commit from phase-0/harden-spawn into main 2026-04-09 08:34:43 +00:00
Owner

Summary

  • shell: true aus src/agent/runner.ts entfernt → Command-Injection-Vektor geschlossen
  • cross-spawn als Dependency eingeführt → Windows claude.cmd-Problem gelöst (CVE-2024-27980)
  • src/runtime/resolve-claude.ts neu: resolveClaude() mit CLAUDE_PATH-Override, PATH-Fallback, In-Memory-Cache, klarer Error-Message
  • Encoding auf UTF-8 gesetzt (stdout/stderr)

Closes

Closes #3

Test Plan

  • grep -r "shell: true" src/ → leer
  • npm run build → grün (keine TypeScript-Fehler)
  • npm test → 5/5 Tests grün (resolve-claude.test.ts)
  • Manuelle Verifikation: cross-spawn in package.json

Breaking Changes

Nein. Internes Spawn-Verhalten geändert, keine öffentliche API betroffen.

Reviewer-Checkliste

  • Kein shell: true in src/ (grep -r "shell: true" src/ → leer)
  • Kein process.env direkt im Runner (noch nicht — kommt in DIS-003)
  • Kein absoluter Pfad nach außen
  • Tests decken Error-Cases ab
  • Kein console.* im Produktionscode
## Summary - `shell: true` aus `src/agent/runner.ts` entfernt → Command-Injection-Vektor geschlossen - `cross-spawn` als Dependency eingeführt → Windows `claude.cmd`-Problem gelöst (CVE-2024-27980) - `src/runtime/resolve-claude.ts` neu: `resolveClaude()` mit CLAUDE_PATH-Override, PATH-Fallback, In-Memory-Cache, klarer Error-Message - Encoding auf UTF-8 gesetzt (`stdout`/`stderr`) ## Closes Closes #3 ## Test Plan - [x] `grep -r "shell: true" src/` → leer - [x] `npm run build` → grün (keine TypeScript-Fehler) - [x] `npm test` → 5/5 Tests grün (`resolve-claude.test.ts`) - [x] Manuelle Verifikation: `cross-spawn` in `package.json` ## Breaking Changes Nein. Internes Spawn-Verhalten geändert, keine öffentliche API betroffen. ## Reviewer-Checkliste - [x] Kein `shell: true` in `src/` (`grep -r "shell: true" src/` → leer) - [ ] Kein `process.env` direkt im Runner (noch nicht — kommt in DIS-003) - [x] Kein absoluter Pfad nach außen - [x] Tests decken Error-Cases ab - [x] Kein `console.*` im Produktionscode
dev added the
phase:2
type:fix
security
priority:p0
labels 2026-04-09 08:30:44 +00:00
dev added 1 commit 2026-04-09 08:30:45 +00:00
- Remove shell:true from runner.ts (command injection vector closed)
- Import cross-spawn instead of child_process.spawn; add windowsHide:true
- Add src/runtime/resolve-claude.ts: CLAUDE_PATH env override, where/which
  PATH fallback, in-memory cache, clear error message on not-found
- Add tests/unit/resolve-claude.test.ts: 5 Vitest tests covering env override,
  PATH fallback, multi-line output trimming, error case, and cache behaviour
- Add cross-spawn + @types/cross-spawn to package.json; add vitest + test script
dev merged commit b20f1fa769 into main 2026-04-09 08:34:43 +00:00
dev deleted branch phase-0/harden-spawn 2026-04-09 08:35:02 +00:00
Sign in to join this conversation.
No description provided.