Seguridad

Vulnerabilidad crítica en Oracle WebLogic

En los últimos días se ha hecho pública una vulnerabilidad en Oracle WebLogic que permite a los atacantes tomar control total del sistema afectado sin necesidad de autenticación.

La vulnerabilidad (CVE-2020-14882) descubierta por el investigador @voidfyoo, permite la ejecución de código en la máquina que ejecuta el servidor de Oracle WebLogic a través de, únicamente, una petición GET.

El problema se produce cuando el código del servidor WebLogic de Oracle trata de utilizar la cadena de texto recibida como parámetro en algunas peticiones para crear una nueva instancia, de una clase que se puede especificar en dicho parámetro.

Image for post
El parche añade una comprobación para evitar la creación de la instancia si no corresponde (Fuente: testbnull)

Aunque es posible realizar peticiones GET que exploten esta vulnerabilidad, en principio todas ellas deberían requerir autenticación para llegar a ser procesadas por la sección de código vulnerable. Para lograr la ejecución de código sin autenticación, es posible utilizar un problema al gestionar las peticiones de recursos estáticos de la aplicación.

Image for post
‘Bypass’ para que una URL a un recurso que no requiere autenticación acabe siendo procesada

En lugar de gestionarse a través del servidor de ficheros, la petición acaba gestionándose por parte del AppManagerServlet, en el que se encuentra la vulnerabilidad de ejecución de código. De esta forma, es posible explotar el fallo realizando una petición a un supuesto recurso estático (rutas: /css/* y /images/*), pero añadiendo «.portal» al final se consigue que sea el AppManagerServlet el que acabe procesando la petición.

Con todo esto, el último paso es estudiar el código de la aplicación para determinar qué clase es posible utilizar para lograr una ejecución de código que comprometa el sistema. En este caso se propone la clase ShellSesion, que como podemos observar en la siguiente imágenes, permite recibir un parámetro de tipo String (que es el tipo del único parámetro que se puede usar para la explotación de la vulnerabilidad).

Image for post
Clase constructor de la clase ShellSession que permite explotar satisfactoriamente la vulnerabilidad

La función exec a diferencia de lo que podríamos pensar por su nombre y el de la clase Java, no ejecuta comandos del sistema, sino que acaba ejecutando la cadena como una expresión MVEL, por lo que necesitaremos una expresión válida para ejecutar un comando real del sistema.

En el siguiente vídeo podemos ver una explotación satisfactoria de la vulnerabilidad:

Oracle solucionó el problema en su última actualización de Octubre, por lo que se recomienda actualizar a la última versión cuanto antes. Las versiones vulnerables son: 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0 y 14.1.1.0.

Más información:

Fuente: https://blog.rapid7.com/2020/10/29/oracle-weblogic-unauthenticated-complete-takeover-cve-2020-14882-what-you-need-to-know/

Prueba de concepto y explicación técnica: https://testbnull.medium.com/weblogic-rce-by-only-one-get-request-cve-2020-14882-analysis-6e4b09981dbf

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.