Entrada

Privilege escalation via server-side prototype pollution

Laboratorio de Portswigger sobre Prototype Pollution

Privilege escalation via server-side prototype pollution

1

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio está construido sobre Node.js y el framework Express. Es vulnerable a prototype pollution del lado del servidor porque fusiona de forma insegura la entrada controlada por el usuario en un objeto JavaScript del lado del servidor. Esto es sencillo de detectar porque cualquier propiedad contaminada heredada a través de la cadena de prototipos es visible en una respuesta HTTP. Podemos loguearnos usando las credenciales wiener:peter


Resolución

Al acceder a la web vemos esto

Si pulsamos en My account y nos logueamos con las credenciales wiener:peter vemos esto

Si pulsamos sobre el botón Submit y miramos el Logger de Burpsuite vemos que se realiza esta petición

Lo primero que vamos a hacer es ver si podemos envenenar el prototipo. Para ello, vamos a usar este payload "__proto__":{"foo":"bar"}. Como podemos ver, hemos conseguido envenenar el prototipo

Lo que vamos a hacer ahora es intentar cambiar la propiedad isAdmin a True. Es importante recalcar que esto funcionará siempre y cuando el objeto que estamos viendo en la respuesta esté heredando la propiedad isAdmin del prototipo. En caso de que el objeto tenga esa propiedad definida, el ataque no funcionará porque las propiedades propias del objeto tienen prioridad sobre las del prototipo. Como vemos, el ataque ha funcionado, por lo que podemos confirmar que el objeto está heredando esa propiedad del prototipo

Si nos dirigimos al sitio web vemos que aparece un Admin panel. Para completar el laboratorio debemos pulsar sobre él y eliminar al usuario carlos

Esta entrada está licenciada bajo CC BY 4.0 por el autor.