
Una vulnerabilità può consentire a un attaccante di indovinare il token segreto generato automaticamente per la modalità di sviluppo.
Una vulnerabilità può consentire a un attaccante di indovinare il token segreto generato automaticamente per la modalità di sviluppo.
Ruby-on-Rails quando è in esecuzione in modalità di sviluppo. In modalità di sviluppo, è possibile per un attaccante indovinare la chiave usata per proteggere le sessioni.
Rails usa 3 ambienti (development,test,production), quando un'applicazione usa la modalità di sviluppo sei in grado di indovinare il token segreto e decifrare la sessione criptata.
La chiave usata per proteggere la sessione deriva dal nome dell'applicazione.
Esempio:
rails new Jakom
Jakom: nome dell'applicazione.
In questo modo possiamo indovinare che la chiave è l'output del metodo di generazione:
PKDF2_HMAC_SHA1[ MD5 [ APPNAME + "::Application" ] , salt: "authenticated encrypted cookie" , iterations: 1000 , key's length: 32 ]
Come possiamo vedere qui:
key = pbkdf2_hmac("sha1", md5_name.encode("utf-8"), "authenticated encrypted cookie".encode("utf-8"), 1000, 32)
In Rails, le sessioni sono criptate con AES-265-GCM, se hai la chiave puoi decifrare/criptare le sessioni.
L'ultima cosa di cui avrai bisogno è il formato della sessione:
BASE64 [ DATA ] -- BASE64 [ IV ] -- BASE64 [ AUTH_TAG ]
Come possiamo vedere qui:
data = binascii.hexlify(base64.b64decode(base64_data.split("--")[0])).decode("utf-8")
iv = binascii.hexlify(base64.b64decode(base64_data.split("--")[1])).decode("utf-8")
tag = binascii.hexlify(base64.b64decode(base64_data.split("--")[2])).decode("utf-8")
La prima parte del cookie di sessione è il dato criptato, la seconda parte è l'IV, la terza parte è il tag GCM (Authentication Tag).
Con queste informazioni possiamo decifrare direttamente le nostre sessioni:

