Skip to content

Close the leaks the store review found (#30454) - #41

Merged
KevinBatdorf merged 2 commits into
mainfrom
fix/store-review-30454
Aug 24, 2026
Merged

Close the leaks the store review found (#30454)#41
KevinBatdorf merged 2 commits into
mainfrom
fix/store-review-30454

Conversation

@KevinBatdorf

Copy link
Copy Markdown
Owner

Addresses the four findings from the store review of PR #30454. Verified each against the live Forge API before fixing.

1. Encoded paths bypassed the probe secret guard (confirmed live). FORBIDDEN tested the raw path, but Forge decodes it when routing — environ%6dent slipped past and returned the environment file's content. The guard now decodes before testing. Both the encoded and literal env paths are refused.

2. Deployment scripts leaked secrets. get-site returned deployment_script verbatim; the field is free-form and can hold a pasted token. Dropped from get-site, and added to probe-api's redaction so it's masked in the site collection the probe can still reach.

3. Confirmation lost the resolved target. When a name couldn't be resolved at confirm time, the dialog showed a clean generic prompt, so a transient failure let the user approve without seeing the target — or, for reboots, the sites taken down. The fallback message now states the details are unverified. (Not a wrong-target deploy: the target still resolves from the same input at execute time.)

4. Unused dependency. @raycast/utils was declared but imported nowhere. Removed from the manifest and lockfile.

tsc, eslint, prettier clean.

🤖 Generated with Claude Code

KevinBatdorf and others added 2 commits August 24, 2026 08:46
Four findings from the store review of the AI tools, three of them ways a secret
reaches the model:

probe-api tested its credential guard against the raw path, but Forge decodes the
path when it routes, so environ%6dent slipped past the literal denylist and came
back with the environment file's content. Reproduced live. The guard now decodes
before it tests.

get-site returned deployment_script verbatim on an ordinary lookup, and a
deployment script is free-form — a password or token pasted into it went straight
to the model. Dropped from get-site, and added to probe-api's redaction so the
same field is masked in the site collection it can still reach.

@raycast/utils was declared but imported nowhere. Removed from the manifest and
the lockfile.

The confirmation dialogs showed a clean generic prompt when a name could not be
resolved, so a transient failure let the user approve without seeing the target
or, for reboots, the sites it takes down. The fallback message now says the
details are unverified.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The store-review fix for this had the confirmation show a generic prompt when a
name could not be resolved. A cleaner answer, per Kevin: don't confirm at all —
fail the call and let the agent retry with a resolvable target.

The confirmation now resolves the site or server directly, so an unresolved name
throws findSite's own error — the candidate list and their ids — before any
dialog. The agent gets that error and calls again with an id; nothing is
approved in the meantime. Returning undefined to skip the dialog was the other
option and is unsafe: it would let a transient lookup blip through to an
unconfirmed reboot. A resolvable target still shows the full impact panel.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@KevinBatdorf
KevinBatdorf merged commit d841778 into main Aug 24, 2026
@KevinBatdorf
KevinBatdorf deleted the fix/store-review-30454 branch August 24, 2026 03:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant