Prototipo de una variante de un error similar a la contaminación detectado en Python

Una falla de “contaminación de clase” similar al tipo de vulnerabilidad peligrosa que se encuentra en JavaScript y lenguajes similares

Contaminación de prototipos es una clase de errores peligrosos asociados con lenguajes basados ​​en prototipos, el más popular de los cuales es JavaScript.

Sin embargo, un investigador encontró una variante de prototipo de contaminación implementada para Python, mientras que otros están basados ​​en clases. lenguajes de programación puede ser vulnerable a ataques similares.

De la contaminación de prototipo a la contaminación de clase

En JavaScript, cada objeto hereda el “prototipo” de su objeto principal, que contiene todos los atributos y funciones de ese objeto. Los objetos de JavaScript pueden anular los prototipos de sus padres para acceder a sus funciones.

Los prototipos se pueden modificar en tiempo de ejecución, lo que hace JavaScript dinámico y flexible, pero también peligroso. Los ataques de contaminación de prototipos utilizan esta característica para cambiar el comportamiento de los programas de JavaScript y realizar acciones maliciosas.

Se supone que los lenguajes basados ​​en clases como Python son inmunes a tales manipulaciones.

¿TE GUSTA ESTE CONTENIDO CIEGO? Cuéntenos su experiencia trago diario para ganar rápidamente

Sin embargo, el investigador de seguridad Abdulraheem Khaled descubrió un esquema de codificación que permite a los atacantes realizar ataques prototípicos similares a la contaminación en los programas de Python. Él lo llama “contaminación de clase”. entrada en el blog documenta sus hallazgos.

Khalid dijo trago diario descubrió el ataque mientras intentaba traducir los conceptos de contaminación del prototipo de JavaScript a Python.

Manipulación de clases de Python

Contaminar Pitón para los objetos, un atacante necesita un punto de entrada que use la entrada del usuario para establecer los atributos del objeto. Si la entrada del usuario especifica tanto el nombre como el valor del atributo, un atacante puede usarlo para manipular el comportamiento de la aplicación.

“El factor clave a tener en cuenta es si la aplicación utiliza acceso sin formato controlado por el usuario para establecer los atributos del objeto (controlando el nombre del atributo que se establecerá y su valor)”, dijo Khaled. trago diario.

Si la función de destino utiliza bucles recursivos para atravesar los atributos del objeto, un atacante podría acceder potencialmente a clases principales, variables globales, etc. puede acceder. Khalid lo llama una “combinación segura”.

Por ejemplo, un atacante podría usar dicha funcionalidad para cambiar las líneas de comando ejecutadas por el sistema, cambiar el valor de las variables confidenciales y desencadenar ataques de denegación de servicio (DoS) haciendo que las clases críticas no funcionen.

A diferencia de JavaScript, los ataques de contaminación de clases de Python se limitan a las manipulaciones posibles en los tipos de objetos internos.

FON Contaminación de prototipos: una vulnerabilidad peligrosa y subestimada que afecta a las aplicaciones de JavaScript

“A diferencia de JS [JavaScript], no puede establecer atributos en una clase de objeto global/interna porque es un tipo inmutable. Esto pone algunas limitaciones a la hora de buscar dispositivos”, dijo Khalid.

La modificación del prototipo del objeto subyacente es uno de los principales vectores de ataque para la contaminación del prototipo de JavaScript, lo que limita un poco los ataques de Python.

Sin embargo, Khaled descubrió que una función de combinación vulnerable podría permitir a los atacantes eludir esta limitación dando acceso a variables globales en la aplicación y otras clases definidas en un programa de Python o módulos importados.

Contaminación del aula en la naturaleza.

Todos los tipos de programas de Python son vulnerables a este tipo de ataque siempre que acepten entradas de usuario no desinfectadas e implementen una forma de asignación de atributos de objetos maliciosos, dijo Khaled.

Durante su investigación, encontró varios ejemplos de bibliotecas populares de Python con funciones de fusión inseguras y las expuso a ataques de contaminación de clases.

El efecto mínimo de la contaminación de clase será DoS. Pero los ataques pueden afectar potencialmente a las aplicaciones web de Python de manera más profunda, como:

  • Sobrescribir la clave secreta Flask se usa para firmar sesiones en aplicaciones web y preparar manualmente sesiones válidas para preparar ataques de secuestro de cuentas.
  • Filtros circulantes – por ejemplo, eludir cruce de carreteras Prevención implementada en Jinja al intentar cargar un archivo de plantilla. Esto conduce a la divulgación e inclusión de archivos locales, lo que permite a los atacantes descargar archivos desde cualquier directorio local sin estar restringidos al directorio de plantillas.
  • Ejecución de comandos remotosSobrescribiendo las variables de entorno COMSPEC o PATH

“La contaminación de prototipos es definitivamente uno de esos temas que merece más atención pública, y últimamente hemos comenzado a ver más atención”, dijo Khaled.

“La contaminación de clase puede ser una nueva vulnerabilidad emergente, [but] Espero verlo pronto en otros lenguajes de programación”.

TAMBIÉN PODRÍA GUSTARTE Después de que CircleCI sufriera una brecha de seguridad, se instó a los desarrolladores a revelar los secretos

Leave a Reply

Your email address will not be published. Required fields are marked *