T09 · Insecure Skill Coding Practices
- Location
scripts/pod.js:129- Finding
Unrestricted User-Supplied URLs Reach Authenticated Network Operations
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is mostly a legitimate SOLID Pod tool, but it can use your authenticated Pod credentials against arbitrary URLs and has write behavior that could unintentionally replace data.
Review this skill before installing if your SOLID Pod contains sensitive data. Only use it with Pod and IDP URLs you trust, verify every target URL before reads or writes, and be especially careful with delete, write, acl grant, and acl revoke because they can remove data or change sharing permissions.
scripts/pod.js:129Unrestricted User-Supplied URLs Reach Authenticated Network Operations
scripts/pod.js:188Dataset Write Converts Every Read Failure into a Destructive Create-or-Replace Operation
The skill description overstates or misstates security-relevant behavior, including claiming access-control management and pod provisioning capabilities that are not actually implemented, while omitting custom area/topic index management from the top-level description. This can mislead users and policy engines about what the skill really does, causing unsafe trust assumptions, inappropriate approvals, or misuse of the skill in higher-privilege contexts.
This markdown file lists commands that create, write, delete, change access controls, and provision pods, but it does not clearly warn users about risks to data integrity, privacy, or irreversible changes. Although the Security section mentions credential handling and ACL confirmation, it does not disclose the impact of deletion, writes, access grants/revokes, or pod creation on user data and system state.
The skill declares powerful capabilities via metadata and documented behavior that require environment access and arbitrary network access, but it does not explicitly scope or constrain those permissions. In an agent environment, missing tool-scope declarations weaken policy enforcement and user awareness, increasing the chance of overbroad network use or unintended access to sensitive environment-backed credentials.
The manifest description states the skill can 'manage access control' and 'provision new SOLID Pods'. In this file, there is no code for ACL/WAC/ACP management, and the createPod function explicitly documents and performs only instruction output rather than actual pod creation, creating a mismatch between advertised capability and implemented behavior.
The CLI routes the delete command directly to deleteResource(sub) after only checking that a URL was provided. Although the usage text names the command delete, there is no confirmation prompt or explicit warning here that the operation is destructive and may permanently remove pod data.
The dependency uses a caret version range, which allows newer minor and patch releases to be installed over time. This creates a supply-chain risk because a compromised or breaking upstream release could be pulled into future installs without explicit review; in a skill that handles SOLID Pod data and authentication libraries, that risk is somewhat more sensitive than in a purely local utility.
"start": "node scripts/solidpod-data.js"
},
"dependencies": {
"@inrupt/solid-client": "^2.1.0",
"@inrupt/solid-client-authn-node": "^2.5.0",
"@inrupt/vocab-common-rdf": "^1.0.0"
},
This authentication-related dependency is not pinned to an exact version, so future installs may resolve to different code than originally tested. Because this package is used for SOLID authentication, an upstream compromise or unsafe regression could affect credential handling or session security, making the supply-chain exposure more concerning in context.
},
"dependencies": {
"@inrupt/solid-client": "^2.1.0",
"@inrupt/solid-client-authn-node": "^2.5.0",
"@inrupt/vocab-common-rdf": "^1.0.0"
},
"engines": {
Using a non-exact version for this RDF vocabulary package allows dependency drift across installations. While this package is likely lower risk than the auth component, any unpinned third-party package still expands supply-chain attack surface and can introduce unexpected behavior or malicious code if the upstream distribution is compromised.
"dependencies": {
"@inrupt/solid-client": "^2.1.0",
"@inrupt/solid-client-authn-node": "^2.5.0",
"@inrupt/vocab-common-rdf": "^1.0.0"
},
"engines": {
"node": ">=18.0.0"