SSTI às cegas
Em check.cjs, a prévia é renderizada como template, mas o servidor joga fora a saída: ele só responde 200 OK (renderizou) ou 500 Internal Server Error (o motor levantou um erro). Não há texto de volta para ler o segredo. Mesmo assim, o contexto tem a variável secret, e você consegue arrancar o valor um caractere por vez.
O contexto traz ajudantes: eq(a, b), char(s, i) (erra se o índice não existe), len(s) e assert(cond) (erra se a condição for falsa). Monte uma sonda que só dá 200 quando um palpite está certo, e leia o segredo caractere a caractere. O segredo é a flag.
Responda no formato de flag com o segredo recuperado, por exemplo tocaia{exemplo} (que não é a resposta).
Arquivos do desafio
Tudo se resolve com ferramentas gratuitas.
Entre para ver o assunto deste desafio.
A solução comentada aparece depois que você resolve.