La vulnerabilidad Shellshock se encontró a fines de 2014 (para ser precisos, el impacto se publicó en CVE-2014-6271 el 24 de septiembre de 2014). Posteriormente se lanzó una actualización en bash versión 4.1.2-15 con una solución para la vulnerabilidad Shellshock. Bueno, todo el mundo actualizó bash y aseguró su caparazón de Shellshock, pero sorprendentemente, muchas máquinas en mi oficina no se actualizaron por cualquier motivo. La parte aterradora es que pocas de esas máquinas con shell vulnerable albergaban muchos servicios en Internet. Según varios blogs en Internet, Shellshock exploit permite a un atacante ejecutar de forma remota un comando malicioso en bash a través de secuencias de comandos CGI.
(I know this tutorial is pretty late, but there are many who are not aware of it and still using vulnerable bash on their public servers)
Lo primero es comprobar si tu BASH es vulnerable a Shellshock o no . Por lo tanto, cualquier versión de bash anterior a la 4.1.2 seguramente tendrá esta vulnerabilidad.
$ bash --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
(o)
$ rpm -qa|grep bash bash-completion-1.3-7.el5 bash-3.2-32.el5_9.1
Ahora que conoce la versión, ejecute los siguientes comandos para confirmar que es vulnerable a Shellshock.
$ env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock" vulnerable If you see the word vulnerable above, you are vulnerable to shellshock
Salta al final de esta publicación. En caso de que desee saber cómo funciona ShellShock, lea detenidamente.
Comprender las variables de exportación en SHELL :
Como dice el resultado anterior, su SHELL es vulnerable, pero veamos cómo funciona.
Normalmente, puede establecer una variable de entorno y usarla en un shell. Por ejemplo, como se muestra a continuación:
$ test=1 $ echo $test 1
Pero no puede usar directamente la variable env 'prueba' en un nuevo shell bash . Compruébalo:
$ test=1 $ echo $test 1 $ bash $ echo $test
La salida está en blanco. El motivo es que una variable de entorno está disponible para el acceso solo en el mismo shell. Pero si exporta una variable de entorno, también estará disponible para un nuevo shell bash. He aquí un ejemplo:
$ var="testing" $ export var $ bash $ echo $var testing
Ahora puede ver que la variable '$var' se configuró y exportó en un shell y se accedió desde otro shell. Por supuesto, puede detener la exportación en cualquier momento usando el siguiente comando.
$ export -n var $ bash $ echo $var
Del mismo modo, puede crear funciones y exportarlas en un shell y acceder a la función exportada desde otro shell. Veamos ese ejemplo también.
$ fnc() { echo "testing"; } $ fnc testing $ bash $ fnc bash: fnc: command not found
En el resultado anterior, verá 'bash:fnc:comando no encontrado ‘porque, la fnc no es una función exportada. Por lo tanto, no puede llamarlo desde otro shell.
Exportemos ‘fnc ' también.
$ export -f fnc $ fnc testing $ bash $ fnc testing
Funciona como se esperaba (desde ‘fnc ‘ fue exportado y está disponible en otro shell).
Exportar una variable o una función establecerá una variable de entorno
$ env | grep -A1 fnc fnc=() { echo "testing" }
Ahora explotación de Shellshock
Con base en los ejemplos anteriores, aprendimos que un nuevo shell bash ingiere la definición de una variable de entorno que comienza con () y la interpreta como una función . Pero la vulnerabilidad aquí es que el nuevo shell ejecutará lo que esté presente en la cita.
Por ejemplo:
Ejecute el siguiente comando:
$ export sse_fnc='() { echo "function shellshock exploit" ; }; echo "Not good"; '
Verifique la variable env para 'sse_fnc':
$ env | grep -A1 sse_fnc sse_fnc=() { echo "function shellshock exploit" ; }; echo "Not good";
Ir a la nueva shell bash:
$ bash Not good
En otras palabras, "La variable exportada sse_fnc
se pasó a la subcapa que se interpretó como una función sse_fnc
pero los comandos finales se ejecutaron (this is bad
) a medida que se generó la subcapa.”
a través de Fixee@StackExchange
¿cómo se puede explotar esta vulnerabilidad?
No creo que nadie pueda explicarlo mejor que este tipo (shellshocker.net). ¡Gracias hombre!
¿Cómo solucionar Shellshock?
Simple, actualice su bash y pruebe el exploit para verificar si la vulnerabilidad ha desaparecido.
$curl https://shellshocker.net/fixbash | sh
El comando anterior descargará automáticamente más de 30 parches y compilará bash desde la fuente. Puede ejecutar regularmente este script para mantener su bash actualizado con los últimos parches.
Una vez que la instalación es exitosa. Verifique la versión de bash como se muestra a continuación:
$bash --version GNU bash, version 4.3.42(1)-release (x86_64-unknown-linux-gnu)
Prueba de vulnerabilidad de Shellshock:
$env x='() { :;}; echo vulnerable' bash -c "echo If you see the word vulnerable above, you are vulnerable to shellshock If you see the word vulnerable above, you are vulnerable to shellshock
De la salida anterior, no imprimió la palabra "vulnerable". ¡Así que mi fiesta está segura!
(o)
$env X='() { (shellshocker.net)=>\' bash -c "echo date"; cat echo; rm ./echo
Si BASH es vulnerable, el comando anterior generará la fecha. De lo contrario, BASH es seguro.