summaryrefslogtreecommitdiff
path: root/docs/chapters
diff options
context:
space:
mode:
Diffstat (limited to 'docs/chapters')
-rw-r--r--docs/chapters/jwt-attacks.tex8
1 files changed, 6 insertions, 2 deletions
diff --git a/docs/chapters/jwt-attacks.tex b/docs/chapters/jwt-attacks.tex
index 5a67c4f..cb32afb 100644
--- a/docs/chapters/jwt-attacks.tex
+++ b/docs/chapters/jwt-attacks.tex
@@ -21,7 +21,9 @@ Questo token quindi è passato come header HTTP alla chiave d'autorizzazione.
POST /v1/users/2/ HTTP/2
Host: example.com
Referer: https://example.com
-Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxfQ.jYyRJbb0WImFoUUdcslQQfwnXTHJzne-6tsPd8Hrw0I
+Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
+ eyJ1c2VyX2lkIjoxfQ.
+ jYyRJbb0WImFoUUdcslQQfwnXTHJzne-6tsPd8Hrw0I
[...]
\end{lstlisting}
@@ -51,7 +53,9 @@ HTTP/2 200 OK
\end{lstlisting}
Questo potrebbe essere un bell'attacco, peccato però che tutti (spero) i backend che adoperano l'uso di JWT (spesso anche per autenticazione) usano un payload del tipo:
\begin{lstlisting}
-$ echo "eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjY0NjE1NDcxLCJqdGkiOiIyMGM3Nzk2YTljM2Y0Yjk4YmM3ODdkNDRmNzRiNGE0YyIsInVzZXJfaWQiOjF9" | base64 -d
+$ echo "eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjY0NjE1NDc
+xLCJqdGkiOiIyMGM3Nzk2YTljM2Y0Yjk4YmM3ODdkNDRmNzRiNGE0YyIsInV
+zZXJfaWQiOjF9" | base64 -d
{"token_type":"access","exp":1664615471,"jti":"20c7796a9c3f4b98bc787d44f74b4a4c","user_id":1}
\end{lstlisting}
e da questo, anche se riuscissimo a scoprirne il \textbf{secret} per la verifica, dovremmo far conto sia con la timestamp di scadenza che con l'ID (JTI). Il payload di questo listato è stato generato da un'app realizzata usando dj-rest-auth \cite{DJ-REST-AUTH:1} il quale alla base usa la libreria PyJWT \cite{PYJWT:1}.