I metodi della classe Exception possono bypassare $SAFE

Inserito da Fabio Cevasco il 2011-02-27

Il metodo Exception#to_s può essere usato per bypassare il controllo $SAFE, e ciò rende possibile la modifica di stringhe arbitrarie tramite codice untrusted.

Descrizione dettagliata

Secondo le semantiche della variabile $SAFE, un safe level di 4 è usato per eseguire codice untrusted (come ad esempio un plugin). In questo modo, per i livelli superiori, alcune operazioni sono proibite per prevenire codice untrusted dall'attaccare dati trusted.

Il metodo Exception#to_s si è rivelato problematico in questo ambito. Il metodo può bypassare il meccanismo dei safe level e modificare in maniera distruttiva una stringa untained in modo che diventi tainted. In questo modo, un utente con cattive intenzioni può modificare stringhe untainted arbitrarie, così:

$secret_path = "foo"

proc do
    $SAFE = 4
    Exception.new($secret_path).to_s
    $secret_path.replace "/etc/passwd"
end.call

open($secret_path) do
  ...
end

Versioni soggette a questa vulnerabilità

Fortunatamente questo tipo di attacco non ha effetto per le versioni 1.9.x di Ruby. Le versioni affette sono ristrette alle seguenti:

  • Ruby 1.8.6 patchlevel 420 e tutte le versioni precedenti
  • Ruby 1.8.7 patchlevel 330 e tutte le versioni precedenti
  • Versioni di sviluppo di Ruby 1.8 (1.8.8dev)

Soluzioni

Aggiornamento ad una nuova versione.

Aggiornamenti

Notizie Recenti

Rilasciato Ruby 2.4.2

Siamo lieti di annunciare il rilascio di Ruby 2.4.2. Questa release include alcuni fix di sicurezza.

Inserito da nagachika il 2017-09-14

Ulteriori Notizie...