# Unverified signature and token trust

Auth decisions that accept a signature, key, or token claim without verifying it

_Area: Web authentication and account takeover. Seen in 13 disclosed reports; 6 confirmed bounties, median $1,385, range $25-$12,000; latest 2026-10-22. Updated 2026-10-23._

## How it works
An authentication decision rests on a value the attacker controls, but the code never checks the property that makes that value trustworthy. The broken assumption is "this value was produced by someone we trust." A signature is decoded but not verified; a key is trusted because it exists, not because it is secret; a credential is treated as valid because it is syntactically present; a key established earlier is silently replaced by a later message. When the check is missing, anyone who can supply the value becomes the identity it claims.

## Where it shows up
- OAuth/IPC flows that validate an app signature but not the calling package name [E1](https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md)
- Signature keys that are public debug/example keystores shipped in open-source SDKs [E1](https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md)
- JWT handling that decodes claims (email, role) without invoking signature verification [E7](https://bugbountylibrary.com/r/h1%3A2472798.md)
- "Sign in with Google"-style plugins doing token parsing server-side with no verify call [E7](https://bugbountylibrary.com/r/h1%3A2472798.md)
- S3-compatible auth parsers that accept a credential-only Authorization header without validating it [E4](https://bugbountylibrary.com/r/blog%3Ahuntress-com-blog-crushftp-cve-2025-31161-auth-bypass-and-post-exploitation.md)
- Key-loading paths (JWK/JWKS) that skip the empty-key guard applied to sibling paths [E6](https://bugbountylibrary.com/r/ghsa%3AGHSA-pxh4-856f-4h89.md)
- Session handshakes where a key-setter is called on any inbound message before the sender proves it can decrypt [E5](https://bugbountylibrary.com/r/h1%3A423467.md)
- E2EE enrollment that trusts a server-supplied public key without binding it to the local private key [E8](https://bugbountylibrary.com/r/h1%3A1189162.md)

## How to review
Trace every auth decision to the exact verification step. The invariant: the identity used must be derived only after cryptographic verification against a key the attacker cannot obtain, and that key must be bound to the specific caller (package, account, device) and not replaceable by an unauthenticated peer.
- For signatures: is the key secret, or a public/debug keystore? Is the package name also checked? Both must hold [E1](https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md).
- For JWTs: is `verify()` actually called before reading claims, with the algorithm pinned and `none` rejected? [E7](https://bugbountylibrary.com/r/h1%3A2472798.md)
- For key material: does every loading path (string, bytes, JWK, JWKS) enforce the same non-empty/length invariant? [E6](https://bugbountylibrary.com/r/ghsa%3AGHSA-pxh4-856f-4h89.md)
- For S3-style headers: does a syntactically valid but unsigned header short-circuit auth? [E4](https://bugbountylibrary.com/r/blog%3Ahuntress-com-blog-crushftp-cve-2025-31161-auth-bypass-and-post-exploitation.md)
- For live handshakes: is the key-setter reachable before the peer proves possession of the prior key? [E5](https://bugbountylibrary.com/r/h1%3A423467.md)
- For E2EE: does enrollment test-encrypt/decrypt to bind private to stored public key? [E8](https://bugbountylibrary.com/r/h1%3A1189162.md)
- Grep SDK source for hardcoded key constants and example keystores.

## Variants seen
- Signature trusted, caller identity not bound [E1](https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md)
- Token claims trusted with no signature check [E7](https://bugbountylibrary.com/r/h1%3A2472798.md)
- Credential-only header accepted as authenticated [E4](https://bugbountylibrary.com/r/blog%3Ahuntress-com-blog-crushftp-cve-2025-31161-auth-bypass-and-post-exploitation.md)
- Empty HMAC key accepted via JWK path [E6](https://bugbountylibrary.com/r/ghsa%3AGHSA-pxh4-856f-4h89.md)
- Established key overridden by unauthenticated peer message [E5](https://bugbountylibrary.com/r/h1%3A423467.md)
- Server-supplied public key trusted without binding to private key [E8](https://bugbountylibrary.com/r/h1%3A1189162.md)

## Impact and severity
Led to full account takeover of Instagram users via malicious apps [E1](https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md), login as any known-email user or arbitrary account creation [E7](https://bugbountylibrary.com/r/h1%3A2472798.md), admin access to CrushFTP [E4](https://bugbountylibrary.com/r/blog%3Ahuntress-com-blog-crushftp-cve-2025-31161-auth-bypass-and-post-exploitation.md), and token forgery via empty-key JWKs [E6](https://bugbountylibrary.com/r/ghsa%3AGHSA-pxh4-856f-4h89.md). High to critical; worse when the trusted key is public [E1](https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md), the endpoint is unauthenticated [E7](https://bugbountylibrary.com/r/h1%3A2472798.md), the bypass yields admin [E4](https://bugbountylibrary.com/r/blog%3Ahuntress-com-blog-crushftp-cve-2025-31161-auth-bypass-and-post-exploitation.md), or the key can be swapped mid-session [E5](https://bugbountylibrary.com/r/h1%3A423467.md).

## Evidence
- E1: https://bugbountylibrary.com/r/blog%3Avulnano-com-2022-07-react-debugkeystore-key-was-trusted-by-html.md
- E2: https://bugbountylibrary.com/r/blog%3Ablog-sonarsource-com-nodebb-remote-code-execution-with-one-shot.md
- E3: https://bugbountylibrary.com/r/h1%3A2208860.md
- E4: https://bugbountylibrary.com/r/blog%3Ahuntress-com-blog-crushftp-cve-2025-31161-auth-bypass-and-post-exploitation.md
- E5: https://bugbountylibrary.com/r/h1%3A423467.md
- E6: https://bugbountylibrary.com/r/ghsa%3AGHSA-pxh4-856f-4h89.md
- E7: https://bugbountylibrary.com/r/h1%3A2472798.md
- E8: https://bugbountylibrary.com/r/h1%3A1189162.md
