T09 · Insecure Skill Coding Practices
- Location
index.js:18- Finding
Unrestricted URL Fetching Enables Server-Side Request Forgery
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This calendar parser does what it claims, but it allows broad URL fetching and has weak local file and resource limits that users should review before installing.
Install only if you trust the calendar sources you will pass to it and are comfortable with the agent making outbound requests to arbitrary calendar URLs. Prefer local .ics files or known public calendar providers, avoid private/internal URLs, and be aware that symlinks inside the workspace may bypass the stated local-file boundary until the implementation is tightened.
index.js:18Unrestricted URL Fetching Enables Server-Side Request Forgery
index.js:38Symbolic Links Can Bypass the Local File Access Boundary
index.js:75Documented Recurrence Safety Limit Is Not Enforced
The README explicitly encourages users to supply remote calendar URLs, but it does not disclose that doing so causes outbound network access and may transmit user-provided URLs or fetch data from untrusted hosts. In an agent setting, this can enable unintended requests to internal services or sensitive endpoints if a user provides a crafted URL, making the omission security-relevant rather than merely documentation-related.
Without declared permissions the skill's intent is opaque and cannot be validated.
The skill encourages fetching remote calendar URLs and explicitly asks the agent not to use an alternative fetch path, but it does not warn that using a third-party calendar URL may disclose sensitive schedule data, identifiers, locations, or embedded meeting links to remote servers. In a calendar-processing context, this omission is meaningful because .ics feeds often contain personal or organizational metadata and remote access creates a privacy and tracking risk.
This is a natural-language policy issue because it mandates a locale/timezone choice rather than offering user control or documenting when conversion is appropriate. Time zone is a locale-related setting, and the instruction does not present it as optional or user-confirmed.
The dependency uses a caret range, which permits automatic installation of newer minor/patch releases rather than an exact reviewed version. In a package that parses untrusted calendar content and may fetch remote feeds, this increases supply-chain risk because a compromised or vulnerable upstream release could be pulled in without explicit review.
"license": "MIT",
"homepage": "https://github.com/baptiste00001/icalendar-events-parser",
"dependencies": {
"icalendar-events": "^1.1.1",
"luxon": "^3.7.2"
},
"devDependencies": {}
The luxon dependency is also specified with a caret range, allowing drift from the originally tested version. While common in npm projects, this still creates a real but low-severity supply-chain exposure because future upstream releases could introduce malicious code or a breaking security issue into downstream installs.
"homepage": "https://github.com/baptiste00001/icalendar-events-parser",
"dependencies": {
"icalendar-events": "^1.1.1",
"luxon": "^3.7.2"
},
"devDependencies": {}
}
Detected: suspicious.env_credential_access