Pré-requisitos: Python - função format()

str.format() é um dos métodos de formatação de string em Python3, que permite várias substituições e formatação de valor. Esse método nos permite concatenar elementos em uma string por meio da formatação posicional. Parece uma coisa bem legal. Mas a vulnerabilidade surge quando nosso aplicativo Python usa str.format na string controlada pelo usuário. Essa vulnerabilidade pode fazer com que os invasores tenham acesso a informações confidenciais.

Nota: Este problema foi relatado aqui
vulnerabilidade do formato str

Então, como isso se torna uma vulnerabilidade. Vamos ver o seguinte exemplo

Exemplo:



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) 
  
  
people = PeopleInfo('GEEKS', 'FORGEEKS') 
st = input() 
get_name_for_avatar(st, people_obj = people) 

Caso 1:
quando o usuário fornece o seguinte str como entrada

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

Resultado:

Avatar_GEEKS_FORGEEKS

Caso 2:
quando o usuário insere o seguinte str como entrada

{people_obj .__ init __.__ globais __ [CONFIG] [CHAVE]}

Resultado:

ASXFYFGK78989

Isso ocorre porque as funções de formatação de string podem acessar objetos de atributos também, que podem vazar dados. Agora, uma pergunta pode surgir. É ruim usar str.format() ?. Não, mas se torna vulnerável quando é usado em strings controladas pelo usuário.