# Breach notification: como notificar a ANPD em caso de vazamento de CPFs

> Guia completo sobre breach notification na LGPD, incluindo prazos, conteúdo da notificação e fluxo técnico para responder a vazamentos de CPF.

**Publicado:** 10/08/2025
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/breach-notification-notificar-anpd-vazamento-cpf

---


Quando um incidente de segurança envolve dados de CPF, a LGPD exige que o controlador notifique a [ANPD](https://www.gov.br/anpd) e os titulares afetados em até 2 dias úteis após tomar conhecimento do ocorrido. Empresas que não têm processos de resposta documentados costumam perder esse prazo — o que agrava as consequências jurídicas e reputacionais do incidente.

## Introdução

Vazamentos de dados são uma realidade que nenhuma empresa deseja enfrentar, mas para a qual todas devem estar preparadas. Quando um incidente de segurança envolve dados de CPF, a LGPD exige que o controlador notifique tanto a ANPD quanto os titulares afetados em prazo razoável. A falta de uma resposta rápida e adequada pode agravar significativamente as consequências legais e reputacionais.

---

## O que a LGPD exige sobre notificação de incidentes

O artigo 48 da LGPD determina que o controlador deve comunicar à ANPD e ao titular a ocorrência de incidente de segurança que possa acarretar risco ou dano relevante aos titulares. A comunicação deve conter, no mínimo:

- Descrição da natureza dos dados pessoais afetados.
- Informações sobre os titulares envolvidos.
- Indicação das medidas técnicas e de segurança utilizadas.
- Riscos relacionados ao incidente.
- Motivos da demora, caso a comunicação não tenha sido imediata.
- Medidas adotadas ou a serem adotadas para reverter ou mitigar os efeitos do incidente.

### Prazo de notificação

A ANPD recomenda que a comunicação seja feita em até 2 dias úteis após o conhecimento do incidente, conforme Resolução CD/ANPD n. 15/2024.

---

## Fluxo de resposta a incidentes

### Etapas do processo

1. **Detecção**: identificação do incidente por sistemas de monitoramento ou denúncia.
2. **Contenção**: ações imediatas para limitar a extensão do vazamento.
3. **Avaliação**: análise do escopo, tipo de dados afetados e número de titulares.
4. **Notificação à ANPD**: comunicação formal dentro do prazo legal.
5. **Notificação aos titulares**: comunicação clara e acessível.
6. **Remediação**: correção das vulnerabilidades e implementação de melhorias.
7. **Documentação**: registro completo do incidente para auditoria.

---

## Sistema automatizado de detecção e resposta

### Detector de anomalias em acessos a CPF

```python
import json
import logging
from datetime import datetime, timezone, timedelta
from collections import defaultdict
from typing import List, Dict

logging.basicConfig(
 filename="incident_response.log",
 level=logging.INFO,
 format="%(asctime)s | %(levelname)s | %(message)s"
)

class DetectorVazamentoCPF:
 """Detecta padrões anômalos que podem indicar vazamento de dados de CPF."""

 def __init__(self):
 self.acessos_por_usuario = defaultdict(list)
 self.acessos_por_ip = defaultdict(list)
 self.alertas = []

 def registrar_acesso(self, usuario: str, ip: str, cpf_masked: str):
 """Registra um acesso e verifica anomalias."""

 agora = datetime.now(timezone.utc)
 registro = {"timestamp": agora, "cpf": cpf_masked, "ip": ip}

 self.acessos_por_usuario[usuario].append(registro)
 self.acessos_por_ip[ip].append(registro)

 # Verificar anomalias
 self._verificar_volume_excessivo(usuario, agora)
 self._verificar_ip_anomalo(usuario, ip)
 self._verificar_horario_incomum(usuario, agora)

 def _verificar_volume_excessivo(self, usuario: str, agora: datetime):
 """Detecta volume anormal de consultas."""

 uma_hora_atras = agora - timedelta(hours=1)
 acessos_recentes = [
 a for a in self.acessos_por_usuario[usuario]
 if a["timestamp"] > uma_hora_atras
 ]

 if len(acessos_recentes) > 100:
 alerta = {
 "tipo": "VOLUME_EXCESSIVO",
 "severidade": "CRITICA",
 "usuario": usuario,
 "consultas_ultima_hora": len(acessos_recentes),
 "timestamp": agora.isoformat()
 }
 self.alertas.append(alerta)
 logging.critical(json.dumps(alerta))

 def _verificar_ip_anomalo(self, usuario: str, ip: str):
 """Detecta acesso de IP não usual."""

 ips_conhecidos = set(
 a["ip"] for a in self.acessos_por_usuario[usuario][:-1]
 )

 if ips_conhecidos and ip not in ips_conhecidos:
 alerta = {
 "tipo": "IP_ANOMALO",
 "severidade": "ALTA",
 "usuario": usuario,
 "ip_novo": ip,
 "ips_conhecidos": list(ips_conhecidos)[:5],
 "timestamp": datetime.now(timezone.utc).isoformat()
 }
 self.alertas.append(alerta)
 logging.warning(json.dumps(alerta))

 def _verificar_horario_incomum(self, usuario: str, agora: datetime):
 """Detecta acesso fora do horário comercial."""

 hora = agora.hour
 if hora < 6 or hora > 23:
 alerta = {
 "tipo": "HORARIO_INCOMUM",
 "severidade": "MEDIA",
 "usuario": usuario,
 "hora": hora,
 "timestamp": agora.isoformat()
 }
 self.alertas.append(alerta)
 logging.warning(json.dumps(alerta))

 def obter_alertas_criticos(self) -> List[Dict]:
 """Retorna alertas que podem indicar vazamento."""
 return [a for a in self.alertas if a["severidade"] == "CRITICA"]
```

---

## Gerador de notificação para ANPD

```python
from dataclasses import dataclass, field
from typing import List

@dataclass
class NotificacaoANPD:
 """Gera a notificação formal para a ANPD conforme exigências da LGPD."""

 controlador: str
 cnpj: str
 dpo_nome: str
 dpo_email: str
 data_incidente: str
 data_deteccao: str
 dados_afetados: List[str]
 titulares_afetados: int
 descricao_incidente: str
 medidas_seguranca: List[str]
 medidas_mitigacao: List[str]
 riscos: List[str]

 def gerar_documento(self) -> dict:
 """Gera o documento de notificação estruturado."""

 return {
 "comunicacao_incidente_seguranca": {
 "controlador": {
 "razao_social": self.controlador,
 "cnpj": self.cnpj,
 "encarregado": {
 "nome": self.dpo_nome,
 "email": self.dpo_email
 }
 },
 "incidente": {
 "data_ocorrencia": self.data_incidente,
 "data_conhecimento": self.data_deteccao,
 "descricao": self.descricao_incidente,
 "dados_pessoais_afetados": self.dados_afetados,
 "numero_titulares_afetados": self.titulares_afetados,
 "categoria_titulares": "clientes"
 },
 "medidas": {
 "seguranca_preexistentes": self.medidas_seguranca,
 "mitigacao_adotadas": self.medidas_mitigacao
 },
 "riscos": self.riscos,
 "comunicacao_titulares": {
 "realizada": True,
 "meio": "e-mail individual",
 "data": self.data_deteccao
 }
 }
 }

# Exemplo de uso
notificacao = NotificacaoANPD(
 controlador="Empresa XYZ Ltda",
 cnpj="12.345.678/0001-00",
 dpo_nome="Carlos Souza",
 dpo_email="dpo@empresa.com.br",
 data_incidente="2025-08-08",
 data_deteccao="2025-08-09",
 dados_afetados=["CPF", "Nome completo", "Data de nascimento"],
 titulares_afetados=1500,
 descricao_incidente="Acesso não autorizado ao banco de dados de clientes via credencial comprometida.",
 medidas_seguranca=[
 "Criptografia AES-256 em repouso",
 "Controle de acesso RBAC",
 "Logs de auditoria ativos"
 ],
 medidas_mitigacao=[
 "Credencial comprometida revogada imediatamente",
 "Forçado reset de senha para todos os administradores",
 "Bloqueio do IP de origem do ataque",
 "Notificação aos titulares afetados via e-mail"
 ],
 riscos=[
 "Possibilidade de fraude identitária com dados de CPF expostos",
 "Risco de engenharia social usando nome e data de nascimento"
 ]
)

documento = notificacao.gerar_documento()
print(json.dumps(documento, indent=2, ensure_ascii=False))
```

---

## Comunicação aos titulares

A comunicação aos titulares deve ser redigida em linguagem clara e acessível, contendo:

- O que aconteceu e quando.
- Quais dados foram afetados.
- Quais riscos o titular pode enfrentar.
- O que a empresa está fazendo para resolver.
- O que o titular pode fazer para se proteger.
- Canais de contato para dúvidas.

### Verificação de dados afetados via API

```bash
# Verificar se um CPF específico foi afetado
curl -X GET "https://api.cpfhub.io/cpf/12345678901" \
 -H "x-api-key: SUA_API_KEY" \
 -H "Accept: application/json" \
 --max-time 30
```

---

## Pós-incidente e lições aprendidas

Após a resolução do incidente, conduza uma análise de causa raiz e documente:

- Cronologia completa do incidente.
- Vulnerabilidades exploradas.
- Eficácia das medidas de detecção e resposta.
- Melhorias implementadas.
- Custo estimado do incidente.
- Atualização do plano de resposta a incidentes.

---

## Preparação preventiva

- **Plano de resposta a incidentes documentado e testado**: realize simulações pelo menos semestralmente.
- **Equipe de resposta definida**: cada membro deve conhecer suas responsabilidades.
- **Templates de notificação prontos**: tenha modelos de comunicação para ANPD e titulares pré-aprovados pelo jurídico.
- **Contatos atualizados**: mantenha lista atualizada de contatos da ANPD, DPO e equipe jurídica.
- **Seguro cibernético**: considere contratar seguro para cobrir custos de resposta a incidentes.

---

## Perguntas frequentes

### Qual é o prazo legal para notificar a ANPD após um vazamento de CPF?

A ANPD recomenda a comunicação em até 2 dias úteis após o conhecimento do incidente, conforme a Resolução CD/ANPD n. 15/2024. O prazo começa a contar a partir do momento em que a empresa toma ciência do incidente, não da data em que ele ocorreu. A demora injustificada pode agravar as penalidades aplicadas.

### O que acontece se a empresa não notificar a ANPD dentro do prazo?

A LGPD prevê advertência, multa de até 2% do faturamento (limitada a R$50 milhões por infração) e publicização da infração. A ausência de notificação ou a notificação intempestiva são fatores agravantes na análise da ANPD, conforme os critérios estabelecidos na Resolução CD/ANPD n. 4/2021.

### Como garantir conformidade com a LGPD ao usar uma API de CPF?

Use o CPF apenas para a finalidade declarada ao titular, armazene apenas o necessário (não guarde o CPF cru se um token bastar), implemente controle de acesso aos logs de consulta e documente a base legal para o tratamento. A ANPD orienta que dados de identificação devem ser tratados com o princípio da necessidade.

### A API CPFHub.io bloqueia quando o limite de consultas é atingido?

Não. A API não bloqueia em nenhum cenário. Ao atingir o limite do plano, cada consulta adicional é cobrada a R$0,15. O plano gratuito inclui 50 consultas por mês sem cartão de crédito — suficiente para validação de CPFs afetados durante uma resposta a incidente.

### Leia também

- [LGPD: CPF é dado pessoal sensível ou não? Entenda a classificação correta](https://cpfhub.io/blog/lgpd-cpf-e-dado-pessoal-sensivel-ou-nao-entenda-a-classificacao-correta)
- [APIs gratuitas de CPF podem impactar a performance do sistema](https://cpfhub.io/blog/apis-gratuitas-de-cpf-podem-impactar-a-performance-do-sistema)
- [Normas SUSEP para validação de CPF em resseguros e corretoras](https://cpfhub.io/blog/normas-susep-validacao-cpf-resseguros-corretoras)
- [SLA de API de CPF: níveis de disponibilidade](https://cpfhub.io/blog/sla-api-cpf-niveis-disponibilidade)

---

## Conclusão

A preparação para breach notification não é paranoia — é diligência. Empresas que processam dados de CPF devem ter planos de resposta a incidentes documentados, testados e prontos para execução imediata. A combinação de sistemas de detecção automatizados, processos claros de notificação e comunicação transparente com a ANPD e os titulares pode ser a diferença entre uma crise controlada e um desastre reputacional.

Utilize APIs que operem com os mais altos padrões de segurança para minimizar riscos desde a origem. Cadastre-se em [cpfhub.io](https://www.cpfhub.io/) — 50 consultas mensais gratuitas, sem cartão de crédito.

