T09 · Insecure Skill Coding Practices
- Location
scripts/reader.py:110- Finding
Unused Firebase refresh token stored without guaranteed restrictive permissions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it says, but it handles live Pocket account credentials in a risky and under-disclosed way.
Review before installing. Use this only on a machine and account you trust, treat ~/.pocket_token.json as a password-equivalent secret, delete it when finished, and avoid running the extract command in logged or shared terminals. The skill should ideally avoid storing refresh tokens, enforce owner-only file permissions, stop printing token fragments, and add clearer privacy warnings.
scripts/reader.py:110Unused Firebase refresh token stored without guaranteed restrictive permissions
scripts/reader.py:329Bearer token material disclosed in terminal output
The skill instructs users to use shell commands, local file storage, browser session access, and a networked reverse-engineered API, yet it declares no permissions or trust boundaries. This is dangerous because it obscures the skill's real capabilities and makes users less able to assess that it will access browser-derived auth tokens and sensitive remote data.
This code extracts Firebase authentication tokens directly from a logged-in browser profile by reading IndexedDB via a browser automation helper, then uses those credentials to access Pocket data. That is a credential-harvesting pattern that exceeds a simple transcript-reading skill's expected scope and enables unauthorized reuse of a user's session token if the local environment or cache is compromised.
The skill stores access and refresh tokens in a plaintext file under the user's home directory, creating a durable local credential artifact not clearly implied by the skill description. Any other local process, backup system, or user with access to that file could reuse the tokens to retrieve sensitive transcripts and summaries.
The README instructs users to extract a live Firebase bearer token from the browser and store it in a local file (~/.pocket_token.json) but does not clearly treat that token as a sensitive credential or warn about local exposure risks. Because this skill accesses highly sensitive conversation transcripts and summaries, compromise of the stored token could allow unauthorized access to private recordings until expiry, and the documentation normalizes unsafe credential-handling practices.
The setup flow tells users to extract a Firebase bearer token from the browser and save it to ~/.pocket_token.json without a prominent warning that this is a live credential granting access to Pocket account data. A locally stored token can be reused by other local processes or users, and users may not understand the exposure created by persisting account credentials on disk.
The skill advertises transcript and summary retrieval but does not clearly warn that it can expose highly sensitive content such as raw conversations, action items, and possible location metadata. In this context, the omission is significant because meeting transcripts and summaries often contain confidential business, personal, or regulated information that users may not expect to surface broadly.
The browser token extraction logic handles highly sensitive authentication material but provides only operational instructions, not a prominent warning that it will access browser-stored session credentials and persist them locally. Users may unknowingly grant the skill access equivalent to their Pocket account session, increasing the chance of accidental overexposure.
No suspicious patterns detected.