Lendo o patch
Aqui estão as duas versões do serviço de token: before.js (com a falha) e after.js (consertado). Compare as duas.
O before.js desserializa o payload e USA os campos na hora (confia no role, deixa o _type escolher o handler) e só calcula a assinatura para gravar no log, nunca para comparar. O after.js junta várias defesas: verifica a assinatura em tempo constante, só segue se ela bater, lê apenas uma lista de permissão de campos, ignora o _type, e tira o papel do usuário de um armazenamento no servidor.
Várias mudanças ajudam, mas UMA é a ordem que sustenta todas as outras: o after.js confere a autenticidade dos bytes ANTES de ler qualquer campo do payload. A flag é o nome dessa ordem, em minúsculas, com as palavras unidas por _.
Formato: tocaia{...}. Exemplo com a mesma forma, que não é a resposta: tocaia{read_the_patch}.
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.