Restore .claude/ and .mcp.json from PR base branch before CLI runs#1066
Restore .claude/ and .mcp.json from PR base branch before CLI runs#1066km-anthropic merged 3 commits intomainfrom
Conversation
The CLI's non-interactive mode trusts cwd: it reads .mcp.json and
.claude/settings{,.local}.json from the working directory and acts on
them before any tool-permission gating — executing hooks, setting env
vars (NODE_OPTIONS, LD_PRELOAD), running apiKeyHelper shell commands,
and auto-approving MCP servers. When this action checks out a PR head,
these files are attacker-controlled.
Rather than enumerate dangerous keys, replace the entire .claude/ tree
and .mcp.json with the versions from the PR base branch (which a
maintainer has reviewed). Paths absent on base are deleted. Uses local
git state, so no TOCTOU against the GitHub API.
Agent mode's branchInfo.baseBranch defaults to "main" (or env/input override) instead of the PR's actual target branch — it doesn't query prData.baseRefName like tag mode does. This meant a PR targeting develop would get .claude/ restored from main. Fix by reading pull_request.base.ref directly from the webhook payload for pull_request, pull_request_review, and pull_request_review_comment events. For issue_comment on a PR (no base.ref in payload), fall back to the mode-provided value — tag mode's value is correct (from GraphQL); agent mode on issue_comment is an edge case that at worst restores from the wrong trusted branch, which is still secure. The payload value passes through validateBranchName for defense-in-depth (GitHub enforces valid branch names server-side, but we validate anyway).
.gitmodules defines submodule URLs and paths; path-confusion attacks against git submodule operations can write into .git/hooks. .ripgreprc can set --pre (arbitrary command on each file) if RIPGREP_CONFIG_PATH points at it. .claude.json is cheap defense-in-depth. Documented why .git/ is excluded (not trackable in commits, and restoring it would undo the PR checkout), along with .gitconfig (git never reads it from cwd) and shell rc files (sourced from $HOME, not cwd — checkout cannot reach $HOME).
| if (isEntityContext(context) && context.isPR) { | ||
| let restoreBase = baseBranch; | ||
| if ( | ||
| isPullRequestEvent(context) || | ||
| isPullRequestReviewEvent(context) || | ||
| isPullRequestReviewCommentEvent(context) | ||
| ) { | ||
| restoreBase = context.payload.pull_request.base.ref; | ||
| validateBranchName(restoreBase); | ||
| } | ||
| if (restoreBase) { | ||
| restoreConfigFromBase(restoreBase); | ||
| } | ||
| } |
There was a problem hiding this comment.
🟡 restoreConfigFromBase requires its parameter to be pre-validated (per its docstring), and validateBranchName() is called on the pull_request event path (line 245) but not on the issue_comment fallback path where restoreBase = baseBranch from agent mode. Adding validateBranchName(restoreBase) before line 248 would close this defense-in-depth gap, though practical risk is near-zero since the fallback value comes from admin-controlled sources.
Extended reasoning...
The Bug
When the event is issue_comment on a PR, the code at lines 237-250 takes the fallback path where restoreBase is set to baseBranch (from the mode prepare function) rather than reading context.payload.pull_request.base.ref. In agent mode, this baseBranch value comes from process.env.BASE_BRANCH || context.inputs.baseBranch || "main" (agent/index.ts:88-89) and is never passed through validateBranchName().
The Inconsistency
The restoreConfigFromBase docstring at restore-config.ts:25-26 explicitly states: "Must be pre-validated (branch.ts calls validateBranchName on it before returning)." The PR event path correctly calls validateBranchName(restoreBase) at line 245, but the issue_comment fallback skips this validation entirely. For tag mode this is fine because setupBranch validates baseBranch at branch.ts:176, but agent mode does not validate its baseBranch anywhere in its pipeline.
Step-by-Step Proof
- An
issue_commentevent fires on a PR in a repo using agent mode. prepareAgentModeruns and computesbaseBranch = process.env.BASE_BRANCH || context.inputs.baseBranch || "main"(agent/index.ts:88-89).- At run.ts:237,
isEntityContext(context) && context.isPRis true, so we enter the block. - At line 238,
restoreBase = baseBranch(the unvalidated value from agent mode). - The
isPullRequestEvent/isPullRequestReviewEvent/isPullRequestReviewCommentEventchecks all fail (this is anissue_commentevent), so the inner block withvalidateBranchNameat line 245 is skipped. - At line 248,
restoreConfigFromBase(restoreBase)is called with the unvalidatedbaseBranch.
Practical Impact
The practical risk is effectively zero. The BASE_BRANCH env var is set in the workflow YAML (which runs from the default branch, not the PR branch), context.inputs.baseBranch resolves to the same process.env.BASE_BRANCH (context.ts:150), and the hardcoded default is "main". None of these are attacker-controlled. Additionally, execFileSync with array args prevents shell injection. However, validateBranchName also blocks leading dashes (preventing git option injection like --upload-pack=...), so including it would be a worthwhile defense-in-depth measure.
Suggested Fix
Add validateBranchName(restoreBase) before the restoreConfigFromBase(restoreBase) call at line 248, or move the validation outside the event-type if block so it applies to all paths uniformly:
if (restoreBase) {
validateBranchName(restoreBase);
restoreConfigFromBase(restoreBase);
}…updates [skip ci] Bumps the github-actions group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/cache](https://github.com/actions/cache) | `5.0.3` | `5.0.4` | | [graalvm/setup-graalvm](https://github.com/graalvm/setup-graalvm) | `1.4.5` | `1.5.0` | | [softprops/action-gh-release](https://github.com/softprops/action-gh-release) | `2.5.0` | `2.6.1` | | [github/codeql-action](https://github.com/github/codeql-action) | `4.32.5` | `4.33.0` | | [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action) | `1.0.69` | `1.0.75` | | [ruby/setup-ruby](https://github.com/ruby/setup-ruby) | `1.289.0` | `1.295.0` | | [webfactory/ssh-agent](https://github.com/webfactory/ssh-agent) | `0.9.1` | `0.10.0` | Updates `actions/cache` from 5.0.3 to 5.0.4 Release notes *Sourced from [actions/cache's releases](https://github.com/actions/cache/releases).* > v5.0.4 > ------ > > What's Changed > -------------- > > * Add release instructions and update maintainer docs by [`@Link`](https://github.com/Link)- in [actions/cache#1696](https://github.com/actions/cache/pull/1696) > * Potential fix for code scanning alert no. 52: Workflow does not contain permissions by [`@Link`](https://github.com/Link)- in [actions/cache#1697](https://github.com/actions/cache/pull/1697) > * Fix workflow permissions and cleanup workflow names / formatting by [`@Link`](https://github.com/Link)- in [actions/cache#1699](https://github.com/actions/cache/pull/1699) > * docs: Update examples to use the latest version by [`@XZTDean`](https://github.com/XZTDean) in [actions/cache#1690](https://github.com/actions/cache/pull/1690) > * Fix proxy integration tests by [`@Link`](https://github.com/Link)- in [actions/cache#1701](https://github.com/actions/cache/pull/1701) > * Fix cache key in examples.md for bun.lock by [`@RyPeck`](https://github.com/RyPeck) in [actions/cache#1722](https://github.com/actions/cache/pull/1722) > * Update dependencies & patch security vulnerabilities by [`@Link`](https://github.com/Link)- in [actions/cache#1738](https://github.com/actions/cache/pull/1738) > > New Contributors > ---------------- > > * [`@XZTDean`](https://github.com/XZTDean) made their first contribution in [actions/cache#1690](https://github.com/actions/cache/pull/1690) > * [`@RyPeck`](https://github.com/RyPeck) made their first contribution in [actions/cache#1722](https://github.com/actions/cache/pull/1722) > > **Full Changelog**: <actions/cache@v5...v5.0.4> Changelog *Sourced from [actions/cache's changelog](https://github.com/actions/cache/blob/main/RELEASES.md).* > Releases > ======== > > How to prepare a release > ------------------------ > > > [!NOTE] > > Relevant for maintainers with write access only. > > 1. Switch to a new branch from `main`. > 2. Run `npm test` to ensure all tests are passing. > 3. Update the version in [`https://github.com/actions/cache/blob/main/package.json`](https://github.com/actions/cache/blob/main/package.json). > 4. Run `npm run build` to update the compiled files. > 5. Update this [`https://github.com/actions/cache/blob/main/RELEASES.md`](https://github.com/actions/cache/blob/main/RELEASES.md) with the new version and changes in the `## Changelog` section. > 6. Run `licensed cache` to update the license report. > 7. Run `licensed status` and resolve any warnings by updating the [`https://github.com/actions/cache/blob/main/.licensed.yml`](https://github.com/actions/cache/blob/main/.licensed.yml) file with the exceptions. > 8. Commit your changes and push your branch upstream. > 9. Open a pull request against `main` and get it reviewed and merged. > 10. Draft a new release <https://github.com/actions/cache/releases> use the same version number used in `package.json` > 1. Create a new tag with the version number. > 2. Auto generate release notes and update them to match the changes you made in `RELEASES.md`. > 3. Toggle the set as the latest release option. > 4. Publish the release. > 11. Navigate to <https://github.com/actions/cache/actions/workflows/release-new-action-version.yml> > 1. There should be a workflow run queued with the same version number. > 2. Approve the run to publish the new version and update the major tags for this action. > > Changelog > --------- > > ### 5.0.4 > > * Bump `minimatch` to v3.1.5 (fixes ReDoS via globstar patterns) > * Bump `undici` to v6.24.1 (WebSocket decompression bomb protection, header validation fixes) > * Bump `fast-xml-parser` to v5.5.6 > > ### 5.0.3 > > * Bump `@actions/cache` to v5.0.5 (Resolves: <https://github.com/actions/cache/security/dependabot/33>) > * Bump `@actions/core` to v2.0.3 > > ### 5.0.2 > > * Bump `@actions/cache` to v5.0.3 [#1692](https://github.com/actions/cache/pull/1692) > > ### 5.0.1 > > * Update `@azure/storage-blob` to `^12.29.1` via `@actions/cache@5.0.1` [#1685](https://github.com/actions/cache/pull/1685) > > ### 5.0.0 > > > [!IMPORTANT] > > `actions/cache@v5` runs on the Node.js 24 runtime and requires a minimum Actions Runner version of `2.327.1`. ... (truncated) Commits * [`6682284`](actions/cache@6682284) Merge pull request [#1738](https://github.com/actions/cache/issues/1738) from actions/prepare-v5.0.4 * [`e340396`](actions/cache@e340396) Update RELEASES * [`8a67110`](actions/cache@8a67110) Add licenses * [`1865903`](actions/cache@1865903) Update dependencies & patch security vulnerabilities * [`5656298`](actions/cache@5656298) Merge pull request [#1722](https://github.com/actions/cache/issues/1722) from RyPeck/patch-1 * [`4e380d1`](actions/cache@4e380d1) Fix cache key in examples.md for bun.lock * [`b7e8d49`](actions/cache@b7e8d49) Merge pull request [#1701](https://github.com/actions/cache/issues/1701) from actions/Link-/fix-proxy-integration-tests * [`984a21b`](actions/cache@984a21b) Add traffic sanity check step * [`acf2f1f`](actions/cache@acf2f1f) Fix resolution * [`95a07c5`](actions/cache@95a07c5) Add wait for proxy * Additional commits viewable in [compare view](actions/cache@cdf6c1f...6682284) Updates `graalvm/setup-graalvm` from 1.4.5 to 1.5.0 Release notes *Sourced from [graalvm/setup-graalvm's releases](https://github.com/graalvm/setup-graalvm/releases).* > v1.5.0 > ------ > > What's Changed > -------------- > > * Bump lodash from 4.17.21 to 4.17.23 by [`@dependabot`](https://github.com/dependabot)[bot] in [graalvm/setup-graalvm#205](https://github.com/graalvm/setup-graalvm/pull/205) > * Bump the "all" group with 2 updates across multiple ecosystems by [`@dependabot`](https://github.com/dependabot)[bot] in [graalvm/setup-graalvm#206](https://github.com/graalvm/setup-graalvm/pull/206) > * Bump the "all" group with 1 updates across multiple ecosystems by [`@dependabot`](https://github.com/dependabot)[bot] in [graalvm/setup-graalvm#207](https://github.com/graalvm/setup-graalvm/pull/207) > * Upgrade to Node 24by [`@fniephaus`](https://github.com/fniephaus) in [graalvm/setup-graalvm#209](https://github.com/graalvm/setup-graalvm/pull/209) > > **Full Changelog**: <graalvm/setup-graalvm@v1.4.5...v1.5.0> Commits * [`f744c72`](graalvm/setup-graalvm@f744c72) Bump version to `1.5.0`. * [`138cef5`](graalvm/setup-graalvm@138cef5) Fix Windows minimatch support in bundled action. * [`f0c91e2`](graalvm/setup-graalvm@f0c91e2) Bump dependencies. * [`5fbabde`](graalvm/setup-graalvm@5fbabde) Fork `RetryHelper` from tool-cache. * [`7777231`](graalvm/setup-graalvm@7777231) Run `npm audit fix`. * [`9be1e9e`](graalvm/setup-graalvm@9be1e9e) Drop minimatch override. * [`dd308a9`](graalvm/setup-graalvm@dd308a9) Upgrade to node 24 * [`91b8c57`](graalvm/setup-graalvm@91b8c57) Bump the all group with 11 updates * [`9d0e2df`](graalvm/setup-graalvm@9d0e2df) Update dist files. * [`7045e8f`](graalvm/setup-graalvm@7045e8f) Fix import. * Additional commits viewable in [compare view](graalvm/setup-graalvm@54b4f5a...f744c72) Updates `softprops/action-gh-release` from 2.5.0 to 2.6.1 Release notes *Sourced from [softprops/action-gh-release's releases](https://github.com/softprops/action-gh-release/releases).* > v2.6.1 > ------ > > `2.6.1` is a patch release focused on restoring linked discussion thread creation when > `discussion_category_name` is set. It fixes `[#764](https://github.com/softprops/action-gh-release/issues/764)`, where the draft-first publish flow > stopped carrying the discussion category through the final publish step. > > If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible. > > What's Changed > -------------- > > ### Bug fixes 🐛 > > * fix: preserve discussion category on publish by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#765](https://github.com/softprops/action-gh-release/pull/765) > > v2.6.0 > ------ > > `2.6.0` is a minor release centered on `previous_tag` support for `generate_release_notes`, > which lets workflows pin GitHub's comparison base explicitly instead of relying on the default range. > It also includes the recent concurrent asset upload recovery fix, a `working_directory` docs sync, > a checked-bundle freshness guard for maintainers, and clearer immutable-prerelease guidance where > GitHub platform behavior imposes constraints on how prerelease asset uploads can be published. > > If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible. > > What's Changed > -------------- > > ### Exciting New Features 🎉 > > * feat: support previous\_tag for generate\_release\_notes by [`@pocesar`](https://github.com/pocesar) in [softprops/action-gh-release#372](https://github.com/softprops/action-gh-release/pull/372) > > ### Bug fixes 🐛 > > * fix: recover concurrent asset metadata 404s by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#760](https://github.com/softprops/action-gh-release/pull/760) > > ### Other Changes 🔄 > > * docs: clarify reused draft release behavior by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#759](https://github.com/softprops/action-gh-release/pull/759) > * docs: clarify working\_directory input by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#761](https://github.com/softprops/action-gh-release/pull/761) > * ci: verify dist bundle freshness by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#762](https://github.com/softprops/action-gh-release/pull/762) > * fix: clarify immutable prerelease uploads by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#763](https://github.com/softprops/action-gh-release/pull/763) > > v2.5.3 > ------ > > `2.5.3` is a patch release focused on the remaining path-handling and release-selection bugs uncovered after `2.5.2`. > It fixes `[#639](https://github.com/softprops/action-gh-release/issues/639)`, `[#571](https://github.com/softprops/action-gh-release/issues/571)`, `[#280](https://github.com/softprops/action-gh-release/issues/280)`, `[#614](https://github.com/softprops/action-gh-release/issues/614)`, `[#311](https://github.com/softprops/action-gh-release/issues/311)`, `[#403](https://github.com/softprops/action-gh-release/issues/403)`, and `[#368](https://github.com/softprops/action-gh-release/issues/368)`. > It also adds documentation clarifications for `[#541](https://github.com/softprops/action-gh-release/issues/541)`, `[#645](https://github.com/softprops/action-gh-release/issues/645)`, `[#542](https://github.com/softprops/action-gh-release/issues/542)`, `[#393](https://github.com/softprops/action-gh-release/issues/393)`, and `[#411](https://github.com/softprops/action-gh-release/issues/411)`, > where the current behavior is either usage-sensitive or constrained by GitHub platform limits rather than an action-side runtime bug. > > If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible. > > What's Changed > -------------- ... (truncated) Changelog *Sourced from [softprops/action-gh-release's changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md).* > 2.6.1 > ----- > > `2.6.1` is a patch release focused on restoring linked discussion thread creation when > `discussion_category_name` is set. It fixes `[#764](https://github.com/softprops/action-gh-release/issues/764)`, where the draft-first publish flow > stopped carrying the discussion category through the final publish step. > > If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible. > > What's Changed > -------------- > > ### Bug fixes 🐛 > > * fix: preserve discussion category on publish by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#765](https://github.com/softprops/action-gh-release/pull/765) > > 2.6.0 > ----- > > `2.6.0` is a minor release centered on `previous_tag` support for `generate_release_notes`, > which lets workflows pin GitHub's comparison base explicitly instead of relying on the default range. > It also includes the recent concurrent asset upload recovery fix, a `working_directory` docs sync, > a checked-bundle freshness guard for maintainers, and clearer immutable-prerelease guidance where > GitHub platform behavior imposes constraints on how prerelease asset uploads can be published. > > If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible. > > What's Changed > -------------- > > ### Exciting New Features 🎉 > > * feat: support previous\_tag for generate\_release\_notes by [`@pocesar`](https://github.com/pocesar) in [softprops/action-gh-release#372](https://github.com/softprops/action-gh-release/pull/372) > > ### Bug fixes 🐛 > > * fix: recover concurrent asset metadata 404s by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#760](https://github.com/softprops/action-gh-release/pull/760) > > ### Other Changes 🔄 > > * docs: clarify reused draft release behavior by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#759](https://github.com/softprops/action-gh-release/pull/759) > * docs: clarify working\_directory input by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#761](https://github.com/softprops/action-gh-release/pull/761) > * ci: verify dist bundle freshness by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#762](https://github.com/softprops/action-gh-release/pull/762) > * fix: clarify immutable prerelease uploads by [`@chenrui333`](https://github.com/chenrui333) in [softprops/action-gh-release#763](https://github.com/softprops/action-gh-release/pull/763) > > 2.5.3 > ----- > > `2.5.3` is a patch release focused on the remaining path-handling and release-selection bugs uncovered after `2.5.2`. > It fixes `[#639](https://github.com/softprops/action-gh-release/issues/639)`, `[#571](https://github.com/softprops/action-gh-release/issues/571)`, `[#280](https://github.com/softprops/action-gh-release/issues/280)`, `[#614](https://github.com/softprops/action-gh-release/issues/614)`, `[#311](https://github.com/softprops/action-gh-release/issues/311)`, `[#403](https://github.com/softprops/action-gh-release/issues/403)`, and `[#368](https://github.com/softprops/action-gh-release/issues/368)`. > It also adds documentation clarifications for `[#541](https://github.com/softprops/action-gh-release/issues/541)`, `[#645](https://github.com/softprops/action-gh-release/issues/645)`, `[#542](https://github.com/softprops/action-gh-release/issues/542)`, `[#393](https://github.com/softprops/action-gh-release/issues/393)`, and `[#411](https://github.com/softprops/action-gh-release/issues/411)`, > where the current behavior is either usage-sensitive or constrained by GitHub platform limits rather than an action-side runtime bug. > > If you still hit an issue after upgrading, please open a report with the bug template and include a minimal repro or sanitized workflow snippet where possible. ... (truncated) Commits * [`153bb8e`](softprops/action-gh-release@153bb8e) release 2.6.1 * [`569deb8`](softprops/action-gh-release@569deb8) fix: preserve discussion category when publishing releases ([#765](https://github.com/softprops/action-gh-release/issues/765)) * [`26e8ad2`](softprops/action-gh-release@26e8ad2) release 2.6.0 * [`b959f31`](softprops/action-gh-release@b959f31) fix: clarify immutable prerelease uploads ([#763](https://github.com/softprops/action-gh-release/issues/763)) * [`8a8510e`](softprops/action-gh-release@8a8510e) ci: verify dist bundle freshness ([#762](https://github.com/softprops/action-gh-release/issues/762)) * [`438c15d`](softprops/action-gh-release@438c15d) docs: clarify working\_directory input ([#761](https://github.com/softprops/action-gh-release/issues/761)) * [`6ca3b5d`](softprops/action-gh-release@6ca3b5d) fix: recover concurrent asset metadata 404s ([#760](https://github.com/softprops/action-gh-release/issues/760)) * [`11f9176`](softprops/action-gh-release@11f9176) chore: add RELEASE.md * [`1f3f350`](softprops/action-gh-release@1f3f350) feat: add AGENTS.md * [`37819cb`](softprops/action-gh-release@37819cb) docs: clarify reused draft release behavior ([#759](https://github.com/softprops/action-gh-release/issues/759)) * Additional commits viewable in [compare view](softprops/action-gh-release@a06a81a...153bb8e) Updates `github/codeql-action` from 4.32.5 to 4.33.0 Release notes *Sourced from [github/codeql-action's releases](https://github.com/github/codeql-action/releases).* > v4.33.0 > ------- > > * Upcoming change: Starting April 2026, the CodeQL Action will skip collecting file coverage information on pull requests to improve analysis performance. File coverage information will still be computed on non-PR analyses. Pull request analyses will log a warning about this upcoming change. [#3562](https://github.com/github/codeql-action/pull/3562) > > To opt out of this change: > > + **Repositories owned by an organization:** Create a custom repository property with the name `github-codeql-file-coverage-on-prs` and the type "True/false", then set this property to `true` in the repository's settings. For more information, see [Managing custom properties for repositories in your organization](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization). Alternatively, if you are using an advanced setup workflow, you can set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > + **User-owned repositories using default setup:** Switch to an advanced setup workflow and set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > + **User-owned repositories using advanced setup:** Set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > * Fixed [a bug](https://github.com/github/codeql-action/issues/3555) which caused the CodeQL Action to fail loading repository properties if a "Multi select" repository property was configured for the repository. [#3557](https://github.com/github/codeql-action/pull/3557) > * The CodeQL Action now loads [custom repository properties](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization) on GitHub Enterprise Server, enabling the customization of features such as `github-codeql-disable-overlay` that was previously only available on GitHub.com. [#3559](https://github.com/github/codeql-action/pull/3559) > * Once [private package registries](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries) can be configured with OIDC-based authentication for organizations, the CodeQL Action will now be able to accept such configurations. [#3563](https://github.com/github/codeql-action/pull/3563) > * Fixed the retry mechanism for database uploads. Previously this would fail with the error "Response body object should not be disturbed or locked". [#3564](https://github.com/github/codeql-action/pull/3564) > * A warning is now emitted if the CodeQL Action detects a repository property whose name suggests that it relates to the CodeQL Action, but which is not one of the properties recognised by the current version of the CodeQL Action. [#3570](https://github.com/github/codeql-action/pull/3570) > > v4.32.6 > ------- > > * Update default CodeQL bundle version to [2.24.3](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3). [#3548](https://github.com/github/codeql-action/pull/3548) Changelog *Sourced from [github/codeql-action's changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md).* > CodeQL Action Changelog > ======================= > > See the [releases page](https://github.com/github/codeql-action/releases) for the relevant changes to the CodeQL CLI and language packs. > > [UNRELEASED] > ------------ > > * Added an experimental change which disables TRAP caching when [improved incremental analysis](https://github.com/github/roadmap/issues/1158) is enabled, since improved incremental analysis supersedes TRAP caching. This will improve performance and reduce Actions cache usage. We expect to roll this change out to everyone in March. [#3569](https://github.com/github/codeql-action/pull/3569) > > 4.33.0 - 16 Mar 2026 > -------------------- > > * Upcoming change: Starting April 2026, the CodeQL Action will skip collecting file coverage information on pull requests to improve analysis performance. File coverage information will still be computed on non-PR analyses. Pull request analyses will log a warning about this upcoming change. [#3562](https://github.com/github/codeql-action/pull/3562) > > To opt out of this change: > > + **Repositories owned by an organization:** Create a custom repository property with the name `github-codeql-file-coverage-on-prs` and the type "True/false", then set this property to `true` in the repository's settings. For more information, see [Managing custom properties for repositories in your organization](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization). Alternatively, if you are using an advanced setup workflow, you can set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > + **User-owned repositories using default setup:** Switch to an advanced setup workflow and set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > + **User-owned repositories using advanced setup:** Set the `CODEQL_ACTION_FILE_COVERAGE_ON_PRS` environment variable to `true` in your workflow. > * Fixed [a bug](https://github.com/github/codeql-action/issues/3555) which caused the CodeQL Action to fail loading repository properties if a "Multi select" repository property was configured for the repository. [#3557](https://github.com/github/codeql-action/pull/3557) > * The CodeQL Action now loads [custom repository properties](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization) on GitHub Enterprise Server, enabling the customization of features such as `github-codeql-disable-overlay` that was previously only available on GitHub.com. [#3559](https://github.com/github/codeql-action/pull/3559) > * Once [private package registries](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries) can be configured with OIDC-based authentication for organizations, the CodeQL Action will now be able to accept such configurations. [#3563](https://github.com/github/codeql-action/pull/3563) > * Fixed the retry mechanism for database uploads. Previously this would fail with the error "Response body object should not be disturbed or locked". [#3564](https://github.com/github/codeql-action/pull/3564) > * A warning is now emitted if the CodeQL Action detects a repository property whose name suggests that it relates to the CodeQL Action, but which is not one of the properties recognised by the current version of the CodeQL Action. [#3570](https://github.com/github/codeql-action/pull/3570) > > 4.32.6 - 05 Mar 2026 > -------------------- > > * Update default CodeQL bundle version to [2.24.3](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.3). [#3548](https://github.com/github/codeql-action/pull/3548) > > 4.32.5 - 02 Mar 2026 > -------------------- > > * Repositories owned by an organization can now set up the `github-codeql-disable-overlay` custom repository property to disable [improved incremental analysis for CodeQL](https://github.com/github/roadmap/issues/1158). First, create a custom repository property with the name `github-codeql-disable-overlay` and the type "True/false" in the organization's settings. Then in the repository's settings, set this property to `true` to disable improved incremental analysis. For more information, see [Managing custom properties for repositories in your organization](https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization). This feature is not yet available on GitHub Enterprise Server. [#3507](https://github.com/github/codeql-action/pull/3507) > * Added an experimental change so that when [improved incremental analysis](https://github.com/github/roadmap/issues/1158) fails on a runner — potentially due to insufficient disk space — the failure is recorded in the Actions cache so that subsequent runs will automatically skip improved incremental analysis until something changes (e.g. a larger runner is provisioned or a new CodeQL version is released). We expect to roll this change out to everyone in March. [#3487](https://github.com/github/codeql-action/pull/3487) > * The minimum memory check for improved incremental analysis is now skipped for CodeQL 2.24.3 and later, which has reduced peak RAM usage. [#3515](https://github.com/github/codeql-action/pull/3515) > * Reduced log levels for best-effort private package registry connection check failures to reduce noise from workflow annotations. [#3516](https://github.com/github/codeql-action/pull/3516) > * Added an experimental change which lowers the minimum disk space requirement for [improved incremental analysis](https://github.com/github/roadmap/issues/1158), enabling it to run on standard GitHub Actions runners. We expect to roll this change out to everyone in March. [#3498](https://github.com/github/codeql-action/pull/3498) > * Added an experimental change which allows the `start-proxy` action to resolve the CodeQL CLI version from feature flags instead of using the linked CLI bundle version. We expect to roll this change out to everyone in March. [#3512](https://github.com/github/codeql-action/pull/3512) > * The previously experimental changes from versions 4.32.3, 4.32.4, 3.32.3 and 3.32.4 are now enabled by default. [#3503](https://github.com/github/codeql-action/pull/3503), [#3504](https://github.com/github/codeql-action/pull/3504) > > 4.32.4 - 20 Feb 2026 > -------------------- > > * Update default CodeQL bundle version to [2.24.2](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.24.2). [#3493](https://github.com/github/codeql-action/pull/3493) > * Added an experimental change which improves how certificates are generated for the authentication proxy that is used by the CodeQL Action in Default Setup when [private package registries are configured](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries). This is expected to generate more widely compatible certificates and should have no impact on analyses which are working correctly already. We expect to roll this change out to everyone in February. [#3473](https://github.com/github/codeql-action/pull/3473) > * When the CodeQL Action is run [with debugging enabled in Default Setup](https://docs.github.com/en/code-security/how-tos/scan-code-for-vulnerabilities/troubleshooting/troubleshooting-analysis-errors/logs-not-detailed-enough#creating-codeql-debugging-artifacts-for-codeql-default-setup) and [private package registries are configured](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries), the "Setup proxy for registries" step will output additional diagnostic information that can be used for troubleshooting. [#3486](https://github.com/github/codeql-action/pull/3486) > * Added a setting which allows the CodeQL Action to enable network debugging for Java programs. This will help GitHub staff support customers with troubleshooting issues in GitHub-managed CodeQL workflows, such as Default Setup. This setting can only be enabled by GitHub staff. [#3485](https://github.com/github/codeql-action/pull/3485) > * Added a setting which enables GitHub-managed workflows, such as Default Setup, to use a [nightly CodeQL CLI release](https://github.com/dsp-testing/codeql-cli-nightlies) instead of the latest, stable release that is used by default. This will help GitHub staff support customers whose analyses for a given repository or organization require early access to a change in an upcoming CodeQL CLI release. This setting can only be enabled by GitHub staff. [#3484](https://github.com/github/codeql-action/pull/3484) > > 4.32.3 - 13 Feb 2026 > -------------------- > > * Added experimental support for testing connections to [private package registries](https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries). This feature is not currently enabled for any analysis. In the future, it may be enabled by default for Default Setup. [#3466](https://github.com/github/codeql-action/pull/3466) > > 4.32.2 - 05 Feb 2026 > -------------------- ... (truncated) Commits * [`b1bff81`](github/codeql-action@b1bff81) Merge pull request [#3574](https://github.com/github/codeql-action/issues/3574) from github/update-v4.32.7-7dd76e6bf * [`e682234`](github/codeql-action@e682234) Add changelog entry for [#3570](https://github.com/github/codeql-action/issues/3570) * [`95be291`](github/codeql-action@95be291) Bump minor version * [`59bcb60`](github/codeql-action@59bcb60) Update changelog for v4.32.7 * [`7dd76e6`](github/codeql-action@7dd76e6) Merge pull request [#3572](https://github.com/github/codeql-action/issues/3572) from github/mbg/pr-checks/eslint * [`e3200e3`](github/codeql-action@e3200e3) Merge pull request [#3563](https://github.com/github/codeql-action/issues/3563) from github/mbg/private-registry/oidc * [`4c356c7`](github/codeql-action@4c356c7) Merge pull request [#3570](https://github.com/github/codeql-action/issues/3570) from github/mbg/repo-props/warn-on-unexpected-props * [`b4937c1`](github/codeql-action@b4937c1) Only emit one message with accumulated property names * [`136b8ab`](github/codeql-action@136b8ab) Remove `cache-dependency-path` options as well * [`a5aba59`](github/codeql-action@a5aba59) Remove `package-lock.json` that's no longer needed * Additional commits viewable in [compare view](github/codeql-action@c793b71...b1bff81) Updates `anthropics/claude-code-action` from 1.0.69 to 1.0.75 Release notes *Sourced from [anthropics/claude-code-action's releases](https://github.com/anthropics/claude-code-action/releases).* > v1.0.75 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.75> > > v1.0.74 > ------- > > What's Changed > -------------- > > * Restore .claude/ and .mcp.json from PR base branch before CLI runs by [`@km-anthropic`](https://github.com/km-anthropic) in [anthropics/claude-code-action#1066](https://github.com/anthropics/claude-code-action/pull/1066) > * Remove redundant git status/diff/log from tag mode allowlist by [`@ddworken`](https://github.com/ddworken) in [anthropics/claude-code-action#1075](https://github.com/anthropics/claude-code-action/pull/1075) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.74> > > v1.0.73 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.73> > > v1.0.72 > ------- > > What's Changed > -------------- > > * Harden tag mode tool permissions against prompt injection by [`@km-anthropic`](https://github.com/km-anthropic) in [anthropics/claude-code-action#1002](https://github.com/anthropics/claude-code-action/pull/1002) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.72> > > v1.0.71 > ------- > > What's Changed > -------------- > > * docs: warn that allowed\_bots can expose the action to external triggers by [`@an-dustin`](https://github.com/an-dustin) in [anthropics/claude-code-action#1039](https://github.com/anthropics/claude-code-action/pull/1039) > * feat(inline-comment): add confirmed param + probe-pattern safety net by [`@km-anthropic`](https://github.com/km-anthropic) in [anthropics/claude-code-action#1048](https://github.com/anthropics/claude-code-action/pull/1048) > > New Contributors > ---------------- > > * [`@an-dustin`](https://github.com/an-dustin) made their first contribution in [anthropics/claude-code-action#1039](https://github.com/anthropics/claude-code-action/pull/1039) > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.71> > > v1.0.70 > ------- > > **Full Changelog**: <anthropics/claude-code-action@v1...v1.0.70> Commits * [`df37d2f`](anthropics/claude-code-action@df37d2f) chore: bump Claude Code to 2.1.79 and Agent SDK to 0.2.79 * [`1ba15be`](anthropics/claude-code-action@1ba15be) Remove redundant git status/diff/log from tag mode allowlist ([#1075](https://github.com/anthropics/claude-code-action/issues/1075)) * [`9ddce40`](anthropics/claude-code-action@9ddce40) Restore .claude/ and .mcp.json from PR base branch before CLI runs ([#1066](https://github.com/anthropics/claude-code-action/issues/1066)) * [`1b422b3`](anthropics/claude-code-action@1b422b3) chore: bump Claude Code to 2.1.78 and Agent SDK to 0.2.77 * [`4c044bb`](anthropics/claude-code-action@4c044bb) chore: bump Claude Code to 2.1.77 and Agent SDK to 0.2.77 * [`cd77b50`](anthropics/claude-code-action@cd77b50) chore: bump Claude Code to 2.1.76 and Agent SDK to 0.2.76 * [`0e80d3c`](anthropics/claude-code-action@0e80d3c) chore: bump Claude Code to 2.1.75 and Agent SDK to 0.2.75 * [`f956510`](anthropics/claude-code-action@f956510) Harden tag mode tool permissions against prompt injection ([#1002](https://github.com/anthropics/claude-code-action/issues/1002)) * [`5d0cc74`](anthropics/claude-code-action@5d0cc74) feat(inline-comment): add confirmed param + probe-pattern safety net ([#1048](https://github.com/anthropics/claude-code-action/issues/1048)) * [`567be3d`](anthropics/claude-code-action@567be3d) chore: bump Claude Code to 2.1.73 and Agent SDK to 0.2.73 * Additional commits viewable in [compare view](anthropics/claude-code-action@1fc90f3...df37d2f) Updates `ruby/setup-ruby` from 1.289.0 to 1.295.0 Release notes *Sourced from [ruby/setup-ruby's releases](https://github.com/ruby/setup-ruby/releases).* > v1.295.0 > -------- > > What's Changed > -------------- > > * Update CRuby releases on Windows by [`@ruby-builder-bot`](https://github.com/ruby-builder-bot) in [ruby/setup-ruby#890](https://github.com/ruby/setup-ruby/pull/890) > > **Full Changelog**: <ruby/setup-ruby@v1.294.0...v1.295.0> > > v1.294.0 > -------- > > What's Changed > -------------- > > * Add ruby-4.0.2 by [`@ruby-builder-bot`](https://github.com/ruby-builder-bot) in [ruby/setup-ruby#889](https://github.com/ruby/setup-ruby/pull/889) > > **Full Changelog**: <ruby/setup-ruby@v1.293.0...v1.294.0> > > v1.293.0 > -------- > > What's Changed > -------------- > > * Update README to remove JRuby version notes by [`@headius`](https://github.com/headius) in [ruby/setup-ruby#887](https://github.com/ruby/setup-ruby/pull/887) > * Update CRuby releases on Windows by [`@ruby-builder-bot`](https://github.com/ruby-builder-bot) in [ruby/setup-ruby#888](https://github.com/ruby/setup-ruby/pull/888) > > **Full Changelog**: <ruby/setup-ruby@v1.292.0...v1.293.0> > > v1.292.0 > -------- > > What's Changed > -------------- > > * Update Node to 24 by [`@eregon`](https://github.com/eregon) in [ruby/setup-ruby#886](https://github.com/ruby/setup-ruby/pull/886) > > **Full Changelog**: <ruby/setup-ruby@v1.291.0...v1.292.0> > > v1.291.0 > -------- > > What's Changed > -------------- > > * Add ruby-3.4.9 by [`@ruby-builder-bot`](https://github.com/ruby-builder-bot) in [ruby/setup-ruby#885](https://github.com/ruby/setup-ruby/pull/885) > > **Full Changelog**: <ruby/setup-ruby@v1.290.0...v1.291.0> > > v1.290.0 > -------- > > What's Changed > -------------- > > * Improve Windows version detection and HOME variable export by [`@jbaiza`](https://github.com/jbaiza) in [ruby/setup-ruby#883](https://github.com/ruby/setup-ruby/pull/883) > > New Contributors > ---------------- > > * [`@jbaiza`](https://github.com/jbaiza) made their first contribution in [ruby/setup-ruby#883](https://github.com/ruby/setup-ruby/pull/883) > > **Full Changelog**: <ruby/setup-ruby@v1.289.0...v1.290.0> Commits * [`319994f`](ruby/setup-ruby@319994f) Update CRuby releases on Windows * [`c984c1a`](ruby/setup-ruby@c984c1a) Add ruby-4.0.2 * [`dffb23f`](ruby/setup-ruby@dffb23f) Update CRuby releases on Windows * [`ea73ddb`](ruby/setup-ruby@ea73ddb) Update README to remove JRuby version notes * [`4eb9f11`](ruby/setup-ruby@4eb9f11) Update Node to 24 * [`9d13dd6`](ruby/setup-ruby@9d13dd6) Add ruby-3.4.9 * [`6ca151f`](ruby/setup-ruby@6ca151f) Leave only basic comment about env variable change * [`7413847`](ruby/setup-ruby@7413847) Set HOME variable from OS information * [`b3cff1b`](ruby/setup-ruby@b3cff1b) Add support for Windows Server Standard Evaluation * See full diff in [compare view](ruby/setup-ruby@19a43a6...319994f) Updates `webfactory/ssh-agent` from 0.9.1 to 0.10.0 Release notes *Sourced from [webfactory/ssh-agent's releases](https://github.com/webfactory/ssh-agent/releases).* > v0.10.0: Upgrade to node-24 > --------------------------- > > This release upgrades from node 20 to node 24, preparing for Node 20's upcoming EOL and getting rid of the related warning message in GitHub. > > What's Changed > -------------- > > * use node24 by [`@jimmymcpeter`](https://github.com/jimmymcpeter) in [webfactory/ssh-agent#243](https://github.com/webfactory/ssh-agent/pull/243) > > New Contributors > ---------------- > > * [`@jimmymcpeter`](https://github.com/jimmymcpeter) made their first contribution in [webfactory/ssh-agent#243](https://github.com/webfactory/ssh-agent/pull/243) > > **Full Changelog**: <webfactory/ssh-agent@v0.9.1...v0.10.0> Commits * [`e838748`](webfactory/ssh-agent@e838748) use node24 ([#243](https://github.com/webfactory/ssh-agent/issues/243)) * See full diff in [compare view](webfactory/ssh-agent@a6f90b1...e838748) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- Dependabot commands and options You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Problem
The CLI's non-interactive mode trusts the working directory: it reads
.mcp.json,.claude/settings.json, and.claude/settings.local.jsonfrom cwd and acts on them before any tool-permission gating. This includes:hooks(SessionStart, PreToolUse) — arbitrary shell commandsenv—NODE_OPTIONS,LD_PRELOAD,PATHapiKeyHelper/awsAuthRefresh— shell commands for credential fetching.mcp.jsonwithenableAllProjectMcpServers— MCP server init spawns processesWhen this action checks out a PR head, all of these files are attacker-controlled. A PR author without write access can achieve RCE in the workflow runner and exfiltrate secrets before the CLI reaches turn 1.
#942 addresses the
.mcp.jsoncase specifically. This PR addresses the root cause.Fix
Before the CLI runs, restore
.claude/and.mcp.jsonfrom the PR base branch:git fetch origin <base> --depth=1rm -rf .claude .mcp.jsongit checkout origin/<base> -- .claude .mcp.json(per path; errors = path absent on base → stays deleted)git reset -- .claude .mcp.json(unstage so the revert doesn't leak into CLI commits)The base branch version is trusted because a maintainer reviewed and merged it. The PR author's delta is discarded. Reviewed config on base still works normally.
.mcp.jsononly.claude/+.mcp.json— all startup-executed config.mcp.jsontouchedScope
workflow_dispatch, etc. are unaffected — workspace is already a trusted ref.CLAUDE.mdis not covered. It's prompt injection (gated by tool permissions), not pre-turn-1 RCE.Known limitation
If a PR legitimately modifies
.claude/and the CLI later runsgit add -A, the revert will be included in that commit. Workaround: merge the config change first with human review, then test. Documented in the function docstring.Implementation notes
baseBranchcomes fromprData.baseRefName(GitHub GraphQL) and passes throughvalidateBranchName()inbranch.tsbefore being returned — blocks option injection (--upload-pack), shell metachars, path traversal.execFileSyncwith array args throughout — no shell interpolation.rm, so fetch failure leaves the workspace untouched.