viernes, 7 de enero de 2022

Programación insegura y seguridad por obscuridad I

En los últimos días y debo agregar, algunos años ya, he trabajado mucho con el sistema Odoo, el cual es muy amigable y robusto. Así que en lo que va del año encontraran muchas entradas relacionadas al tema, tanto en temas de defensa, así como ataque al sistema Odoo. Anteriormente en una serie de entradas, observamos una de las formas de "hackear odoo", esto basado en una mala implementación, políticas de contraseña débil, y mala gestión de accesos.

Sin embargo, con todo lo anterior, únicamente se ha visto comprometido el sistema Odoo, ya que, el sistema esta diseñado para hacer frente a las diversidad de ataques existentes, como ataques de inyección sql, robo de sesiones, ejecución remota de código, etc.

Todo esto esta muy, sin embargo, en muchas ocasiones los desarrolladores al momento de programar nuevos módulos para extender o crear nuevas funcionalidades al sistema, emplean código inseguro, el cual no es debidamente protegido, para que no pueda ser ejecutado por cualquier usuario y menos utilizando xmlrpc. 

A día de hoy, no se si existe un método o forma de listar todos los métodos disponibles para un modelo, desde xmlrpc, sin embargo, si existe una manera fácil de lista la mayoría de aplicaciones instaladas en una instancia de Odoo, para ello solo tienes que dirigirte a /website/info , como se muestra a continuación.


Imagen 1: Aplicaciones instaladas

La idea de tener esta información, es buscar las aplicaciones instaladas, ya que hay muchas aplicaciones de terceros que se pueden descargar de github o bien de la apps de odoo . Esto con el fin de tener todo el código fuente y explorar en busca de código inseguro. Si tienen el código, podrán tener acceso a todos los métodos de un modelo, que no estén protegidos de manera adecuada, al estar en un lenguaje como python, entenderlo es muy fácil, el siguiente código es un extracto, de una aplicacion de odoo, en la cual se puede observar el modelo account.move con algunos métodos disponibles.

Imagen 2: Código fuente, con métodos y modelo

Particularmente de todas las aplicaciones mostradas en la imagen 1, me llama la atención Backups online drive, sin embargo, este modulo a pesar de ser de terceros, es un modulo privado, puesto que al buscarlo por internet, no se encuentra el código fuente para descargarlo.

Al no disponer de código fuente, tendremos que realizar un ataque fuerza bruta, para adivinar que métodos están disponibles para un modelo, esto empleando xmlrpc, para ello tenemos que preparar un diccionario, con los posibles nombres de los métodos, que se nos ocurran, haya utilizado el o los desarrolladores, para un determinado modelo. Para ello podemos emplear la siguiente petición por medio de xmlrpc.

Imagen 3: Código para fuerza bruta de métodos.

Si el método no existe, recibiremos un mensaje como el siguiente

Imagen 4: El método no existe.

Si encontramos un método que exista, recibiremos un mensaje como a continuación.
Imagen 5: Método existe, error parámetros.
 
Cuando encontremos, si bien no todos los métodos, pero si un buen numero, faltara, de igual forma, adivinar la cantidad de parámetros que recibe dicho método, y si esto te parece poco, también hay que  adivinar el tipo de dato que recibe en cada parámetro., algún string, un entero, una lista, un diccionario, set o conjuntos, matrices, funciones, modelos, etc.

Imagen 6 : Fuerza bruta a tipo de dato recibido por método.

En la siguiente entrada veremos como, seguir realizando este ataque, y aprovechar la programación insegura para atacar Odoo.

Saludos.
Lexer Pars.



No hay comentarios:

Publicar un comentario