> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jaspervanzeir.be/llms.txt
> Use this file to discover all available pages before exploring further.

# Insecure Design

> Lesnotities over client-side trust, cookies, voorspelbare tokens, outdated components en CORS.

<Note>
  In dit onderdeel ging het over applicaties die te veel vertrouwen leggen bij client-side waarden of verouderde componenten. Een belangrijk onderscheid uit de les: encoding maakt data leesbaar in een ander formaat, maar is geen encryptie.
</Note>

## In een oogopslag

| Onderwerp                | Concept                                                                   |
| ------------------------ | ------------------------------------------------------------------------- |
| Cookies decoderen        | Waarden in cookies kunnen BASE64, hex of dubbel encoded zijn              |
| Cookie/role manipulatie  | Rollen of flags zoals `role=user` of `admin=false` staan soms client-side |
| Meaningful tokens        | Een token kan na decoding leesbare velden bevatten                        |
| Voorspelbare session IDs | Session IDs kunnen sequential, time-based of zwak random zijn             |
| Horizontal escalation    | Client-side IDs kunnen naar data van een andere gebruiker wijzen          |
| Outdated components      | Oude versies kunnen bekende CVE's hebben                                  |
| CORS misconfiguratie     | Foute `Origin`-afhandeling kan cross-origin data lekken                   |

## Technieken in detail

<AccordionGroup>
  <Accordion title="Cookies inspecteren en decoderen" icon="cookie">
    Gevoelige informatie kan in cookies terechtkomen.

    * Relevante plekken: **Application -> Cookies** in DevTools, of `Set-Cookie` in een HTTP-response
    * BASE64 eindigt vaak op `=` of `==`
    * ASCII-hex bevat alleen `0-9a-f` en heeft meestal een even lengte
    * Soms is het resultaat na een eerste decode-stap opnieuw encoded

    ```powershell theme={null}
    curl.exe -i http://<target>/example-cookie
    echo "UzJWNU1Ub..." | base64 -d
    ```

    <Warning>
      Encoding is geen beveiliging. Wie de cookie kan lezen, kan de inhoud vaak ook decoderen.
    </Warning>
  </Accordion>

  <Accordion title="Cookie- en rolewaarden" icon="user-gear">
    Sommige applicaties vertrouwen op rollen of flags die volledig client-side worden bijgehouden.

    Voorbeelden die in oefeningen kunnen opduiken:

    * `role=user`
    * `admin=false`
    * `isAdmin=0`
    * `?role=admin`

    ```powershell theme={null}
    curl.exe -H "Cookie: role=admin" http://<target>/example-role
    ```
  </Accordion>

  <Accordion title="Meaningful tokens ontleden" icon="key">
    Een hex- of BASE64-token kan soms naar leesbare velden decoderen.

    ```text theme={null}
    757365723d...
    user=KoenK;app=admin;date=01/05/26
    ```

    Typische onderdelen:

    * username, user ID of e-mailadres
    * rol, groep of applicatierechten
    * oplopend nummer
    * IP-adres of datum
    * hash gecombineerd met leesbare velden

    Bij zwakke tokenformats kan een applicatie zelf een bruikbaar formaat tonen wanneer ze een nieuw account of nieuwe sessie aanmaakt.
  </Accordion>

  <Accordion title="Voorspelbare session IDs" icon="dice">
    Bij sessies is randomness belangrijk. In de les kwamen meerdere zwakke patronen aan bod.

    | Patroon        | Signaal                                     | Gevolg                                              |
    | -------------- | ------------------------------------------- | --------------------------------------------------- |
    | Sequential     | telkens +1                                  | vorige of volgende waarde ligt dicht bij de huidige |
    | Time-based     | bevat timestamp                             | de waarde hangt af van tijd                         |
    | Zwakke formule | wiskundig verband, bijvoorbeeld `sin(seed)` | kleine seed-ruimte kan voorspelbaar zijn            |
    | Zwakke random  | vaste posities blijven gelijk               | Burp Sequencer kan patronen zichtbaar maken         |

    ```powershell theme={null}
    curl.exe -H "Cookie: SessionID=<geldige_waarde>" http://<target>/example-session
    ```

    <Tip>
      Als een response de cookie opnieuw leegmaakt, is het verschil tussen request-cookie en response-cookie belangrijk om te bekijken in Burp of curl.
    </Tip>
  </Accordion>

  <Accordion title="Horizontal privilege escalation" icon="users">
    Horizontal escalation betekent dat een gebruiker data of acties van een andere gebruiker kan bereiken zonder een hogere rol te hebben.

    Veelvoorkomende client-side signalen:

    * basket ID
    * order ID
    * profile ID
    * user ID in een request body
    * resource-ID in een URL

    Het concept draait rond de koppeling tussen identiteit en resource. Die koppeling hoort server-side gecontroleerd te worden.
  </Accordion>

  <Accordion title="Vulnerable and outdated components" icon="box-archive">
    Verouderde libraries, plugins of CMS-versies kunnen bekende kwetsbaarheden bevatten.

    Bronnen voor versiesignalen:

    * `<meta name="generator">`
    * HTTP headers
    * Wappalyzer
    * JavaScript- of CSS-bestandsnamen
    * WordPress REST endpoints zoals `/wp-json/wp/v2/users`
    * directory listing onder `/wp-content/`

    Bestanden zoals `.env`, `wp-config.php.bak`, `wp-config.php~`, `db.sql` en `backup.zip` waren voorbeelden van gevoelige exposed files.
  </Accordion>

  <Accordion title="CORS misconfiguratie" icon="globe">
    CORS bepaalt welke origins browserdata mogen opvragen. Een foutieve configuratie kan gevoelige data cross-origin beschikbaar maken.

    ```http theme={null}
    GET /sensitive-data HTTP/1.1
    Host: vulnerable-website.com
    Origin: https://external-site.example
    Cookie: sessionid=...
    ```

    Een belangrijk signaal is een response die de externe origin terugkaatst in combinatie met:

    ```http theme={null}
    Access-Control-Allow-Credentials: true
    ```

    | Variant          | Signaal                                |
    | ---------------- | -------------------------------------- |
    | Reflected origin | server kaatst elke `Origin` terug      |
    | Modified origin  | prefix/suffix wordt te breed vertrouwd |
    | Wildcard `*`     | `Access-Control-Allow-Origin: *`       |
    | Subdomain trust  | te ruim vertrouwen in `*.domain.com`   |
    | Null origin      | `Origin: null` via sandboxed context   |
  </Accordion>
