Quando um incidente de segurança envolve dados de CPF, a LGPD exige que o controlador notifique a 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
- Detecção: identificação do incidente por sistemas de monitoramento ou denúncia.
- Contenção: ações imediatas para limitar a extensão do vazamento.
- Avaliação: análise do escopo, tipo de dados afetados e número de titulares.
- Notificação à ANPD: comunicação formal dentro do prazo legal.
- Notificação aos titulares: comunicação clara e acessível.
- Remediação: correção das vulnerabilidades e implementação de melhorias.
- Documentação: registro completo do incidente para auditoria.
Sistema automatizado de detecção e resposta
Detector de anomalias em acessos a CPF
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
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
# 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.
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 — 50 consultas mensais gratuitas, sem cartão de crédito.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



