CVE-2018-16396: „taint“-Markierungen werden von Array#pack und String#unpack nicht mit allen Direktiven richtig verarbeitet

Die Methoden Array#pack und String#unpack geben die „taint“-Markierung der ursprünglichen Daten nicht bei allen Formatierungsdirektiven an den Rückgabewert weiter. Dieser Sicherheitslücke ist die CVE-Nummer CVE-2018-16396 zugewiesen worden.

Details

Die Methode Array#pack konvertiert den Inhalt des Empfängers nach Maßgabe der übergebenen Formatierungsdirektiven in einen String. Wenn der Empfänger dabei Objekte enthält, die als „tainted“ markiert wurden, so sollte auch der zurückgegebene String „tainted“ sein. Die umgekehrt funktionierende Methode String#unpack, die den Empfänger in ein Array konvertiert, sollte ebenfalls ihre „taint“-Markierung an die im zurückgegebenen Array enthaltenen Objekte weitergeben. Bei Einsatz der Formatierungsdirektiven B, b, H und h wurde jedoch in beiden Fällen die „taint“-Markierung nicht weitergegeben. Wenn demnach ein Skript unbekannte Eingaben von Array#pack und/oder String#unpack verarbeiten lässt und die Rückgabewerte auf Richtigkeit im Hinblick auf die „taint“-Markierung prüft, kann diese Prüfung fehlschlagen.

Alle Nutzer einer betroffenen Version sollten umgehend aktualisieren.

Betroffene Versionen

  • Ruby 2.3er-Serie: 2.3.7 und früher
  • Ruby 2.4er-Serie: 2.4.4 und früher
  • Ruby 2.5er-Serie: 2.5.1 und früher
  • Ruby 2.6er-Serie: 2.6.0-preview2 und früher
  • Trunk vor Revision r65125

Danksagung

Dank an Chris Seaton, der diesen Fehler meldete.

Historie

  • Erstmals veröffentlicht am 2018-10-17 14:00:00 (UTC)