Back to skill

Security audit

Travel Buddy

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a coherent local travel-planning skill, but its link-checking helper can contact arbitrary HTTPS destinations from the user’s machine, which is broader than needed for travel-provider validation.

Install only if you are comfortable with a local-first travel tool that stores trip/profile files under a Travel Buddy workspace and makes live web requests for research. Avoid running the link checker on untrusted or manually edited HTML until it blocks private/internal network targets and validates redirects. Prefer a pinned or repository-reviewed install path over the floating npx command, and use saved profiles only after confirming the stored fields are appropriate.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/check_link_targets.py:134
Finding
Server-Side Request Forgery in Outbound Link Validation## Vulnerability Details **File Location**: `scripts/check_link_targets.py:134-157` **Vulnerability Type**: Server-Side Request Forgery through unrestricted URL validation **Risk Level**: Medium ### Vulnerable Code ```python def extract_links(html: str) -> list[tuple[str, str]]: """Return (kind, url) for every outbound button, de-duplicated, in document order.""" found: dict[str, str] = {} for match in re.finditer(r'<a\s+class="([^"]*)"([^>]*?)href="([^"]+)"', html): class_attr, attrs, href = match.group(1), match.group(2), unescape(match.group(3)) if not any(name in class_attr for name in LINK_CLASSES): continue if not href.lower().startswith("https://"): continue booking_type = re.search(r'data-booking-type="([^"]*)"', attrs) if booking_type: kind = booking_type.group(1) elif "dining-link" in class_attr: kind = "dining" else: kind = "map" found.setdefault(href, kind) return [(kind, url) for url, kind in found.items()] def probe(url: str, timeout: float) -> dict: """Ask once, then up to twice more with backoff if the answer says 'too fast'.""" host = urlparse(url).hostname or "" request = urllib.request.Request(url, headers={"User-Agent": UA, "Accept": "text/html,*/*"}) result: dict = {} for attempt in range(len(RETRY_BACKOFF) + 1): if attempt: time.sleep(RETRY_BACKOFF[attempt - 1]) _host_gate(host) try: with urllib.request.urlopen(request, timeout=timeout) as response: return {"status": response.status, "final_url": response.geturl(), "attempts": attempt + 1} ``` ### Technical Analysis The link checker extracts any URL beginning with `https://` from qualifying HTML anchors and passes it directly to `urllib.request.urlopen`. It d ...[truncated 2495 chars]
Remediation
## Remediation Suggestions 1. Parse URLs with `urllib.parse.urlsplit` and permit only the `https` scheme. 2. Reject embedded credentials, malformed hostnames, fragments where unnecessary, and ports other than an explicitly approved set. 3. Resolve every hostname with `socket.getaddrinfo`. 4. Use `ipaddress.ip_address` to reject every resolved address for which any of the following applies: - `is_private` - `is_loopback` - `is_link_local` - `is_multicast` - `is_reserved` - `is_unspecified` 5. Reject a hostname if any returned address is unsafe, rather than selecting one apparently safe result. 6. Disable automatic redirects and process them manually. Apply the same scheme, hostname, port, and resolved-address validation before every redirect hop. 7. Set a low redirect limit and reject HTTPS-to-HTTP downgrades. 8. Where practical, allowlist verified travel-provider domains instead of accepting arbitrary Internet hosts. 9. Consider executing network validation in a sandbox with no access to loopback, private networks, cloud metadata endpoints, or corporate intranet ranges. 10. Add tests covering IPv4, IPv6, integer/encoded IP forms, private DNS resolution, redirects to private hosts, mixed DNS answers, and DNS rebinding scenarios.

T08 · Insecure Dependencies

Note
Location
README.md:135
Finding
Unpinned Third-Party Package Execution in Recommended Installation Command## Vulnerability Details **File Location**: `README.md:135-140` **Vulnerability Type**: Unpinned third-party installer and supply-chain exposure **Risk Level**: Low ### Vulnerable Code ```markdown **Option 1 — one line with [`npx skills`](https://github.com/vercel-labs/skills)** (simplest): ```bash npx skills add dong845/travel-buddy ``` ``` ### Technical Analysis The recommended command invokes `npx` without pinning the `skills` package to a reviewed version. Depending on the local npm cache and environment, `npx` may retrieve and execute the currently published package. Consequently, the code that executes during installation is not fully determined by the audited Skill repository. A compromised package publisher, registry account, dependency, or newly published incompatible version could change the effective installer after the Skill itself has been reviewed. This is not evidence that the current upstream package is malicious. It is a supply-chain hardening deficiency caused by mutable dependency resolution and the absence of a documented integrity value. ### Attack Path 1. An attacker compromises the package publisher, an upstream dependency, or the package distribution channel. 2. The attacker publishes a malicious or altered version under the package name resolved by `npx skills`. 3. A user follows the documented installation command without specifying a version. 4. `npx` downloads and executes the mutable package version. 5. The malicious installer runs with the privileges of the user performing the installation. ### Impact Assessment A compromised installer could act with the full privileges of the invoking user. Potential scope includes: - Reading or modifying user-owned files. - Accessing credentials available to that account. - Altering agent configuration or installed Skills. - Downloading and executing additional payloads. - Establishing persistence permitted to the user account. T ...[truncated 292 chars]
Remediation
## Remediation Suggestions 1. Pin the installer to a reviewed, immutable version: ```bash npx skills@<reviewed-version> add dong845/travel-buddy ``` 2. Document the expected package publisher, version, and package integrity digest. 3. Prefer a commit-pinned repository installation for security-sensitive environments. 4. Publish signed releases and document signature verification. 5. Recommend installation with minimal privileges; users should not run the command as root or an administrator. 6. Periodically review the installer package and its transitive dependencies before updating the recommended version. 7. Avoid floating tags or branches in automated installations.
Vulnerability Patterns
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (237)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**Deleting a profile** is deliberately manual — there is no `forget` subcommand. Confirm the exact resolved path, then remove that one file:

```bash
rm "~/Travel Buddy/profiles/<the-one-you-named>.json"
```

Never remove the whole workspace to satisfy a profile deletion.
Confidence
85% 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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**删除档案是刻意手动的** —— 没有 `forget` 子命令。先确认解析出的确切路径,再删那一个文件:

```bash
rm "~/Travel Buddy/profiles/<你点名的那个>.json"
```

绝不能为了删一个档案而清掉整个工作区。
Confidence
85% 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).

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The manifest describes a travel-planning assistant, but the skill also directs auditing old workspaces, probing external sites, validating HTML/JSON artifacts, exporting ICS, and scanning local files/logs. That mismatch hides real capabilities from users and policy layers, which can lead to unintended local-data access or network activity under a much broader invocation surface than disclosed.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/form_shim.js:101

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_audit_workspace.py:50

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_discovery_runner.py:31

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_html_gate_report.py:32

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_intake_workflow.py:105

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_plan_consistency.py:34

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_plan_imagery.py:38

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_plan_slice.py:48

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_profile_form.js:69

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_render_localization.py:46

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/test_trip_timer.py:29