Back to skill

Security audit

resy-fpx

Security checks for vulnerabilities and agentic risk

Overview

The skill is clearly for managing Resy reservations, but it asks for sensitive account/session access and an unpinned global browser-bridge install that users should review carefully.

Install only if you are comfortable giving this skill access to your Resy account actions. Prefer the direct Resy credential path or a reviewed, pinned, isolated fpx setup; protect RESY_PASSWORD and RESY_TOKEN, confirm every booking/cancel/favorite/notify write before running it, and remove or disconnect the browser bridge after token bootstrap.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:43
Finding
Unpinned Global Installation of a Privileged Browser-Bridge Dependency## Vulnerability Details **File Location**: `SKILL.md`, lines 43–58 **Vulnerability Type**: Unpinned third-party dependency with access to a browser-authenticated session **Risk Level**: Medium ### Vulnerable Code ```sh One-time setup: npm install -g @fetchproxy/cli # provides `fpx` fpx profile add resy --domain resy.com fpx pair -p resy # prints a pair code → approve in Transporter Then bootstrap the token through the tab (this replicates the one call resy.com's own JS makes to refresh its in-memory token — the HttpOnly session cookies authenticate it): fpx post-json 'https://api.resy.com/3/auth/refresh' '{}' -p resy \ | jq -r '.token' ``` ### Technical Analysis The Skill instructs users to globally install the latest available version of `@fetchproxy/cli` without pinning a version or verifying package integrity. It then pairs this dependency with a browser bridge that can issue a request authenticated by the user's signed-in Resy session. The required Resy authentication and API traffic are consistent with the Skill's declared reservation-management functionality. The identified risk arises from placing an unpinned third-party package in a sensitive authentication path. The effective package contents can change after the Skill has been reviewed, and a global installation gives the package's installation lifecycle scripts and executable code access under the invoking user's account. Pairing the tool with a signed-in browser context is also more privileged than making direct API requests with a narrowly scoped token. Although the documented profile is restricted to `resy.com` and the demonstrated request targets `api.resy.com`, compromise of the npm package, its maintainer account, its transitive dependencies, or the associated bridge could expose the returned Resy token or abuse browser-mediated requests. No evidence was found that the currently documented package is malicio ...[truncated 2050 chars]
Remediation
## Remediation Suggestions 1. Pin `@fetchproxy/cli` to a specifically reviewed version rather than installing the latest release: ```sh npm install --global @fetchproxy/cli@<reviewed-version> ``` 2. Record and verify the expected package integrity hash or lockfile metadata before installation. 3. Document the authoritative npm package, source repository, publisher identity, and required browser extension so users can detect typosquatting or spoofed components. 4. Avoid global installation. Run the pinned dependency in an isolated temporary environment, container, or dedicated low-privilege user account. 5. Disable unnecessary npm lifecycle scripts where compatible, and inspect the package and its dependency tree before granting browser access. 6. Clearly disclose the permissions and data accessible through the browser bridge before pairing, and require explicit user consent. 7. Keep the direct credential-based path as the preferred option and use the browser bridge only when no less-privileged authentication mechanism is available. 8. After bootstrap, disconnect the bridge and remove the temporary package or environment. Invalidate the Resy session or token if compromise is suspected. 9. Prefer an official Resy authorization flow or supported API if one becomes available.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
--data-urlencode "time_preferred_end=21:00:00" \
  --data-urlencode "service_type_id=2"

# remove — DELETE /2/notify needs the FULL spec as query params, not just the id.
# Look up the spec from the list call above first, then:
curl -s -X DELETE "https://api.resy.com/2/notify?notify_request_id=<ID>&venue_id=123&day=2026-08-01&num_seats=2&service_type_id=2" \
  -H "Authorization: ResyAPI api_key=\"$RESY_API_KEY\"" \
Confidence
80% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

External Transmission

Medium
Category
Data Exfiltration
Content
**Path A — you have Resy credentials (preferred, no browser needed):**

```sh
curl -s 'https://api.resy.com/3/auth/password' \
  -H 'Authorization: ResyAPI api_key="VbWk7s3L4KiK5fzlO7JD3Q5EYolJI7n5"' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "email=$RESY_EMAIL" \
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Path A — you have Resy credentials (preferred, no browser needed):**

```sh
curl -s 'https://api.resy.com/3/auth/password' \
  -H 'Authorization: ResyAPI api_key="VbWk7s3L4KiK5fzlO7JD3Q5EYolJI7n5"' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "email=$RESY_EMAIL" \
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Path A — you have Resy credentials (preferred, no browser needed):**

```sh
curl -s 'https://api.resy.com/3/auth/password' \
  -H 'Authorization: ResyAPI api_key="VbWk7s3L4KiK5fzlO7JD3Q5EYolJI7n5"' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode "email=$RESY_EMAIL" \
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The markdown instructs users to send `email`, `password`, and authentication tokens to API endpoints, but it does not include any warning about handling credentials, account privacy, or the sensitivity of these values. Because this file is markdown and documents live auth flows, a user-facing warning is expected for operations that affect privacy and account security.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The file provides ready-to-run booking and cancellation commands that perform real account mutations, but it does not place an explicit warning immediately рядом that these actions create or cancel live reservations. In an agent-skill context, actionable examples without strong guardrails increase the risk of unintended destructive actions against a user's account.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/resy-api.md:7

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:31