Vulnerabilidad en str.format() en Python

Prerrequisitos: Python – función format()

str.format() es uno de los métodos de formateo de strings en Python3, que permite múltiples sustituciones y formateo de valores. Este método nos permite concatenar elementos dentro de una string a través del formato posicional. Parece algo genial. Pero la vulnerabilidad surge cuando nuestra aplicación de Python usa str.format en la string controlada por el usuario. Esta vulnerabilidad puede llevar a los atacantes a obtener acceso a información confidencial.

Nota: Este problema se ha informado aquí
vulnerabilidad de formato str

Entonces, ¿cómo es que esto se convierte en una vulnerabilidad? Veamos el siguiente ejemplo

Ejemplo:

# Let us assume this CONFIG holds some sensitive information
CONFIG = {
    "KEY": "ASXFYFGK78989"
}
  
class PeopleInfo:
    def __init__(self, fname, lname):
        self.fname = fname
        self.lname = lname
  
def get_name_for_avatar(avatar_str, people_obj):
    return avatar_str.format(people_obj = people_obj)
  
  
# Driver Code
people = PeopleInfo('GEEKS', 'FORGEEKS')
  
# case 1: st obtained from user
st = input()
get_name_for_avatar(st, people_obj = people)

Caso 1:
cuando el usuario da la siguiente string como entrada

Avatar_{people_obj.fname}_{people_obj.lname}

Producción:

Avatar_GEEKS_FORGEEKS

Caso 2:
cuando el usuario ingresa la siguiente string como entrada

{people_obj.__init__.__globals__[CONFIG][KEY]}

Producción:

ASXFYFGK78989

Esto se debe a que las funciones de formato de strings también podrían acceder a los objetos de atributos, lo que podría filtrar datos. Ahora puede surgir una pregunta. ¿Es malo usar str.format()?. No, pero se vuelve vulnerable cuando se usa sobre strings controladas por el usuario.

Publicación traducida automáticamente

Artículo escrito por Sowmya.L.R y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *