El servicio ‘pppd‘, desde su versión 2.4.2 hasta la 2.4.8, presenta un fallo en las rutinas que procesan los paquetes EAP (Extensible Authentication Protocol) que podría ser aprovechado por un atacante remoto no autenticado para provocar un desbordamiento de la memoria basada en pila y ejecutar código arbitrario en el sistema afectado.
El Protocolo Punto a Punto (PPP) es un protocolo de la capa de enlace utilizado para establecer conexiones a Internet a través de un módem telefónico, conexiones DSL o de otro tipo. En las distribuciones de Linux más populares se utiliza el software ‘pppd‘ para gestionar estas conexiones, así como la autenticación entre pares utilizando diferentes protocolos, entre ellos EAP (en inglés Extensible Authentication Protocol).
Desde la versión 2.4.2 hasta la 2.4.8 de ‘pppd‘, el componente encargado de procesar los paquetes EAP presentaba un error a la hora de validar el tamaño de la entrada de datos que provoca una corrupción de la memoria que podría dar pie a un atacante a ejecutar código arbitrario.
Las funciones eap_request() y eap_response() presentes en el módulo eap.c, intentan asegurar de manera incorrecta que el tamaño del dato que se recibe (el hostname) no supere el espacio de memoria reservado. Este fallo en la lógica permite realizar la copia de datos de tamaño arbitrario, desbordando la memoria de pila.
Por otro lado, la lógica en la función eap_input() también presenta otro fallo al no verificar correctamente si se ha negociado la autenticación EAP durante la fase de control del protocolo de enlace (en inglés Link Control Protocol). Esto permitiría a un atacante no autenticado enviar paquetes EAP que serán procesados por la función vulnerable ‘eap_input’, a pesar de no haber negociado correctamente la autenticación o no encontrarse disponible el protocolo EAP.
Como veíamos antes, las funciones que procesan los paquetes EAP son vulnerables a un desbordamiento de memoria que permitiría al atacante la ejecución de código. Si además tenemos en cuenta que el proceso ‘pppd‘ se ejecuta habitualmente con permisos elevados (de root o de sistema), un atacante no autenticado podría ejecutar código arbitrario con privilegios de sistema.
La vulnerabilidad ha recibido una puntuación base de 9.3 y se le ha asignado el identificador CVE-2020-8597.
La lista de fabricantes que han confirmado la vulnerabilidad asciende a diez hasta la fecha:
- Cisco
- Debian GNU/Linux
- Fedora Project
- NetBSD
- OpenWRT
- Red Hat, Inc.
- SUSE Linux
- Synology
- TP-LINK
- Ubuntu
Se recomienda instalar los parches y actualizaciones proporcionados por los fabricantes lo antes posible.
Para mayor información sobre la vulnerabilidad descrita consultar los siguientes enlaces:
https://unaaldia.hispasec.com/2020/03/una-vulnerabilidad-critica-de-hace-17-anos-afecta-a-multiples-distribuciones-de-linux.html
https://thehackernews.com/2020/03/ppp-daemon-vulnerability.html
https://gbhackers.com/pppd-vulnerability/