T09 · Insecure Skill Coding Practices
- Location
scripts/configuration-available-regions.sh:12- Finding
Unvalidated Custom API Base URL Can Disclose the TripGo API Key
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a mostly coherent TripGo API wrapper, but it lets authenticated requests use an unvalidated custom API base URL, which could send the user's TripGo API key to an unintended host.
Install only if you trust the scripts and can control the environment in which they run. Keep TRIPGO_BASE_URL unset unless you intentionally use a trusted TripGo-compatible endpoint, avoid passing API keys on the command line, and treat trip coordinates, trip IDs, webhook callback URLs, and analytics calls as potentially sensitive travel data.
scripts/configuration-available-regions.sh:12Unvalidated Custom API Base URL Can Disclose the TripGo API Key
The declared description presents a broad, multi-capability TripGo integration covering routing, public transport, trip and location services, and geocoding. The supplied code chunk does not implement that broad interface; it only demonstrates one specific API call to a deprecated Travelling Tourist Problem endpoint. While this is TripGo-related, the actual behavior is much narrower and materially different from the stated comprehensive journey-planning and location-services purpose. Therefore the description does not accurately represent this code chunk.
The declared description claims broad TripGo support for routing, public transport, trips, and location services used for multimodal planning and geocoding. The supplied code instead performs one specific destructive API action: deleting a Travelling Tourist Problem by ID through a deprecated endpoint. This is materially different from the stated primary purpose and introduces an undeclared deletion capability. While it does interact with the TripGo API, the behavior is much narrower and of a different kind than the description suggests.
Referenced artifact was not completely inspected
- `SKILL.md`: This file.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
echo "Making request to: ${URL}"
echo ""
curl -s -X GET "$URL" \
-H "Accept: application/json" \
-H "X-TripGo-Key: ${TRIPGO_API_KEY}" | python3 -m json.tool
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).
#!/bin/bash
# Remove a Hook from a Trip
# DELETE /trip/hook/{id}
set -euo pipefail
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).
#!/bin/bash
#
# Delete Travelling Tourist Problem (Deprecated)
# DELETE /ttp/{id}
#
# Deletes the problem of the provided ID.
# This is optional as problems expire automatically.
Without declared permissions the skill's intent is opaque and cannot be validated.
The skill is designed to transmit data and the TRIPGO_API_KEY to an external service, and it also allows the base URL to be overridden via TRIPGO_BASE_URL. In context, outbound API calls are expected, but permitting a configurable destination without strong validation can redirect authenticated requests to an attacker-controlled host, causing credential leakage or sensitive trip/location data exfiltration.
To use this skill, you must set the following environment variables:
- `TRIPGO_API_KEY`: Your TripGo API key (header: `X-TripGo-Key`). Get it here: https://skedgo.com/tripgo-api/
- `TRIPGO_BASE_URL`: (Optional) Base URL for the API. Defaults to `https://api.tripgo.com/v1`.
- `TRIPGO_WEBHOOK_ALLOWLIST`: (Optional, recommended) Comma-separated allowlist of webhook domains (e.g. `example.com,webhooks.example.org`).
- `TRIPGO_ALLOW_UNSAFE_WEBHOOK`: (Optional, default `false`) Set to `true` to bypass webhook allowlist checks for trusted/manual debugging only.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| X-TripGo-Key | API key (required) | | Content-Type | application/json |
curl -X POST "https://api.tripgo.com/v1/regions.json" \
-H "Content-Type: application/json" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| X-TripGo-Key | API key (required) | | Content-Type | application/json |
curl -X POST "https://api.tripgo.com/v1/regionInfo.json" \
-H "Content-Type: application/json" \
The webhook registration endpoint explicitly sends trip identifiers and trip URLs to an arbitrary third-party callback URL, but the documentation does not warn users that trip-related data will be transmitted off-platform. In an agent skill context, this can lead to unintended disclosure of travel data or internal callback destinations if integrators enable webhooks without understanding the privacy and trust implications.
The planned-trip endpoint is described as being for analytics, but the documentation lacks a clear user-facing privacy warning that invoking it records user trip behavior. In a journey-planning skill, trip selection can reveal sensitive location and behavior patterns, so silent analytics collection increases privacy risk and may cause deployments to violate user-consent or disclosure requirements.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Make request
echo "Fetching available regions..."
curl -s -X POST "${TRIPGO_BASE_URL}/regions.json" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: ${TRIPGO_API_KEY}" \
-d "$REQUEST_BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Make request
echo "Fetching TSPs for region: ${REGION}..."
curl -s -X POST "${TRIPGO_BASE_URL}/regionInfo.json" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: ${TRIPGO_API_KEY}" \
-d "$REQUEST_BODY" | jq '.'
The script reads an API key from environment variables and later sends user-supplied location inputs to a remote TripGo endpoint. While it prints that it is fetching details, it does not disclose that location data and authentication credentials are being used in an outbound network request.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo ""
echo "Making request..."
curl -s -X POST "https://api.tripgo.com/v1/locations.json" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: ${TRIPGO_KEY}" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Making request to $ENDPOINT"
echo "Request body: $BODY"
curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: $API_KEY" \
-d "$BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Making request to $ENDPOINT"
echo "Request body: $BODY"
curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: $API_KEY" \
-d "$BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Making request to $ENDPOINT"
echo "Request body: $BODY"
curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: $API_KEY" \
-d "$BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Making request to $ENDPOINT"
echo "Request body: $BODY"
curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: $API_KEY" \
-d "$BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Making request to $ENDPOINT"
echo "Request body: $BODY"
curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: $API_KEY" \
-d "$BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "Making request to $ENDPOINT"
echo "Request body: $BODY"
curl -s -X POST "$ENDPOINT" \
-H "Content-Type: application/json" \
-H "X-TripGo-Key: $API_KEY" \
-d "$BODY" | jq '.'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "$JSON_payload" | jq '.'
echo ""
curl -s -X POST "${BASE_URL}/waypoint.json" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-TripGo-Key: ${TRIPGO_API_KEY}" \
The script sends origin, destination, modes, locale, and optional trip timing data to the TripGo API via curl. Although it logs the request URL with the API key hidden, it does not clearly warn the user that potentially sensitive travel/location data will be transmitted to a third-party service.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
echo "$JSON_payload" | jq '.'
echo ""
curl -s -X POST "${BASE_URL}/skedgoify.json" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-TripGo-Key: ${TRIPGO_API_KEY}" \
No suspicious patterns detected.