Ataques de asignación masiva (Mass-Asignment Attack) Parameter Binding; Explicación y PoC

    El ataque de asignación masiva (Mass Assignment Attack) se basa en la manipulación de parámetros de entrada de una solicitud HTTP para crear o modificar campos en un objeto de modelo de datos en la aplicación web. En lugar de agregar nuevos parámetros, los atacantes intentan explotar la funcionalidad de los parámetros existentes para modificar campos que no deberían ser accesibles para el usuario.

    Por ejemplo, en una aplicación web de gestión de usuarios, un formulario de registro puede tener campos para el nombre de usuario, correo electrónico y contraseña. Sin embargo, si la aplicación utiliza una biblioteca o marco que permite la asignación masiva de parámetros, el atacante podría manipular la solicitud HTTP para agregar un parámetro adicional, como el nivel de privilegio del usuario. De esta manera, el atacante podría registrarse como un usuario con privilegios elevados, simplemente agregando un parámetro adicional a la solicitud HTTP.

    Muchos marcos de aplicación web ofrecen características de registro activo y mapeo objeto-relacional, donde los datos externos en formatos de serialización se convierten automáticamente en objetos internos al ingresar y, a su vez, en campos de registro de la base de datos. Si la interfaz del marco para esa conversión es demasiado permisiva y el diseñador de la aplicación no marca campos específicos como inmutables, es posible sobrescribir campos que nunca se pretendió modificar desde el exterior (por ejemplo, permisos de administrador).



PoC 1


    Para la primera prueba de concepto utilizaremos el laboratorio Juice-Shop

    Tenemos un panel de registro y vamos a interceptar la petición de registro.

    Vemos que los datos se tramitan en formato JSON y vamos a intentar añadirle parametros para ver si cuela

    Le metemos un nuevo role y nos registra como admin, nos toma en cuenta por los parámetros, puesto que no esta sanitizado y confía en que la solicitud no va a ser manipulada


PoC 2

    En esta prueba de concepto usaremos el laboratorio skf-labs parameter-binding

    Tenemos un panel en el que encontramos una tabla con algunos detalles sobre los usuarios


    Si echamos un ojo al código fuente, descubrimos que utiliza un marco ORM para escribir consultas em la base de datos. Esta línea de código es crucial para explotar el ataque puesto que nos permite añadir todos los atributos se pasen al modelo

    Y  necesitamos examinar las propiedades del modelo "user";


    Como vimos al inicio encontramos una tabla con algunos detalles sobre los usuarios activos.
    Cuando hacemos clic en un usuario para actualizar su configuración, descubrimos que la aplicación no tiene la intención de que actualicemos la propiedad "privileged".


    Si recordamos la linea señalada anteriormente, no encontramos con el método "permit" que devuelve una copia de los parámetros con solo las claves permitidas. Al crear un nuevo modelo, solo se envían los atributos permitidos. Sin embargo, si no se especifican atributos permitidos, todos los atributos se pasan al modelo. Esto permite abusar del enlace automático de parámetros para actualizar propiedades como "is_admin" al agregar parámetros adicionales a la solicitud.


    Así que vamos a interceptar el usuario guest intentando actualizar su perfil


    En cuanto a privilegio no nos infica nada, pero si recordamos las propiedades del modelo podemos añadirla mediante [is_admin]


    Y como vemos hemos conseguido añadirle la propiedad de admin.


PoC 3

     En esta prueba de concepto usaremos el laboratorio skf-labs parameter-binding

    Nos encontramos con un panel de registro.


    Nos logueamos y vemos que no somos administradores.


    Vamos a ver las propiedades del modelo "User" y también a la hora de crearlo, lo que nos indica que podamos añadir cualquier propiedad:



    Ahora registraremos un nuevo usuario pero esta vez interceptándolo con burpsuite teniendo en cuenta las propiedades del usuario anteriormente vistas


Le añadimos la propiedad "isAdmin" y vemos que conseguimos resgitrar usuarios con el privilegio de admin 



2 comentarios: