T09 · Insecure Skill Coding Practices
- Location
SKILL.md:13- Finding
Unrestricted Third-Party Breach Lookup May Disclose Sensitive Identifier Hashes
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:13
Vulnerability Type: Untrusted external service selection and insufficient protection of sensitive identifiers
Risk Level: MediumVulnerable Code Snippet:
markdown 2. **Query breach DB** — call Have I Been Pwned API v3 (or equivalent) with hash prefix. Respect rate limits (1.5s delay between calls).Technical Analysis
The phrase
or equivalentpermits the agent or a future implementation to transmit hash prefixes to an unspecified external service. The Skill does not define an endpoint allowlist, required transport security, minimum privacy properties, retention restrictions, certificate validation requirements, or the precise prefix length for email and phone queries.Unsalted SHA-256 hashes of email addresses and phone numbers are pseudonymous rather than reliably anonymous. Both identifier types can come from constrained or enumerable input spaces. A service receiving a full hash or sufficiently long prefix can hash candidate identifiers and compare the results, potentially recovering or narrowing down the original value. Query metadata, including IP address, timing, and repeated checks, can also support profiling.
The password workflow separately specifies the established five-character SHA-1 prefix model used by the Pwned Passwords range API. However, the Skill does not establish an equivalent verified k-anonymity protocol for email and phone lookups. Its broad instruction may therefore cause an implementation to use an incompatible API, disclose more identifier material than intended, or fall back to submitting plaintext identifiers despite the stated privacy guarantee.
Attack Path
- A user supplies an email address or phone number for a breach check.
- The Skill hashes the identifier according to its workflow.
- The agent selects an unspecified service under the permitted
or equivalentclause. - The hash, hash prefix, and asso ...[truncated 968 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace
or equivalentwith an explicit allowlist of reviewed HTTPS endpoints and exact API versions. - Document the precise request format and privacy properties for each supported data type.
- Restrict the Pwned Passwords workflow to its documented range endpoint, sending only the first five hexadecimal characters of the SHA-1 password hash.
- Do not represent email or phone lookup as k-anonymous unless the selected service provides a specifically verified protocol for those identifiers.
- If a supported account-breach API requires a plaintext email address or phone number, obtain explicit user consent before transmission and clearly disclose the destination, data sent, purpose, and retention implications.
- Reject unapproved endpoints rather than selecting arbitrary “equivalent” services.
- Require TLS certificate validation, bounded timeouts, response-size limits, rate limiting, and strict response-schema validation.
- Avoid logging raw identifiers, complete hashes, request URLs containing sensitive values, or plaintext credentials.
- Separate password checking from account-identifier checking so the privacy guarantees of one protocol are not incorrectly applied to the other.
- Replace
