Hallo,
fast jeder von Euch hat wohl mitlerweile von den Remote exploits in bash [CVE-2014-(6271,6277,7169)] gehört oder gelesen und hoffentlich sein NAS auf die FW-Version 4.1.1 Boild 20140927aktualisiert.
Was jedoch wenige wissen ist, dass auch in Optware eine Version von Bash enthalten sein kann. Diese wird jedoch nicht mit dem FW-Update aktualisiert und stellt somit ein Sicherheitsrisiko für alle Optware-Nutzer dar.
Ein Update mit ipkg bringt dann auch eine neue Version 3.2.52-1 auf das NAS,
# ipkg updateDownloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable//PackagesDownloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/Packages.gzInflating http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/Packages.gzUpdated list of available packages in /opt/lib/ipkg/lists/cs08q1armelSuccessfully terminated.# ipkg upgradeUpgrading bash on root from 3.2.49-1 to 3.2.52-1...Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/bash_3.2.52-1_arm.ipkConfiguring bashSuccessfully terminated.
allerdings ist schon die Versionsabfrage ernüchternd.
# ipkg list_installed | grep bashbash - 3.2.52-1 - A bourne style shell# /opt/bin/bash --versionGNU bash, version 3.2.49(1)-release (arm-none-linux-gnueabi)Copyright (C) 2007 Free Software Foundation, Inc.
Ein Test mit dem Tool von hier https://github.com/hannob/bashcheck ergibt dann auch folgendes
# ./bashcheck/opt/bin/bash --version | head -n 1GNU bash, version 3.2.49(1)-release (arm-none-linux-gnueabi)Vulnerable to CVE-2014-6271 (original shellshock)Vulnerable to CVE-2014-7169 (taviso bug)./bashcheck: line 23: 16922 Segmentation fault bash -c "true $(printf '<<EOF %.0s' {1..79})" 2> /dev/nullVulnerable to CVE-2014-7186 (redir_stack bug)Test for CVE-2014-7187 not reliable without address sanitizerVariable function parser still active, likely vulnerable to yet unknown parser bugs like CVE-2014-6277 (lcamtuf bug)
Um die Sicherheitslücke dennoch zu schliessen, gibt es mehrere Möglichkeiten:
1. Bash in Optware deinstallieren (verschiedene Pakete benötigen jedoch die Bash in Optware und funktionieren nicht mehr)
2. Wer die Firmware schon aktualisiert hat, kann die dort vorhandene Bash nach Optware verlinken
3. Die interessanteste Variante ist, Bash aus dem Upstream selbst zu kompilieren. Das hat den Vorteil, dass man die aktuellste Version mit allen Patches zur Verfügung hat.
Folgende Anleitung ist nun für alle die sich zutrauen, die Upstream-Version der Bash für Optware selbst zu kompilieren. Hierzu verwende ich im Beispiel die Version 4.3 Patchlevel 30:
Als Grundlage wird optware-devel benötigt. Dieses Meta-Paket enthält alles was zum Kompilieren auf dem NAS benötigt wird.
Zur Vereinfachung verwende ich als Arbeitsverzeichnis /mnt/HDA_ROOT/update, da dies auf allen NAS vorhanden sein sollte.
cd /mnt/HDA_ROOT/updatemkdir -p tmp/bash/patchescd tmp/bash/patcheswget -r -l1 -nd -np -A 'bash43-0??' http://ftp.gnu.org/gnu/bash/bash-4.3-patches/cd ..wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gztar xzf bash-4.3.tar.gzcd bash-4.3for patch in 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 ; do patch -p 0 < ../patches/bash43-$patch; done./configure --prefix=/opt --without-bash-malloc -with-curses --enable-readline --enable-history --enable-bang-historymakemake DESTDIR="/" install-stripcd /mnt/HDA_ROOT/updaterm -rf tmp
Voila - wir haben nun eine aktuelle Bash in /opt/bin (hier als Beispiel auf einer TS-412)
/opt/bin/bash --version | head -n 1
# GNU bash, version 4.03.30(1)-release (armv5tel-unknown-linux-gnueabi)
wget --no-check-certificate https://raw.githubusercontent.com/hannob/bashcheck/master/bashcheck -O bashcheck.sh
chmod a+x ./bashcheck.sh
./bashcheck.sh /opt/bin/bash
Testing /opt/bin/bash ...
Bash version 4.03.30(1)-release
Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Not vulnerable to CVE-2014-6278 (lcamtuf bug #2)
Alles anzeigen
Edit:
03.11.2014 - Anleitung zum Kompilieren auf Patchlevel 30 aktualisiert / zugehörigen Test mit aktuellem bashcheck aktualisiert