Inserito da Fabio Cevasco il 2013-03-03
È stata rilevata una vulnerabilità di denial of service e creazione insicura di oggetti nella versione di json inclusa in Ruby. L'identificativo CVE "CVE-2013-0269" è stato assegnato a questa vulnerabilità. Raccomandiamo fortemente di aggiornare Ruby.
Dettagli
Durante il parsing di alcuni documenti JSON, la gemma JSON (inclusa in Ruby) può essere utilizzata per creare dei simboli Ruby su un sistema. Dal momento che i simboli in ruby non sono gestiti tramite garbage collection, ciò può essere usato per provocare un attacco di Denial of Service.
La stessa tecnica può essere usata per creare oggetti in un sistema, in modo che si comportino come oggetti interni. Tali oggetti possono essere utilizzati per aggirare alcuni meccanismi di sicurezza, e come base per attacchi di tipo SQL injection in Ruby on Rails.
Il codice impattato è del tipo:
Dove la variabile `user_input` contiene un documento JSON come questo:
{"json_class":"foo"}
La gemma JSON proverà a cercare una costante chiamata "foo". La ricerca di questa costante creerà un simbolo.
In JSON versione 1.7.x, oggetti con attributi arbitrari possono essere creati utilizzando documenti JSON come questo:
{"json_class":"JSON::GenericObject","foo":"bar"}
Questo documento creerà un'istanza di JSON::GenericObject, con l'attributo "foo" con il valore "bar". Istanziare questi oggetti risulterà in una creazione di simboli arbitrari, e in alcuni casi potrebbe essere usata per aggirare misure di sicurezza.
NOTA BENE: questo comportamento non cambia quando viene usato `JSON.load`. `JSON.load` non dovrebbe mai essere usato per processare input provenienti da sorgenti sconosciute. Se devi processare del codice JSON proveniente da sorgenti sconosciute, usa sempre `JSON.parse`.
Tutti gli utenti che utilizzano una versione di Ruby soggetta a questa vulnerabilità dovrebbero o aggiornare Ruby o la gemma JSON immediatamente, oppure utilizzare uno dei workaround.
Workarounds
Per utenti che non possono aggiornare Ruby o la gemma JSON, cambiate il codice da questo:
A questo:
Se non puoi cambiare l'utilizzo di `JSON.parse` (per esempio se utilizzi una gemma che dipende da `JSON.parse` come multi_json), applica manualmente questa patch:
Versioni soggette alla vulnerabilità
- Tutte le versioni di Ruby 1.9 precedenti a 1.9.3 patchlevel 392
- Tutte le versioni di Ruby 2.0 precedenti a 2.0.0 patchlevel 0
- Tutte le versioni precedenti alla trunk revision 39208
Crediti
Un ringraziamento enorme va alle seguenti persone, per averci notificato in maniera responsabile il problema, e per aver lavorato con il team di Rails per correggerlo:
- Thomas Hollstegge of Zweitag (www.zweitag.de)
- Ben Murphy
Cronologia
- Originariamente pubblicato il giorno 2013-02-22 alle ore 12:00:00 (UTC)