CVE-2016-10555
Forgeable Public/Private Tokens in jwt-simple
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
NVD Score used
6.5
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.
- Record
CVE-2016-10555- CVSS 3.0
- 6.5 Medium
CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N - CVSS 2.0
- 4.0 Medium
AV:N/AC:L/Au:S/C:N/I:P/A:N - Weakness
- CWE-20, CWE-310
- Updated
- 2026-11-02
CVE List No score
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.
- Record
CVE-2016-10555- Weakness
- CWE-20
- Updated
- 2026-11-02
EUVDEUVD-2018-0779 No score
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.
- Record
EUVD-2018-0779- Updated
- 2026-11-03
GitHub AdvisoriesGHSA-vgrx-w6rg-8fqf No score
Forgeable Public/Private Tokens in jwt-simple
Affected versions of the jwt-simple package allow users to select what algorithm the server will use to verify a provided JWT. A malicious actor can use this behaviour to arbitrarily modify the contents of a JWT while still passing verification. For the common use case of the JWT, the end result is a complete authentication bypass with minimal effort.
Recommendation
Update to version 0.3.1 or later.
Additionally, be sure to always specify an algorithm in calls to .decode().
- Record
GHSA-vgrx-w6rg-8fqf- Weakness
- CWE-20
- Updated
- 2026-11-02
OSV
6.5
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.
- Record
CVE-2016-10555- CVSS 3.0
- 6.5 Medium
CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
OSVGHSA-vgrx-w6rg-8fqf No score
Forgeable Public/Private Tokens in jwt-simple
Affected versions of the jwt-simple package allow users to select what algorithm the server will use to verify a provided JWT. A malicious actor can use this behaviour to arbitrarily modify the contents of a JWT while still passing verification. For the common use case of the JWT, the end result is a complete authentication bypass with minimal effort.
Recommendation
Update to version 0.3.1 or later.
Additionally, be sure to always specify an algorithm in calls to .decode().
- Record
GHSA-vgrx-w6rg-8fqf- Weakness
- CWE-20
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
jwt-simplenpm |
before 0.3.1 | 0.3.1 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | CircuitSoul/poc-cve-2016-10555 | 2021-06-14 |
| PoC in GitHub | scent2d/PoC-CVE-2016-10555 | 2022-01-02 |
| PoC in GitHub | z-bool/Venom-JWT | 2025-01-27 |
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV, PoC in GitHub |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2016-10555 is a medium vulnerability (CVSS 6.5) in Jwt-simple Project Jwt-simple, published May 31, 2018. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 4.82%, the 92nd percentile. Fixed in jwt-simple 0.3.1.
References
nodesecurity.io/advisories/87
github.com/hokaccha/node-jwt-simple/pull/14
auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries
github.com/hokaccha/node-jwt-simple/pull/16
nvd.nist.gov/vuln/detail/CVE-2016-10555
github.com/hokaccha/node-jwt-simple/commit/957957cfa44474049b4603b293569588ee9ffd97
npmjs.com/advisories/87
github.com/advisories/GHSA-vgrx-w6rg-8fqf