Entrada

Client-side prototype pollution in third-party libraries

Laboratorio de Portswigger sobre Prototype Pollution

Client-side prototype pollution in third-party libraries

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

En este laboratorio es posible explotar un DOM XSS a través de un prototype pollution en el lado del cliente. Esto se debe a un gadget presente en una librería de terceros, que es fácil pasar por alto debido a que el código fuente está minificado. Aunque técnicamente es posible resolver este laboratorio de forma manual, es recomendable utilizar DOM Invader, ya que nos ahorrará una cantidad considerable de tiempo y esfuerzo


Resolución

Al acceder a la web vemos esto

Lo primero que vamos a hacer es intentar inyectar una propiedad arbitraria a través de la cadena de consulta

1
https://0aeb0038032f073c815612f4002600ff.web-security-academy.net/?__proto__[foo]=bar

Lo siguiente que vamos a hacer es abrirnos la consola del navegador e inspeccionar el Object.prototype para ver si lo hemos contaminado correctamente con la propiedad arbitraria. Como podemos ver, no hemos conseguido contaminar la propiedad

No pasa nada si esto pasa, ya que hay diferentes formas de contaminar el prototipo. He probado esta forma alternativa de contaminar el prototipo, y tampoco ha funcionado

1
https://0aeb0038032f073c815612f4002600ff.web-security-academy.net/?__proto__.foo=bar

Cuando abrimos la consola por primera vez es curioso que nos aparezca un texto que dice Hash Changed

Si seleccionamos una categoría el hash cambia

De esto se encarga esta función que se encuentra en el archivo store.js

He inspeccionado los archivos js y no he visto que ningún tipo de sanitización en ninguno. Por lo tanto, al no encontrar nada de esta forma vamos a usar el Dom Invader para ver si encontramos al interesante. Para ello, lo primero es pulsar en Open browser en Burpsuite y posteriormente habilitar el Dom Invader

Abrimos las herramientas de desarrollador y nos dirigimos a la pestaña DOM Invader. Ahí vemos que se han detectado dos formas de envenenar el prototipo

Para comprobar que se ha envenenado el prototipo realmente podemos pulsar en Test

Si queremos ver solo el valor de la propiedad testproperty podemos hacerlo así

Lo que vamos a hacer ahora es buscar gadgets, podemos hacerlo pulsando en el botón que vimos anteriormente que decía Scan for gadgets pero yo prefiero hacerlo de esta forma. Tenemos que hacer click sobre el engranaje

Una vez estemos aquí, tenemos que habilitar la checkbox que dice Scan for gadgets is on. Posteriormente pulsamos en Save y en Reload

Una vez hecho esto, DOM Invader empezará a buscar gadgets

En caso de encontrar algún gadget saldrá este mensaje

Los resultados se muestran en la pestaña DOM Invader

En este caso tenemos suerte y DOM Invader nos hace la explotación haciendo click en el botón Exploit. Sin embargo, hay otras situaciones en las que no aparece esta opción y tenemos que hacer esto manualmente. Al pulsar en Exploit, vemos que se ha explotado correctamente la vulnerabilidad porque nos sale un alert

Para completar este laboratorio debemos URL decodear el payload, sustituir alert(1) por alert(document.cookie), pegarlo en el Exploit server y pulsar sobre Deliver exploit to victim

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