Skip to content

Commit ff9acae

Browse files
authored
Auto-set subprocess env scrub when allowed_non_write_users is configured (#1093)
* Auto-set CLAUDE_CODE_SUBPROCESS_ENV_SCRUB when allowed_non_write_users is configured Sets the env var automatically whenever allowed_non_write_users is non-empty, so downstream workflows don't need to add it manually. Updates the input description and docs/security.md to note the behavior. :house: Remote-Dev: homespace * Fall back to inherited env when allowed_non_write_users is unset :house: Remote-Dev: homespace * Let workflow/job env override the auto-set scrub flag Env var takes priority so users can opt in/out via CLAUDE_CODE_SUBPROCESS_ENV_SCRUB at job or workflow level independently of allowed_non_write_users. :house: Remote-Dev: homespace
1 parent 6062f37 commit ff9acae

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

action.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,16 @@ inputs:
3232
required: false
3333
default: ""
3434
allowed_non_write_users:
35-
description: "Comma-separated list of usernames to allow without write permissions, or '*' to allow all users. Only works when github_token input is provided. WARNING: Use with extreme caution - this bypasses security checks and should only be used for workflows with very limited permissions (e.g., issue labeling)."
35+
description: |
36+
Comma-separated list of usernames to allow without write permissions, or '*' to allow all users.
37+
Only works when github_token input is provided. WARNING: Use with extreme caution - this
38+
bypasses security checks and should only be used for workflows with very limited permissions
39+
(e.g., issue labeling).
40+
41+
SECURITY: Processing untrusted content exposes the workflow to prompt injection. When this
42+
input is set, Claude does a best-effort scrub of Anthropic, cloud, and GitHub Actions secrets
43+
from subprocess environments. This reduces but does not eliminate prompt injection risk -
44+
only use for workflows with very limited permissions and validate all outputs.
3645
required: false
3746
default: ""
3847
include_comments_by_actor:
@@ -204,6 +213,7 @@ runs:
204213
OVERRIDE_GITHUB_TOKEN: ${{ inputs.github_token }}
205214
ALLOWED_BOTS: ${{ inputs.allowed_bots }}
206215
ALLOWED_NON_WRITE_USERS: ${{ inputs.allowed_non_write_users }}
216+
CLAUDE_CODE_SUBPROCESS_ENV_SCRUB: ${{ env.CLAUDE_CODE_SUBPROCESS_ENV_SCRUB || (inputs.allowed_non_write_users != '' && '1') || '' }}
207217
INCLUDE_COMMENTS_BY_ACTOR: ${{ inputs.include_comments_by_actor }}
208218
EXCLUDE_COMMENTS_BY_ACTOR: ${{ inputs.exclude_comments_by_actor }}
209219
GITHUB_RUN_ID: ${{ github.run_id }}

docs/security.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
- Accepts either a comma-separated list of specific usernames or `*` to allow all users
1414
- **Should be used with extreme caution** as it bypasses the primary security mechanism of this action
1515
- Is designed for automation workflows where user permissions are already restricted by the workflow's permission scope
16+
- When set, Claude does a best-effort scrub of Anthropic, cloud, and GitHub Actions secrets from subprocess environments. This reduces but does not eliminate prompt injection risk — keep workflow permissions minimal and validate all outputs. Set `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB: 0` in your workflow or job `env:` block to opt out.
1617
- **Token Permissions**: The GitHub app receives only a short-lived token scoped specifically to the repository it's operating in
1718
- **No Cross-Repository Access**: Each action invocation is limited to the repository where it was triggered
1819
- **Limited Scope**: The token cannot access other repositories or perform actions beyond the configured permissions

0 commit comments

Comments
 (0)