Una vulnerabilità critica in Ruby on Rails potrebbe consentire a un aggressore non autenticato di scrivere file arbitrari su un server caricando un file appositamente creato, se l’applicazione elabora gli upload con ImageMagick. Rails ha divulgato il problema in un avviso di sicurezza e ha rilasciato correzioni nelle versioni 8.1.4.1 e 8.0.5.2.

La vulnerabilità riguarda Active Storage, il componente di Rails per il caricamento dei file. Le applicazioni sono a rischio quando usano ImageMagick per elaborare gli upload, accettano file da utenti non attendibili e dispongono di una policy di sicurezza di ImageMagick che non blocca i coder interessati. Rails osserva che le policy distribuite con Debian e Ubuntu non li bloccano.

Il rischio può andare oltre la scrittura di file. Le applicazioni che usano il servizio Disk di Active Storage salvano i file caricati sul server e un aggressore potrebbe anche riuscire a leggere i file accessibili all’applicazione. Tra questi potrebbero esserci secret_key_base di Rails e le credenziali di altri sistemi, che potrebbero consentire ulteriori compromissioni, tra cui l’esecuzione di codice da remoto o il passaggio a sistemi connessi.

Rails assegna alla vulnerabilità un punteggio di 9,8 su 10 nella scala CVSS. È identificata come GHSA-f3w6-w445-fwh9 e non ha un identificativo CVE. Il problema è stato segnalato tramite HackerOne da RyotaK, ricercatore presso GMO Flatt Security. Rails ha dichiarato di aver ricevuto una segnalazione relativa a una catena di attacco, avvertendo però che potrebbero esistere altri metodi; l’avviso non specifica se la vulnerabilità sia stata sfruttata.

Il percorso vulnerabile viene raggiunto quando Active Storage analizza un upload allegato. Non è necessario generare una variante o un’anteprima e l’applicazione non deve chiamare il metodo analyze. Secondo il commit della correzione, un SVG caricato poteva raggiungere il coder MSL di ImageMagick, che può leggere e scrivere i file indicati nel suo script. Active Storage non limitava i coder di ImageMagick che potevano elaborare un upload, lasciando la policy di ImageMagick del server come unico controllo.

Sono interessate tutte le versioni di Active Storage precedenti alla 8.0.5.2, così come le versioni 8.1 precedenti alla 8.1.4.1. Rails afferma che le serie di release precedenti alla 8.0 non sono supportate e non riceveranno versioni corrette. La configurazione pertinente è config.active_storage.variant_processor: :mini_magick usa ImageMagick, mentre il valore predefinito dipende dall’impostazione load_defaults dell’applicazione. Tale impostazione determina anche quale libreria analizza gli upload.

Le stesse release correggono una vulnerabilità distinta di Active Storage, GHSA-v924-7rp8-4mxh, valutata 8,8 nella scala CVSS. In questo caso, gli upload venivano passati a ImageMagick e FFmpeg con nomi di file temporanei che conservavano le proprie estensioni, consentendo potenzialmente a un aggressore di influenzare il decoder usato per elaborare un file. Rails afferma che le due release correggono complessivamente 21 problemi di sicurezza.

Rails raccomanda caldamente di effettuare l’aggiornamento. Le applicazioni che usano :mini_magick devono inoltre installare mini_magick 5.1 o una versione successiva, altrimenti potrebbero verificarsi errori all’avvio. Le release includono una policy di ImageMagick che blocca MSL, determinati coder in grado di accedere ad altri file o riferimenti, i coder basati su Ghostscript e il delegate gs, oltre all’indirezione @filename.

Gli amministratori dovrebbero verificare che l’applicazione carichi la nuova policy e controllare se una configurazione personalizzata di MiniMagick ne impedisca l’applicazione. La policy integra, ma non sostituisce, quella di ImageMagick del server; pertanto, una regola esistente che consente un coder può prevalere sul nuovo blocco. La policy inclusa non protegge le applicazioni che usano GraphicsMagick.

Se non è possibile effettuare l’aggiornamento, Rails raccomanda di applicare le regole della policy distribuita alla policy di sistema di ImageMagick, bloccando almeno MSL, i coder di Ghostscript e il delegate gs. Per le applicazioni che usano il servizio Disk, Rails consiglia inoltre di modificare secret_key_base e tutti gli altri segreti leggibili dall’applicazione, comprese le credenziali, le password di archiviazione e del database e i token di terze parti. L’avviso non indica un metodo per determinare se un’applicazione sia già stata presa di mira.

Fonti: The Hacker News.