Back to skill

Security audit

Skill

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent UBTRIPPIN travel-management skill, but it needs Review because it gives agents broad authority over sensitive travel, sharing, billing, webhook, email-forwarding, and deletion actions without enough guardrails.

Install only if you are comfortable granting an agent access to manage UBTRIPPIN travel data, loyalty numbers, family sharing, collaborators, webhooks, and billing-related links. Keep the API key in a secret store or protected environment variable, not TOOLS.md or example scripts, and require explicit confirmation before deletes, sharing changes, webhook setup, checkout, calendar-token regeneration, or forwarding booking emails and attachments.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
README.md:22
Finding

Unsafe plaintext persistence and source-code placement of bearer API keys

Content
View full analysis

Vulnerability Details

File Locations:

  • README.md:22
  • examples/get-trip.sh:4-9
  • examples/list-trips.sh:5-9

Vulnerability Type: Plaintext sensitive credential storage
Risk Level: Medium

Vulnerable Code

README.md:22:

markdown
2. Store the key in your agent config or TOOLS.md

examples/get-trip.sh:4-9:

bash
API_KEY="ubt_k1_your_key_here"
TRIP_ID="550e8400-e29b-41d4-a716-446655440000"

curl -s \
  -H "Authorization: Bearer $API_KEY" \
  https://ubtrippin.xyz/api/v1/trips/$TRIP_ID \

examples/list-trips.sh:5-9:

bash
API_KEY="ubt_k1_your_key_here"

curl -s \
  -H "Authorization: Bearer $API_KEY" \
  https://ubtrippin.xyz/api/v1/trips \

Technical Analysis

The README explicitly recommends storing the UBTRIPPIN bearer token in an agent configuration file or TOOLS.md. The shell examples similarly encourage users to replace a placeholder with a real API key directly in the script.

The distributed values are placeholders rather than active credentials, so the package does not itself disclose a working secret. However, following these instructions can cause a real bearer credential to be stored in plaintext within a workspace or source-controlled file. Such files may be exposed through repository commits, backups, diagnostic bundles, agent context collection, overly broad filesystem permissions, or command output.

This guidance also conflicts with SKILL.md:882, which states that the API key should not be stored beyond the session unless the user explicitly requests it. No secure storage mechanism or restrictive permission guidance is supplied.