</AccordionGroup>

## Encoding herkennen

| Type           | Ziet eruit als                     | Decode                   |
| -------------- | ---------------------------------- | ------------------------ |
| BASE64         | `A-Za-z0-9+/`, eindigt vaak op `=` | `base64 -d` of CyberChef |
| ASCII-hex      | alleen `0-9a-f`, even lengte       | hex naar tekst           |
| URL encoding   | `%3a`, `%2f`, `%20`                | URL-decode               |
| HTML entities  | `&colon;`, `&#58;`, `&#x3a;`       | HTML-decode              |
| Unicode escape | `\u003a`                           | Unicode-decode           |

<Tip>
  Burp Decoder en CyberChef Magic waren handige hulpmiddelen om encoded waarden sneller te herkennen.
</Tip>

## Handige parameters

### curl

| Parameter                             | Wat doet het?                       | Handig wanneer                                     |
| ------------------------------------- | ----------------------------------- | -------------------------------------------------- |
| `-i`                                  | Toont headers en body.              | Cookies, CORS headers en responseverschillen zien. |
| `-H "Cookie: role=admin"`             | Stuurt een aangepaste cookieheader. | Client-side role trust testen.                     |
| `-b "session=..."`                    | Stuurt cookie-data mee.             | Een bestaande sessie herhalen.                     |
| `-H "Origin: https://evil.example"`   | Zet een Origin-header.              | CORS gedrag controleren.                           |
| `-H "Content-Type: application/json"` | Zet JSON content type.              | API bodies testen.                                 |
| `-d '{"id":2}'`                       | Stuurt POST-data mee.               | Client-side IDs of roles in bodies testen.         |
| `-v`                                  | Toont extra requestdetails.         | Redirects, TLS en headergedrag debuggen.           |

### WPScan

| Parameter                       | Wat doet het?                                            | Handig wanneer                           |
| ------------------------------- | -------------------------------------------------------- | ---------------------------------------- |
| `--url https://site`            | Zet de WordPress target.                                 | Basis voor elke WPScan-run.              |
| `-e vp,vt,u`                    | Enumereert kwetsbare plugins, kwetsbare themes en users. | Snelle WordPress sanity check.           |
| `--plugins-detection mixed`     | Combineert passieve en agressievere plugin-detectie.     | Meer pluginresultaten nodig.             |
| `--api-token TOKEN`             | Haalt vulnerability data op via WPScan API.              | CVE-info bij gevonden plugins of themes. |
| `--random-user-agent`           | Wisselt User-Agent.                                      | Simpele blocks of filters omzeilen.      |
| `--proxy http://127.0.0.1:8080` | Stuurt WPScan via proxy.                                 | Requests in Burp bekijken.               |

## Patronen uit de les

<Steps>
  <Step title="Cookie met rare waarde">
    Mogelijk encoded data, bijvoorbeeld BASE64 of hex.
  </Step>

  <Step title="Role of admin in cookie">
    Mogelijk client-side trust in autorisatie-informatie.
  </Step>

  <Step title="Session ID verandert voorspelbaar">
    Mogelijk zwakke randomness of een patroon in de sessiewaarde.
  </Step>

  <Step title="Functie toont data per ID">
    Mogelijk horizontale autorisatiebug als de server de eigenaar niet controleert.
  </Step>

  <Step title="Herkenbare CMS- of libraryversie">
    Mogelijke link met bekende CVE's of exposed configuratiebestanden.
  </Step>

  <Step title="Cross-origin request">
    Mogelijke CORS-misconfiguratie bij reflected origins en credentials.
  </Step>
</Steps>

## Tools

<CardGroup cols={3}>
  <Card title="Browser DevTools" icon="code" href="https://firefox-source-docs.mozilla.org/devtools-user/">
    Referentie voor cookies, storage, network requests en response headers.
  </Card>

  <Card title="curl" icon="terminal" href="https://curl.se/docs/manpage.html">
    Terminaltool voor cookies, headers en handmatige HTTP-requests.
  </Card>

  <Card title="Burp Suite" icon="shield" href="https://portswigger.net/burp">
    Proxytool voor HTTP history, Decoder, Sequencer, Repeater en Intruder.
  </Card>

  <Card title="CyberChef" icon="utensils" href="https://gchq.github.io/CyberChef/">
    Tool voor BASE64, hex, URL encoding, HTML entities en Magic.
  </Card>

  <Card title="WPScan" icon="wordpress" href="https://wpscan.com/wordpress-security-scanner">
    Scanner voor WordPress-versies, plugins, users en bekende kwetsbaarheden.
  </Card>

  <Card title="CVE" icon="bug" href="https://www.cve.org/">
    Referentie voor bekende kwetsbaarheden in softwareversies.
  </Card>
</CardGroup>
