Riesgo de entrada de usuario sin sanitizar detectado en el framework de JavaScript
Una vulnerabilidad en Ember.js un framework de JavaScript para crear aplicaciones web de Node.js, permitió a los atacantes realizar prototipos de ataques de contaminación contra el servidor host.
Los ataques de contaminación de prototipos aprovechan las funciones dinámicas de asignación de propiedades de JavaScript para realizar cambios globales en objetos críticos. En el caso de Ember.js la vulnerabilidad de contaminación prototipo podría permitir a los atacantes realizar ataques de secuencias de comandos entre sitios (XSS) y robar información del usuario.
Entrada no confiable
Masato Kinugawa, el investigador de seguridad que descubrió la vulnerabilidad la vio por primera vez durante otra investigación.
“En la primavera de 2021, noté una vulnerbilidad XSS en uno de los dominios propiedad de Google y lo informé a través del Programa de recompensas por vulnerabilidades de Google”. “Al investigar los detalles, noté que la causa raíz estaba en el framework Ember.js”.
De acuerdo con los hallazgos de Kinugawa si una aplicación pasa una entrada de usuario no sanitizada a algunas de las funciones de configuración de propiedades de los objetos Ember.js, puede conducir a la contaminación del prototipo.
En esencia, esto significa que el atacante puede usar la función de propiedad para atravesar el prototipo del objeto y realizar cambios en otras partes del programa JavaScript incluido el objeto base del que se derivan todos los demás objetos.
La vulnerabilidad de contaminación del prototipo podría estar potencialmente encadenado con otras vulnerabilidades en la aplicación de destino para llevar a cabo otras actividades maliciosas, incluido el robo de credenciales.
Para abusar de la falla, un atacante necesitaría un dispositivo de secuencia de comandos que acceda al setter de propiedad vulnerable. “En el caso de la vulnerabilidad de Google pude usar un dispositivo reCAPTCHA de Google porque la aplicación usaba el script reCAPTCHA”,.
¿Característica o vulnerabilidad?
La capacidad de realizar cambios dinámicos en estructuras de objetos y prototipos es una de las características que hacen que JavaScript sea flexible. Sin embargo esto también crea un desafío para los desarrolladores quienes deben asegurarse de que los cambios en las propiedades eviten que los prototipos presenten vulnerabilidades de contaminación especialmente cuando los cambios provienen de la entrada del usuario.
“Si bien el encadenamiento profundo de propiedades es una característica prevista de estas API y no es aconsejable pasarles información no confiable estamos de acuerdo en que este comportamiento es lo suficientemente sorprendente como para constituir un mayor riesgo de seguridad” dijo Ember en un aviso.
Una nueva versión del framework evita explícitamente que las funciones anteriormente vulnerables realicen cambios en el prototipo del objeto.
Los prototipos de vulnerabilidades de contaminación siguen siendo esquivos ya que los desarrolladores no los entienden bien. Kinugawa proporcionó algunos consejos sobre cómo los desarrolladores de software pueden encontrar vulnerabilidades similares en sus programas y las bibliotecas que utilizan.
“En la mayoría de los casos que he encontrado, la contaminación (del prototipo) y esto ocurrió al convertir los parámetros de URL en un objeto de JavaScript”, dijo Kinugawa. “Entonces, cualquiera que intente encontrar este tipo de vulnerabilidades debería poder encontrarlo observando cuidadosamente el manejo de parámetros de URL”.
Fuente: https://portswigger.net/daily-swig/prototype-pollution-bug-exposed-ember-js-applications-to-xss
Entusiasta de la seguridad cibernética. Especialista en seguridad de la información, actualmente trabajando como especialista en infraestructura de riesgos e investigador.
Experiencia en procesos de riesgo y control, soporte de auditoría de seguridad, diseño y soporte de COB (continuidad del negocio), gestión de grupos de trabajo y estándares de seguridad de la información.