Praticamente è possibile eseguire codice da remoto o da locale, semplicemente mediante un assegnamento di variabile "speciale".
Per esempio:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Secondo me però c'è più panico di quello che serva. Un blog famoso (uno fra tanti) ha scritto una serie di castronerie giganti e ora cerco di chiarire, una volta per tutte, qual è l'incidentalità di questo problema.
- Quasi nessun dispositivo embedded usa bash, per il semplice motivo che è grossa e occupa tante risorse. La stragrande maggioranza usano una shell che si chiama ash e che si trova nel pacchetto busybox. Quindi il problema di dover aggiornare tv, router, etc , descritto da attivissimo, è un falso-problema.
- Debian e Ubuntu (che sono fra le distro più usate) usano dash come shell di default (#!/bin/sh), per cui meno soggetti al problema.
- sudo, il pacchetto usato di default su Ubuntu per poter diventare root e/o eseguire comandi come root non è soggetto (di default) al problema, in quanto le variabile d'ambiente sono ripulite (opzione env_reset). Quindi se anche avete in sudoers dei comandi di shell da far eseguire a un altro utente come root, in linea di massima non può sfruttare questa vulnerabilità.
- Praticamente nessuno usa CGI scritte in bash nel 2014! Inoltre il server web non gira con i privilegi di root, per cui l'eventuale attaccante dovrebbe poi trovare un altro modo di diventare root.