Attack Path

  1. A user generates a valid UBTRIPPIN API key.
  2. Following the README or examples, the user places the key in TOOLS.md, an agent configuration file, or one of the shell scripts.
  3. The plaintext file is committed to source control, included in a backup or support archive, exposed to another local process or user, or supplied to an agent as works ...[truncated 1199 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the recommendation to store API keys in TOOLS.md or other files likely to be committed, indexed, or included in agent context.
  2. Change the shell examples to obtain the key from a protected environment variable:
bash
#!/usr/bin/env bash
set -euo pipefail

: "${UBTRIPPIN_API_KEY:?Set UBTRIPPIN_API_KEY through a secure secret provider}"

curl --fail --silent --show-error \
  -H "Authorization: Bearer ${UBTRIPPIN_API_KEY}" \
  "https://www.ubtrippin.xyz/api/v1/trips"
  1. Recommend an operating-system credential store, platform secret manager, or agent-specific encrypted secret facility instead of plaintext workspace files.
  2. If file-based storage is unavoidable, require a file outside the repository with restrictive permissions such as 0600, and ensure it is excluded through .gitignore.
  3. Warn users not to expose bearer tokens in logs, screenshots, shell history, support bundles, or prompts.
  4. Make persistent storage opt-in and require explicit user consent, consistent with SKILL.md:882.
  5. Document immediate revocation and rotation procedures for suspected credential exposure.
  6. Where supported by the service, use narrowly scoped and short-lived tokens so compromise does not grant access to every documented API operation.

The pre-scan warning concerning remote payload execution was also manually checked. examples/get-trip.sh and examples/list-trips.sh send HTTPS API requests with curl and pipe JSON responses only to python3 -m json.tool; they do not pipe remote content to bash, use eval, or otherwise execute a remotely retrieved script.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (23)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Deleting a trip by ID is a sensitive parameterized action, and the skill offers no safeguards against wrong-ID selection, ambiguous user requests, or manipulated context. Because trips aggregate multiple itinerary items and sharing state, erroneous invocation can remove substantial user data.

Content

Scanner excerpt · SKILL.md (reported line 99)May include surrounding context.

Delete Trip

text
DELETE /api/v1/trips/:id

Rename Trip

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Deleting an item by ID can remove reservations, ticket details, or transport segments if the agent resolves the wrong identifier or acts on injected instructions. The risk is amplified because item IDs are opaque and not naturally user-verifiable in conversation.

Content

Scanner excerpt · SKILL.md (reported line 155)May include surrounding context.

Delete Item

text
DELETE /api/v1/items/:id

Add Item to Trip

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
81% confidence
Finding

Deleting loyalty entries by ID can erase sensitive membership data needed for travel operations and rewards use. Since IDs are opaque, a mistaken mapping or malicious prompt could cause unintended loss of account metadata.

Content

Scanner excerpt · SKILL.md (reported line 367)May include surrounding context.

Delete Loyalty Program

text
DELETE /api/v1/me/loyalty/:id

Export Loyalty Data

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
82% confidence
Finding

Deleting a family object is a high-sensitivity action because it affects shared records, members, and visibility across multiple users. An incorrect or coerced call could disrupt collaboration and access for an entire group, not just one traveler.

Content

Scanner excerpt · SKILL.md (reported line 437)May include surrounding context.

Delete Family

text
DELETE /api/v1/families/:id

Invite Member to Family

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Removing a family member by user ID changes shared access and can impact visibility of trips and loyalty information. Without robust confirmation and identity display, the agent could remove the wrong person or be tricked into changing household access control.

Content

Scanner excerpt · SKILL.md (reported line 450)May include surrounding context.

Remove Family Member

text
DELETE /api/v1/families/:id/members/:uid

Family Member Profiles

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Removing collaborators from a trip modifies access control for shared itineraries. If the agent acts on an incorrect UID or ambiguous language, it can unintentionally revoke a legitimate travel companion's access.

Content

Scanner excerpt · SKILL.md (reported line 517)May include surrounding context.

Remove Collaborator

text
DELETE /api/v1/trips/:id/collaborators/:uid

Trip Invites

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Deleting a guide by ID is destructive and easy to mis-target in a conversational flow where multiple guides may have similar city names or titles. Loss of curated travel recommendations may be hard to recover.

Content

Scanner excerpt · SKILL.md (reported line 559)May include surrounding context.

Delete Guide

text
DELETE /api/v1/guides/:id

List Guide Entries

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Deleting guide entries by opaque entry ID can remove notes and recommendations due to mistaken resolution or maliciously crafted prompts. The impact is narrower than trip deletion but still constitutes unauthorized destructive modification.

Content

Scanner excerpt · SKILL.md (reported line 582)May include surrounding context.

Delete Guide Entry

text
DELETE /api/v1/guides/:id/entries/:eid

Nearby Guides

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Removing allowed sender addresses alters email-ingestion security controls. If misused, it can block legitimate booking imports or disrupt the user's forwarding setup, and because it touches a security boundary, it is more sensitive than ordinary content edits.

Content

Scanner excerpt · SKILL.md (reported line 611)May include surrounding context.

Remove Sender

text
DELETE /api/v1/settings/senders/:id

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
84% confidence
Finding

Deleting webhooks changes outbound integration behavior and can conceal prior exfiltration or disrupt legitimate automations. Combined with the ability to create/test webhooks, this increases the risk of unauthorized manipulation of data-export pathways.

Content

Scanner excerpt · SKILL.md (reported line 683)May include surrounding context.

Delete Webhook

text
DELETE /api/v1/webhooks/:id

Test Webhook

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · examples/get-trip.sh (reported line 7)May include surrounding context.

sh
API_KEY="ubt_k1_your_key_here"
TRIP_ID="550e8400-e29b-41d4-a716-446655440000"

curl -s \
  -H "Authorization: Bearer $API_KEY" \
  https://ubtrippin.xyz/api/v1/trips/$TRIP_ID \
  | python3 -m json.tool

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · examples/list-trips.sh (reported line 7)May include surrounding context.

sh
API_KEY="ubt_k1_your_key_here"

curl -s \
  -H "Authorization: Bearer $API_KEY" \
  https://ubtrippin.xyz/api/v1/trips \
  | python3 -m json.tool

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README explicitly tells users to store a UBTRIPPIN API key in agent config or TOOLS.md, but provides no guidance about secrets handling, access controls, or avoiding plaintext storage in files that may be shared, synced, or committed. In an agent-skill context, TOOLS.md and related workspace files are often visible to other tools, collaborators, or source control, so this can directly lead to credential leakage and unauthorized access to the user's travel data and account actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The documentation embeds a bearer-token-shaped credential example (Authorization: Bearer ubt_k1_...) without any safety guidance or clear indication that it is a placeholder. In a skill that manages travel data and likely accesses trips, loyalty data, and personal bookings, normalizing direct token placement in docs increases the chance that real secrets are copied into prompts, logs, screenshots, or repositories.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
72% confidence
Finding

The skill documents behaviors that may require capabilities beyond a narrowly declared API-only integration, while the manifest does not constrain tool usage with explicit permissions or allowed-tools. In an agent environment, missing scope declarations can let the model overreach into local shell or other ambient capabilities without clear least-privilege boundaries.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill exposes destructive deletion operations without guidance to confirm intent or warn about irreversible consequences. In conversational systems, ambiguity or prompt injection can cause accidental deletion of trips and related planning data with no recovery expectations stated.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

Webhook creation and test delivery enable the agent to send data to arbitrary URLs, which is broader than ordinary travel itinerary management. If misused, this can exfiltrate trip, profile, loyalty, or event data to attacker-controlled endpoints under the guise of configuration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Billing portal access and Stripe checkout are account and payment operations that go beyond core trip management. In an agent setting, exposing these actions increases risk of unwanted purchases, subscription changes, or disclosure of billing state when the user only intended travel assistance.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The email-forwarding workflow instructs transmission of confirmation emails and PDF attachments to a third-party parser without an explicit privacy warning. Booking emails often contain names, itineraries, loyalty numbers, barcodes, and reservation details, so silent forwarding materially increases privacy and data-handling risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill tells the agent to use email-sending capability to forward booking emails and attachments from the user's address to a third-party service. That expands the trust boundary from REST API actions to outbound messaging and can transmit sensitive travel data, tickets, PII, and attachments without strong consent and verification controls.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs an agent to forward booking confirmation emails and PDF attachments to an external email address, which can contain sensitive personal and travel data such as names, itineraries, ticket numbers, loyalty information, and other booking details. While this appears to be core product functionality rather than overtly malicious behavior, the documentation does not explicitly require user consent, warn about the sensitivity of the data being transmitted, or describe safeguards for handling third-party personal information embedded in those emails.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script fetches and prints full trip records that include personally sensitive travel data such as traveler names, itinerary details, and booking confirmation numbers. In a travel-management skill, this data is expected to exist, but dumping it directly to stdout without masking or warning increases the chance of accidental disclosure through terminals, logs, screenshots, or shared environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This shell script reads an API key and immediately uses it in an authenticated HTTP request to retrieve user trip information. Although comments describe the API call, there is no user-facing prompt, warning, or disclosure in the script itself that it will transmit credentials and fetch potentially sensitive personal travel data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.