¿Hay alguna información sobre el impacto de CVE-2016-1907 (openSSH)?

3

Acabo de ver la notificación sobre CVE-2016-1907 esta mañana:

  

La función ssh_packet_read_poll2 en packet.c en OpenSSH antes de 7.1p2   permite a los atacantes remotos causar una denegación de servicio (fuera de los límites)   lectura y bloqueo de la aplicación) a través del tráfico de red creado.

No puedo encontrar ninguna otra información sobre el tema más allá de la nota general en las notas de la versión :

  

SEGURIDAD: corrige un acceso de lectura fuera del límite en el manejo de paquetes
  código. Reportado por Ben Hawkes.

Chromium no me deja ver el cambios en el depósito de origen (certificado caducado más HSTS), así que no he intentado buscar el parche todavía.

¿Alguien ha publicado algún análisis de este defecto? Como mínimo, me gustaría saber si afecta al cliente, al servidor o a ambos (por ejemplo, si alguien sin una cuenta podría hacer un servidor arbitrario).

    
pregunta drewbenn 25.01.2016 - 20:31
fuente

1 respuesta

3

Esta es una buena pregunta. Investigué este problema hace dos semanas porque estaba fuera. Este error apareció por primera vez en openssh-6.8 en refactoring commit . Básicamente, el problema es que se reemplazó una función que llamó a exit() y la función solo devolvió un valor de error.

if (state->packlen < 1 + 4 ||
    state->packlen > PACKET_MAX_SIZE) {
#ifdef PACKET_DEBUG
    sshbuf_dump(state->input, stderr);
#endif
    logit("Bad packet length %u.", state->packlen);
    if ((r = sshpkt_disconnect(ssh, "Packet corrupt")) != 0)
        return r;
    return SSH_ERR_CONN_CORRUPT; /* <-- this line was added */
}
sshbuf_reset(state->incoming_packet);

Como puede ver en el contexto de versión actual (instantánea arriba) ), esta rama maneja las longitudes de paquetes incorrectos (menores a 5 B y mayores que PACKET_MAX_SIZE ). Esta condición arrojó un mensaje de error, desconectó el paquete y debería tener retorno. Pero el sshpkt_disconnect() podría haber fallado y, en este punto, la ejecución del código continuaría con la función, manejando los búferes recibidos del otro par como válidos, sin verificaciones adicionales. El código se utiliza tanto en el servidor como en el cliente.

Como puede ver, la gravedad de CVSS es bastante inferior a la de otro CVE publicado con la misma versión. Para explotar con éxito este error, tendríamos que diseñar el ajuste de paquetes por encima de la condición (longitud incorrecta), asegurarte de que el sshpkt_disconnect() falla (¿cerrar el socket?) Y esperar ciegamente que sucedan las cosas malas. La superficie de ataque es mucho más limitada y menos investigada que CVE-2016-0778, donde incluso hubo pruebas de concepto con un servidor diseñado.

También tenga en cuenta que openSSH implementa la separación de privilegios en el servidor, lo que básicamente le brindaría la posible ejecución de código en el elemento secundario limitado en el entorno limitado. Por otro lado, podría usar la ejecución de código en el lado del cliente utilizando un servidor malicioso diseñado, pero por el precio de la desconexión del cliente. El usuario probablemente sea sospechoso, pero no los scripts ( autossh , rsync jobs y similares).

    
respondido por el Jakuje 25.01.2016 - 22:50
fuente

Lea otras preguntas en las etiquetas