- Script que faz vários fluxos de verificação de idade passarem automaticamente como adulto em diversas plataformas
- Ao colar e executar o código no console do Discord, ele envia automaticamente uma requisição para a API
/age-verification/verify e redireciona para a página de conclusão da verificação
- Em outras plataformas como Twitch, Kick e Snapchat, também é possível verificar da mesma forma inserindo a URL do QR code
- Esta ferramenta explora a estrutura de processamento de dados faciais do sistema k-id, gerando metadados legítimos mesmo sem um rosto real
- O método passa pelo processo de verificação ao replicar a criptografia AES-GCM e uma estrutura de dados previsível, e foi criado em resposta à expansão global da verificação de idade
Procedimento de verificação no Discord
- Funciona colando e executando um script específico no console de desenvolvedor (F12) do app web do Discord
- O script extrai o cache de módulos webpack do Discord, encontra o cliente interno de API e envia uma requisição ao endpoint
/age-verification/verify
- Em seguida, redireciona a
verification_webview_url recebida na resposta para age-verifier.kibty.town
- O usuário precisa resolver o captcha e aguardar até que a página mostre “success” para concluir a verificação
- Com isso, a conta do Discord passa a aparecer como verificada como adulta
Método de verificação em outras plataformas (Twitch, Kick, Snapchat etc.)
- Na página de verificação de idade de cada plataforma, selecione a opção “selfie” e copie a URL do QR code exibido
- Cole essa URL no campo de entrada de
age-verifier.kibty.town e clique no botão “verify”
- Depois disso, o processo de verificação ocorre automaticamente e uma mensagem de sucesso é exibida
Como funciona
- O sistema de verificação de idade k-id usado pelo Discord não envia o vídeo do rosto ao servidor, mas apenas metadados relacionados ao rosto e detalhes do processo
- Por causa dessa estrutura, é possível passar pela verificação mesmo sem um rosto real ao manipular e enviar metadados que pareçam legítimos
- Depois que o antigo k-id verifier da amplitudes foi divulgado, a parceira faceassure reforçou a validação, mas esta ferramenta consegue contorná-la com um método novo
Etapas técnicas detalhadas
- Etapa 1: replicação dos parâmetros de criptografia
- Ao comparar com requisições legítimas, foram identificados os parâmetros ausentes
encrypted_payload, auth_tag, timestamp e iv
- A criptografia usa AES-GCM, e a chave é derivada de
nonce + timestamp + transaction_id com HKDF(SHA-256)
- Reproduzindo a mesma estrutura, a ferramenta gera os parâmetros que faltavam
- Etapa 2: manipulação dos dados de previsão
- Mesmo com a criptografia perfeitamente replicada, ainda falhava; então foi identificado que a validação dependia dos “prediction arrays” (
outputs, primaryOutputs, raws)
- Com base nos dados de
raws, são gerados outputs e primaryOutputs, removendo outliers com z-score
- Além disso, os seguintes itens também são validados
- Os valores de
xScaledShiftAmt e yScaledShiftAmt só podem ser um entre dois possíveis
- O nome da mídia (câmera) deve corresponder à lista real de dispositivos
- O horário de conclusão do estado deve coincidir com a linha do tempo
- O código open source que implementa todo esse processo foi publicado, e qualquer pessoa pode verificá-lo
Divulgação e contexto de criação
- O autor agradece a xyzeva e Dziurwa, além de amplitudes, por trabalhos relacionados anteriores
- Como o Discord deve implementar globalmente a verificação de idade em março, foi explicado que o objetivo era explorar um novo método para contornar essa validação
1 comentários
Opiniões do Hacker News
O método realmente robusto é gerar uma entrada de vídeo artificial em vez de usar uma webcam real
Acho que nenhuma plataforma vai conseguir bloquear isso
Mesmo que a plataforma exija uma entrada de câmera difícil de falsificar, como em um celular, basta apontar uma câmera para uma tela de alta resolução
Esse tipo de jogo de gato e rato não deve durar muito
Uma verificação de idade por selfie em vídeo, mesmo imperfeita, acaba sendo vantajosa para todo mundo
Pessoas sensatas não precisam enviar carteira de motorista ou passaporte, e a plataforma consegue reter usuários com mais facilidade
Sites pornôs podem criar contas de usuário para aumentar rastreamento e receita com anúncios
Políticos podem anunciar que “implementaram uma política de restrição por idade”, e os pais ficam tranquilos achando que os filhos não estão vendo pornografia
No fim, todo mundo sai ganhando
Parece que esse tipo de verificação vai acabar seguindo nessa direção
Provavelmente esse também foi um dos motivos para o Google ter forçado apps exclusivos da Play Store: criar uma cadeia de software verificável
No fim, é o tipo de problema que se resolve mudando uma chave
Junto com mapeamento 3D, o truque de apenas mostrar uma tela não funcionaria
O problema é que serviços de verificação de idade como o do Discord não estão tentando isso seriamente
Eu simplesmente não vou jogar e vou parar de usar a plataforma
Esse método tem três problemas
Este é um excelente caso de engenharia reversa e mostra como é difícil verificar sem violar a privacidade
Como o código está público, o problema de execução de código arbitrário (#3) não se aplica
Se empresas responderem com métodos mais invasivos (#2), os usuários sempre podem migrar para outra plataforma
Achei uma ideia bem esperta
Parece que o Discord afrouxou a verificação de idade só o suficiente para poder dizer aos reguladores que “está protegendo crianças”
Mas, se o governo começar a fiscalizar de verdade, essa abordagem não dura muito
Alguns países já estão exigindo biometria mais forte, e alguns serviços estão migrando para verificação por app móvel
Truques simples baseados em JavaScript vão funcionar cada vez menos
Recomendo envolver o código em uma IIFE ao executar
No Safari do macOS, top-level await não é suportado, então não funciona
Veja caniuse.com/wf-top-level-await para mais informações
Já está atrasado uns 5 anos
Quando tentei, fui redirecionado para https://age-verifier.kibty.town/webview?url=null
e apareceu a mensagem
{"error":"error parsing webview url"}Parece que minha conta do Discord está em teste A/B e usa outro provedor de verificação, o Persona
Se pesquisar, dá para ver mais informações
Funciona de verdade
Recebi uma mensagem do Discord dizendo que fui “classificado como grupo adulto”
(narração) E naquele momento, percebi que minha conta tinha sido invadida ;)
Espero que não dê problema na minha conta de 11 anos, mas se pedirem rosto ou documento, acho que vou encerrar a conta
Não entendo por que a geração mais jovem fica tão presa a serviços que claramente são hostis a ela
Será que a conveniência de continuar numa plataforma ruim é maior do que o trabalho de procurar alternativas?
Hoje em dia, muita gente jovem nem está familiarizada com terminal ou com o conceito de caminho de arquivo
Sabe pesquisar, mas configurar alternativas por conta própria é outra história
Acima de tudo, falta até mesmo a percepção de que alternativas podem existir
Plataformas abertas como Matrix ainda carecem de recursos, e o Discord acaba sendo a opção menos ruim
Meus amigos estão lá, então eu também estou
Sempre que se muda de plataforma, membros se perdem e a comunidade se desintegra
Esse “pequeno esforço” na prática mata a comunidade
Mesmo que usem outra plataforma, acabam ficando sozinhas por lá
Fazer todo mundo migrar ao mesmo tempo é quase impossível
Passei pelo captcha no Discord,
mas apareceu o erro
{"error":"failed to execute k-id privately action (status=404)"}Sou claramente maior de idade, e esse processo é um absurdo
Não me importo se eu acabar bloqueado
Resumo de notícias relacionadas
O jogo de gato e rato da verificação digital de idade impõe um enorme peso regulatório
Se isso pode ser burlado com tanta facilidade, as plataformas estão apenas marcando uma caixinha regulatória,
e a base real de confiança é muito frágil
Mas as empresas não gostam dela porque não conseguiriam obter dados de usuários adultos verificados
Veja o blog do Google sobre Age Assurance Europe para mais detalhes
O objetivo desses sistemas não é bloquear perfeitamente, mas adicionar atrito para que o público em geral não consiga burlar com facilidade