T09 · Insecure Skill Coding Practices
- Location
SKILL.md:119- Finding
Unvalidated OAuth Callback URL Forwarded Through a Shell Command
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is purpose-aligned for headless OAuth, but it under-specifies safe handling of sensitive callback URLs and tells agents to relay user-supplied OAuth URLs with curl.
Install only if you are comfortable with an agent assisting OAuth login. Treat copied callback URLs as sensitive, because they may contain authorization codes. Before using the manual callback relay, verify the URL is the expected localhost callback host, port, and path from the active OAuth command, and prefer pinned installer versions over @latest.
SKILL.md:119Unvalidated OAuth Callback URL Forwarded Through a Shell Command
README.md:50Mutable Third-Party Package Executed During Installation
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## Keyring Note
Some CLIs store tokens in a system keyring that requires an interactive terminal to unlock.
Check the CLI's documentation for a non-interactive option. Set any required credential
only for the duration of the auth step — do not persist it in shell configs.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## Keyring Note
Some CLIs store tokens in a system keyring that requires an interactive terminal to unlock.
Check the CLI's documentation for a non-interactive option. Set any required credential
only for the duration of the auth step — do not persist it in shell configs.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## Keyring Note
Some CLIs store tokens in a system keyring that requires an interactive terminal to unlock.
Check the CLI's documentation for a non-interactive option. Set any required credential
only for the duration of the auth step — do not persist it in shell configs.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## Keyring Note
Some CLIs store tokens in a system keyring that requires an interactive terminal to unlock.
Check the CLI's documentation for a non-interactive option. Set any required credential
only for the duration of the auth step — do not persist it in shell configs.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
| Error | Fix |
|-------|-----|
| `redirect_uri_mismatch` | Use **Desktop app** OAuth client, not Web application |
| Keyring unlock fails | Check CLI docs for a non-interactive keyring option |
| `Access blocked` | Add your email as test user in Google consent screen |
| Commands fail silently | Check CLI docs for a required account identifier option |
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The manual callback relay pattern tells the user to send the full redirect URL, which can contain sensitive OAuth artifacts such as authorization codes, state values, and other query parameters. Having the user paste that full URL into the chat or agent context increases the chance of token leakage through logs, transcripts, or downstream tooling, especially in environments where conversations are retained.
This is a markdown file, so vague-trigger review applies. The description frames the skill as applicable to 'any OAuth CLI' and 'use when a CLI tool requires OAuth login,' which is broad and does not define clear boundaries or negative examples for when the skill should not be invoked.