Algorithm Confusion
Last updated
Last updated
Algorithm Confusion Attack: using an unexpected algorithm to sign the token.
Symmetric algorithms use the same key to both sign and verify the token, whereas asymmetric algorithms use a key pair, i.e., a private key to sign the token and a public key to verify it.
Vulnerabilities arise due to flawed implementation of JWT libraries.
Obtain the server's public key.
This might be done through conventional endpoints such as /jwks.json
or /well-known/jwks.json
.
Convert it to a suitable format.
The exposed keys (JWK format) must be identical with the server's keys.
Create a malicious JWT with a modified payload and the alg
set to HS256
.
Sign the token with HS256
using the public key as the secret.
Goal: Obtain the key via a standard endpoint, use it to sign a modified session token to access
/admin
and deletecarlos
. The server stores the key in aX.509
PEM file.
The above command is using the provided token to calculate one or more potential n
values. For each potential value, the script outputs:
A base64-encoded PEM key in both X.509
and PKCS1
format.
A forged JWT signed using each of these keys.
To identify the correct key we need to try both and see which is accepted by the server.
Goal: Obtain the key via a standard endpoint, use it to sign a modified session token to access
/admin
and deletecarlos
. The server stores the key in aX.509
PEM file.
If no exposed public keys are available, we can derive one from a pair of existing JWTs using .