Seleccionar página

Rompiendo el Molde Deteniendo el Código de un Hacker ep. 5 -Vulnerabilidad de Inyección de Comandos en el Shell de Apache Spark

Introducción

Apache Spark es un sistema distribuido de código abierto para el procesamiento de datos a gran escala y el cálculo rápido de propósito general. También es compatible con una amplia gama de herramientas avanzadas, como Spark SQL para SQL y DataFrames, pandas API on Spark para cargas de trabajo de pandas, MLlib para el aprendizaje automático, GraphX para el procesamiento de gráficos y Structured Streaming para el procesamiento de flujos. Sus potentes características, combinadas con el acceso gratuito, hacen que sea ampliamente utilizado en todo el mundo. Como resultado, la vulnerabilidad de inyección de comandos de shell tiene un amplio impacto.

Vulnerabilidad

La vulnerabilidad de inyección de comandos del shell gira en torno a la manipulación de las ACL de la aplicación, que permite a los usuarios/grupos -excluyendo al propietario que inicia la aplicación- acceder a una aplicación. La interfaz de usuario de Apache Spark ofrece la posibilidad de habilitar las ACL a través de la opción de configuración spark.acls.enable. Si las ACLs están habilitadas, Apache spark pasará por el filtro HttpSecurityFilter para verificar los permisos del usuario. En los códigos de HttpSecurityFilter, el nombre de usuario puede ser introducido arbitrariamente y los campos serán concatenados posteriormente. Por lo tanto, un usuario malicioso podría entonces ser capaz de inyectar un trozo de comando de shell separando los caracteres del comando a varios campos de nombre de usuario,. Entonces, después de que los campos sean concatenados en un trozo del comando shell, la función executeAndGetOutput hará que el comando se ejecute.

Versión afectada

Spark Core – Apache<=3.0.3

3.1.1 <= Spark Core – Apache <=3.1.2

3.2.0 <= Spark Core – Apache <=3.2.1

Corrección

Solución oficial: El proveedor ha publicado los parches, y recomendamos a los usuarios que actualicen Apache Spark a la versión 3.1.3, 3.2.2, 3.3.0 o a una versión superior. Por favor, visite:

https://spark.apache.org/downloads.html

Métodos de referencia en GitHub: Podemos solucionar la vulnerabilidad eliminando la llamada a bash en la función ShellBasedGroupsMappingProvider. Por favor, visite:

https://github.com/apache/spark/pull/36315/files

Implementación de la corrección

El IPS de Hillstone puede soportar la detección y protección de esta vulnerabilidad.

Figura 1. Vulnerabilidad de inyección de comandos en Apache Spark detectada por Hillstone IPS

La inteligencia de esta vulnerabilidad está disponible también en Hillstone iSource.

Figura 2. Inteligencia de puntos calientes en Hillstone iSource