Back to skill

Security audit

Travel Planner

Security checks across malware telemetry and agentic risk

Overview

This travel-planning skill uses local scripts and limited external lookups in ways that match its stated purpose.

Install in a virtual environment, consider pinning dependencies before production use, and remember that weather and currency commands send destination or currency queries to external API providers.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • 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 (7)

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill advertises executable scripts with file read/write and network behavior, but no permissions are declared. This creates a transparency and policy-enforcement gap: a host system or reviewer cannot accurately constrain the skill's access, and users may invoke functionality without understanding that local files and external APIs are involved.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
geopy>=2.4.0
python-dateutil>=2.8.0
jinja2>=3.1.0
Confidence
97% confidence
Finding
The dependency is specified with a lower bound only (`requests>=2.31.0`), which allows future, unreviewed versions to be installed. This weakens supply-chain control and can unexpectedly introduce breaking changes or newly disclosed vulnerable releases into the environment.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
geopy>=2.4.0
python-dateutil>=2.8.0
jinja2>=3.1.0
pandas>=2.0.0
Confidence
96% confidence
Finding
`geopy>=2.4.0` is unpinned, so builds are not reproducible and may silently pull newer releases that have not been tested or security-reviewed. This is a supply-chain hygiene issue rather than an immediate exploit by itself.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
geopy>=2.4.0
python-dateutil>=2.8.0
jinja2>=3.1.0
pandas>=2.0.0
openpyxl>=3.1.0
Confidence
96% confidence
Finding
Using `python-dateutil>=2.8.0` permits any later version, making dependency resolution nondeterministic and increasing exposure to supply-chain risk. While not directly exploitable on its own, it reduces assurance that deployed environments match tested ones.

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
geopy>=2.4.0
python-dateutil>=2.8.0
jinja2>=3.1.0
pandas>=2.0.0
openpyxl>=3.1.0
Confidence
98% confidence
Finding
`jinja2>=3.1.0` is unpinned, allowing arbitrary later versions to be installed without review. Because Jinja2 is a templating engine with a history of security issues, weak version control increases risk if a bad or vulnerable release is introduced.

Unpinned Dependencies

Low
Category
Supply Chain
Content
geopy>=2.4.0
python-dateutil>=2.8.0
jinja2>=3.1.0
pandas>=2.0.0
openpyxl>=3.1.0
Confidence
96% confidence
Finding
`pandas>=2.0.0` is not pinned, so environment builds may pull different versions over time. This creates reproducibility and supply-chain exposure issues, though the requirements file alone does not show direct exploitability.

Unpinned Dependencies

Low
Category
Supply Chain
Content
python-dateutil>=2.8.0
jinja2>=3.1.0
pandas>=2.0.0
openpyxl>=3.1.0
Confidence
96% confidence
Finding
`openpyxl>=3.1.0` is unpinned, which permits unreviewed future versions and undermines deterministic builds. For a library that parses spreadsheet/XML data, disciplined version pinning is especially important for supply-chain and parser-security hygiene.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.