CVE-2016-10555

MEDIUM

jwt-simple < 0.3.0 - Unauthenticated Algorithm Substitution via jwt.decode()

Title source: llm
STIX 2.1

Exploitation Summary

EIP tracks 3 public exploits for CVE-2016-10555. PoCs published by z-bool, CircuitSoul, scent2d.

AI-analyzed exploit summary This repository contains a Go-based tool for testing and exploiting various JWT vulnerabilities, including CVE-2020-28042 (empty signature attack). It supports multiple attack modes such as modifying the algorithm to 'none', signature validation bypass, and key injection.

Description

Since "algorithm" isn't enforced in jwt.decode()in jwt-simple 0.3.0 and earlier, a malicious user could choose what algorithm is sent sent to the server. If the server is expecting RSA but is sent HMAC-SHA with RSA's public key, the server will think the public key is actually an HMAC private key. This could be used to forge any data an attacker wants.

Exploits (3)

nomisec WORKING POC 282 stars
by z-bool · poc
https://github.com/z-bool/Venom-JWT

This repository contains a Go-based tool for testing and exploiting various JWT vulnerabilities, including CVE-2020-28042 (empty signature attack). It supports multiple attack modes such as modifying the algorithm to 'none', signature validation bypass, and key injection.

Classification
Working Poc 95%
Attack Type
Auth Bypass
Complexity
Moderate
Reliability
Reliable
Target: Applications using JWT for authentication
No auth needed
Prerequisites: Valid JWT token from the target application
devstral-2 · analyzed Feb 16, 2026 Full analysis →
nomisec WORKING POC 1 stars
by CircuitSoul · poc
https://github.com/CircuitSoul/poc-cve-2016-10555

This PoC demonstrates CVE-2016-10555 by exploiting a JWT algorithm confusion vulnerability, where the attacker changes the algorithm from RS256 to HS256, causing the backend to use the public key as a symmetric secret for signature verification. The provided Python script generates a malicious JWT token signed with the public key, bypassing authentication.

Classification
Working Poc 95%
Attack Type
Auth Bypass
Complexity
Trivial
Reliability
Reliable
Target: Systems using JWT libraries vulnerable to algorithm confusion (e.g., older versions of jsonwebtoken, PyJWT)
No auth needed
Prerequisites: Access to a public key used by the target system for JWT verification
devstral-2 · analyzed Feb 18, 2026 Full analysis →
nomisec WORKING POC
by scent2d · poc
https://github.com/scent2d/PoC-CVE-2016-10555

This PoC demonstrates an authentication bypass vulnerability (CVE-2016-10555) in JWT token verification by exploiting algorithm confusion. The attacker can forge a token using HS256 with the public key, which the server incorrectly verifies as RS256.

Classification
Working Poc 95%
Attack Type
Auth Bypass
Complexity
Trivial
Reliability
Reliable
Target: Applications using PyJWT with improper algorithm validation
No auth needed
Prerequisites: Access to the public key used by the target application
devstral-2 · analyzed Feb 18, 2026 Full analysis →

References (4)

Core 4
Core References
Third Party Advisory x_refsource_misc
https://nodesecurity.io/advisories/87
Issue Tracking, Third Party Advisory x_refsource_misc
https://github.com/hokaccha/node-jwt-simple/pull/14
Issue Tracking, Third Party Advisory x_refsource_misc
https://github.com/hokaccha/node-jwt-simple/pull/16

Scores

CVSS v3 6.5
EPSS 0.8165
EPSS Percentile 99.2%
Attack Vector NETWORK
CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N

Details

CWE
CWE-310 CWE-20
Status published
Products (2)
jwt-simple_project/jwt-simple < 0.3.0
npm/jwt-simple 0 - 0.3.1npm
Published May 31, 2018
Tracked Since Feb 18, 2026