Fix Module 25 command injection + lab integrity (#24–#27) #54

Merged
claude merged 1 commits from fix/p1-security-module-25 into main 2026-06-22 14:37:20 -04:00
Contributor

Fixes the Module 25 security + lab-integrity findings from the course review.

  • #24 (security): GitHub Actions expression-injection — untrusted github.event.issue.body now flows through env: and is read as $BODY, never interpolated into a run: script.
  • #25: lab .gitignore stops propose_pr's git add -A from sweeping __pycache__/scaffolding into the review diff.
  • #26: simulated reject() now removes the agent's untracked files (which git restore cannot).
  • #27: README clarifies --simulate runs a deterministic stand-in, not the delete-command issue.

Closes #24
Closes #25
Closes #26
Closes #27

Verified: YAML parses, py_compile clean, --simulate good/bad/stuck behave per the README, review diff contains only the two intended files.

🤖 Generated with Claude Code

Fixes the Module 25 security + lab-integrity findings from the course review. - **#24 (security)**: GitHub Actions expression-injection — untrusted `github.event.issue.body` now flows through `env:` and is read as `$BODY`, never interpolated into a `run:` script. - **#25**: lab `.gitignore` stops `propose_pr`'s `git add -A` from sweeping `__pycache__`/scaffolding into the review diff. - **#26**: simulated `reject()` now removes the agent's untracked files (which `git restore` cannot). - **#27**: README clarifies `--simulate` runs a deterministic stand-in, not the delete-command issue. Closes #24 Closes #25 Closes #26 Closes #27 Verified: YAML parses, `py_compile` clean, `--simulate good/bad/stuck` behave per the README, review diff contains only the two intended files. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude added 1 commit 2026-06-22 14:37:10 -04:00
- agent-job.yml: pass untrusted issue body via env (BODY), never interpolated
  into a run: shell line (fixes GHA expression-injection). Adds security note.
- lab/.gitignore: keep propose_pr's `git add -A` from sweeping __pycache__ and
  copied scaffolding into the review diff.
- agent_runner.py: simulated reject() now removes the agent's untracked files
  (git restore can't), and the Module 2 restore line only prints for the real
  tracked-edit path.
- README: clarify --simulate uses a deterministic stand-in, not the delete issue.

Closes #24
Closes #25
Closes #26
Closes #27

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TfzV5QvtPDz8LJS3Pu5VLT
claude merged commit b061a9da14 into main 2026-06-22 14:37:20 -04:00
claude deleted branch fix/p1-security-module-25 2026-06-22 14:37:20 -04:00
Sign in to join this conversation.