T09 · Insecure Skill Coding Practices
- Location
SKILL.md:149- Finding
OAuth Authentication Tokens Exposed to Browser JavaScript
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This OAuth troubleshooting skill is coherent, but it gives unsafe token-handling guidance that could expose user sessions and OAuth credentials.
Review before installing. The skill may be useful as Twenty CRM OAuth debugging notes, but do not follow its token transport recommendations as written. Keep OAuth/session tokens out of JavaScript-readable cookies and URLs, avoid printing secrets during troubleshooting, pin package versions where possible, and treat database/container commands as production changes requiring backup and change control.
SKILL.md:149OAuth Authentication Tokens Exposed to Browser JavaScript
SKILL.md:237Authentication Token Pair Transported Through a URL
SKILL.md:477Troubleshooting Command Discloses OAuth Client Secrets
The skill explicitly advises setting the auth token cookie with httpOnly: false so frontend JavaScript can read it. This materially weakens token confidentiality: any XSS, third-party script compromise, or browser extension with page access can steal bearer tokens and take over user sessions. Because the skill presents itself as OAuth best-practices guidance, this recommendation is more dangerous, as readers may trust and propagate an insecure pattern.
The markdown directly recommends making the tokenPair cookie readable by JavaScript without any warning about XSS or token theft risk. Exposing access or refresh tokens to the browser runtime sharply increases the attack surface and can enable account compromise, API abuse, and persistent unauthorized access if refresh tokens are included.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 README recommends httpOnly: false as a quick fix for a 'Cookie Not Readable' issue without any security warning or safer alternative. Making authentication or token-bearing cookies readable by frontend JavaScript significantly increases exposure to token theft through XSS, browser extensions, or injected third-party scripts, and the skill context makes this more dangerous because it is explicitly about OAuth token handling and sync integration.
The markdown instructs users to run a direct INSERT into the workspaceMetadata table and elsewhere advises container rebuild/restart actions, which can affect production data and service availability. The document does not provide explicit cautions about backing up data, verifying environment, or avoiding execution in production without change control.
Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.
#### Issue 4: Frontend Token Processing Loop
**Symptoms**: `SignInUpGlobalScopeFormEffect` runs repeatedly, infinite API calls
**Root Cause**: Same token processed multiple times
Detected: suspicious.exposed_secret_literal