Ataque Hacker às Geladeiras de Supermercados na França: Lições de IoT em 2026
Olá HaWkers, na noite de domingo, 11 de outubro de 2026, centenas de supermercados na França amanheceram com geladeiras e freezers fora do ar. Os atacantes não roubaram dados de cartão nem pediram resgate em criptomoeda: eles acionaram remotamente o degelo automático dos controladores de refrigeração. Resultado: estoques de frescos e congelados descartados, investigação aberta pela promotoria de Paris e relatos de incêndios em algumas lojas.
Você já parou para pensar quantos equipamentos "burros" da sua empresa estão, na verdade, conectados à internet com um painel web esquecido? Neste artigo vamos entender o que se sabe até agora sobre o ataque, quais falhas conhecidas existem nesse tipo de controlador, e principalmente o que você, como desenvolvedor ou pessoa de infraestrutura, pode fazer amanhã cedo para não ser o próximo caso.
O Que Aconteceu nos Supermercados Franceses
Segundo o BleepingComputer, os atacantes agiram durante a madrugada e sequestraram controladores de refrigeração que rodavam versões antigas do software de controle da Danfoss, fabricante dinamarquesa de equipamentos de refrigeração e climatização. Em vez de desligar as máquinas, eles dispararam o ciclo de degelo automático, uma função legítima que aquece o evaporador para derreter o gelo acumulado. Mantido ligado por horas, esse ciclo faz a temperatura dos expositores subir até estragar tudo o que está dentro.
Os números variam conforme a fonte, então vale olhar com cuidado:
- Intermarché e Netto: pelo menos 300 lojas atingidas, segundo a AFP
- Coopérative U: mais de 100 unidades afetadas
- E.Leclerc: várias lojas, e a rede confirmou que o ataque atingiu um dos seus fornecedores de equipamentos de refrigeração
- Carrefour: a empresa falou em 80 supermercados atacados, de um total de cerca de 6.000 lojas
- Monoprix e Carrefour Market foram citados por sites do setor, mas sem confirmação oficial no primeiro momento
Veículos franceses chegaram a estimar entre 250 e 350 lojas afetadas, enquanto a soma dos números divulgados pelas próprias redes passa disso. A CNBC relatou equipamentos aquecendo até 50 °C. O presidente da Coopérative U, Dominique Schelcher, chamou o ataque de "sem precedentes" e afirmou que ele mirou equipamentos essenciais para conservar produtos frescos. O Intermarché informou que as lojas atingidas precisariam descartar todos os produtos frescos e congelados.
A Resposta da Danfoss e do Governo Francês
A Danfoss declarou que a maior parte dos equipamentos afetados era de produtos "legados", que não recebem mais atualizações de software nem de segurança. A empresa citou os reguladores AK-SM800 e AK-SC355 e disse que uma versão do AK-SM800 rodava firmware desatualizado. Segundo o fabricante, os supermercados vinham sendo orientados há tempos a atualizar esses modelos.
Do lado do governo, uma pessoa próxima ao primeiro-ministro Sébastien Lecornu disse que a agência nacional de cibersegurança da França (ANSSI) já havia identificado "uma vulnerabilidade em um software fornecido por uma empresa dinamarquesa", entrou em contato com o fornecedor e está coordenando a resposta com agências europeias. A promotoria de Paris abriu investigação sobre o "ciberataque de grande escala" que atingiu refrigeradores de várias redes de varejo alimentar, com o objetivo de identificar as vítimas e ligar o ataque às perdas de alimentos e aos incêndios relatados.
O comissário europeu de Agricultura, Christophe Hansen, escreveu no X que "a segurança alimentar exige mais atenção em todos os níveis". Até o momento desta publicação, nenhum autor foi oficialmente identificado. O contexto político ajuda a entender a tensão: no mês anterior, o presidente Emmanuel Macron havia ordenado medidas para proteger a infraestrutura crítica do país contra "ataques híbridos" russos. Mas ligar uma coisa à outra, por enquanto, é especulação.
No mesmo dia, a holandesa Ahold Delhaize informou que tirou alguns sistemas do ar por causa de um "incidente de cibersegurança". Não há, até agora, evidência de que os dois casos estejam conectados.
Por Que Isso Não É Surpresa Para Quem Trabalha com IoT
Se você acompanha segurança de sistemas industriais, o ataque assusta pela escala, mas não pelo método. Em fevereiro de 2019, o TechCrunch já noticiava controladores de refrigeração industrial conectados à internet que podiam ser descongelados remotamente porque continuavam com a senha padrão de fábrica. Sete anos depois, o padrão se repete.
Os controladores Danfoss da família AK-SM 800A também têm histórico recente de falhas documentadas. Pesquisadores da Claroty Team82 publicaram três vulnerabilidades, corrigidas no firmware R4.3.1:
- CVE-2025-41450: um mecanismo oculto de autenticação chamado "code-of-the-day". O controlador gera uma senha diária a partir da data atual; ao reconstruir o algoritmo, um atacante poderia contornar a senha de administrador configurada.
- CVE-2025-41451: injeção de comando nas configurações de SMTP. A senha de autenticação de e-mail era montada em um comando de shell sem sanitização, abrindo caminho para execução remota de código.
- CVE-2025-41452: injeção de diretivas no arquivo de cabeçalhos do Nginx por um usuário autenticado, derrubando o serviço de gerenciamento (negação de serviço).
Importante: até agora, nenhuma fonte oficial confirmou que essas CVEs foram usadas no ataque francês. Elas mostram, porém, o tipo de superfície que esses equipamentos expõem quando ficam acessíveis pela internet.
E a exposição é real. Uma varredura do Censys citada na época da divulgação apontou 2.765 dispositivos com interface acessível pela internet. Já depois do ataque, Baptiste Robert, CEO da Predicta Lab, contou 2.752 sistemas Danfoss expostos, sendo 1.590 na França. O BleepingComputer cita ainda mais de 4.500 dispositivos Danfoss rastreados pelo Shodan.
O problema de fundo é conhecido de quem já trabalhou com tecnologia operacional (OT): o equipamento dura 10 ou 15 anos, o fabricante para de dar suporte bem antes disso, e o painel web que um técnico liberou "só para acessar de casa" continua aberto muito depois de todo mundo esquecer que ele existe.
Passo 1: Descubra o Que Você Tem Exposto
Você não protege o que não conhece. O primeiro passo é um inventário dos seus próprios endereços públicos, procurando interfaces de gerenciamento que não deveriam estar ali. O script abaixo faz uma checagem simples nos IPs que pertencem à sua organização e procura assinaturas comuns de painéis de equipamentos embarcados.
# inventario_exposicao.py
# Verifica se IPs públicos da SUA organização respondem com painéis de
# gerenciamento de equipamentos embarcados. Use apenas em ativos próprios.
import socket
import requests
import urllib3
urllib3.disable_warnings() # muitos equipamentos usam certificado autoassinado
MEUS_IPS = ["203.0.113.10", "203.0.113.11"] # substitua pelos seus IPs
PORTAS = [80, 443, 8080, 8443]
ASSINATURAS = ["danfoss", "ak-sm", "ak-sc", "refrigeration", "hvac", "xweb"]
def porta_aberta(ip: str, porta: int, timeout: float = 2.0) -> bool:
"""Retorna True se a porta TCP aceitar conexão."""
try:
with socket.create_connection((ip, porta), timeout=timeout):
return True
except OSError:
return False
def checar(ip: str, porta: int) -> None:
esquema = "https" if porta in (443, 8443) else "http"
try:
resp = requests.get(f"{esquema}://{ip}:{porta}/", timeout=4, verify=False)
except requests.RequestException:
return
corpo = resp.text.lower()
achados = [a for a in ASSINATURAS if a in corpo]
if achados:
# Qualquer achado aqui é um painel de OT acessível pela internet
print(f"[ALERTA] {ip}:{porta} parece expor gerenciamento: {achados}")
for ip in MEUS_IPS:
for porta in PORTAS:
if porta_aberta(ip, porta):
checar(ip, porta)Esse script não substitui um scanner profissional, mas resolve o caso mais comum: descobrir que aquele IP "da loja 42" responde com a tela de login do controlador de refrigeração. Se você tem uma conta em serviços como Shodan ou Censys, vale também buscar pelos blocos de IP da sua empresa e ver o que o resto do mundo já está vendo.
Passo 2: Compare Firmware com a Versão Mínima Segura
Depois do inventário, o próximo passo é saber quais equipamentos estão abaixo da versão corrigida. No caso dos AK-SM 800A, a referência pública é o firmware R4.3.1. O exemplo abaixo lê um CSV de inventário e marca o que precisa de atualização ou, pior, o que nem tem mais atualização disponível.
# auditoria_firmware.py
# Lê o inventário de equipamentos e aponta firmware abaixo do mínimo seguro.
import csv
import re
# Versão mínima por modelo; None = produto legado sem correção disponível
MINIMO_SEGURO = {
"AK-SM800A": "4.3.1",
"AK-SM800": None, # legado: isolar ou substituir
"AK-SC355": None, # legado: isolar ou substituir
}
def normalizar(versao: str) -> tuple[int, ...]:
"""Converte 'R4.3.1' ou '4.3.1' em (4, 3, 1) para comparação."""
numeros = re.findall(r"\d+", versao)
return tuple(int(n) for n in numeros)
with open("inventario.csv", newline="", encoding="utf-8") as arquivo:
# Colunas esperadas: loja,modelo,firmware,ip_interno
for linha in csv.DictReader(arquivo):
modelo = linha["modelo"].strip().upper()
if modelo not in MINIMO_SEGURO:
continue
minimo = MINIMO_SEGURO[modelo]
if minimo is None:
print(f"[LEGADO] {linha['loja']}: {modelo} sem suporte -> isolar da rede")
elif normalizar(linha["firmware"]) < normalizar(minimo):
print(f"[ATUALIZAR] {linha['loja']}: {modelo} em {linha['firmware']} (mínimo {minimo})")Repare que o caso mais grave não é o firmware desatualizado, é o equipamento legado. Para ele não existe correção. A única defesa é tirar o equipamento do alcance de quem não deveria tocá-lo.
Passo 3: Isole o Equipamento Legado da Internet
Um controlador de refrigeração não precisa responder a qualquer IP do planeta. Ele precisa falar com o sistema de monitoramento da empresa e, eventualmente, com o técnico da manutenção. Isso cabe numa regra de firewall. Abaixo, um exemplo com nftables em um gateway Linux que separa a VLAN de OT do resto da rede:
# /etc/nftables.d/ot-refrigeracao.nft
# Controladores de refrigeração ficam na VLAN 30 (10.30.0.0/24).
# Só a VPN de manutenção e o servidor de monitoramento podem alcançá-los.
table inet ot_refrigeracao {
chain forward {
type filter hook forward priority 0; policy drop;
# Mantém conexões já estabelecidas
ct state established,related accept
# VPN de manutenção (10.99.0.0/24) acessa o painel web
ip saddr 10.99.0.0/24 ip daddr 10.30.0.0/24 tcp dport { 443 } accept
# Servidor de monitoramento coleta telemetria
ip saddr 10.10.0.5 ip daddr 10.30.0.0/24 tcp dport { 443, 502 } accept
# Controladores NÃO iniciam conexão para a internet
ip saddr 10.30.0.0/24 log prefix "OT-SAIDA-BLOQUEADA " drop
}
}Três decisões fazem a diferença aqui. A política padrão é drop, então tudo que não foi liberado explicitamente fica de fora. O acesso remoto passa por VPN com autenticação forte, nunca por porta aberta no roteador. E a saída dos controladores para a internet é bloqueada e registrada em log, o que ajuda a detectar um equipamento comprometido tentando falar com fora.
Se você trabalha com serviços em nuvem, o raciocínio é o mesmo que já vimos em ataques de botnet usando infraestrutura na AWS: o que fica exposto por padrão acaba sendo encontrado por alguém.
Passo 4: Monitore Comportamento, Não Só Acesso
Mesmo com rede segmentada, vale ter um alarme que dispare quando o equipamento faz algo fora do normal. No ataque francês, o sinal estava ali: ciclos de degelo fora do horário programado e temperatura subindo em muitas lojas ao mesmo tempo. O script a seguir analisa leituras de telemetria e levanta alerta nesses dois cenários.
# alerta_degelo.py
# Detecta degelo fora da janela programada e aquecimento anômalo de expositores.
from datetime import datetime, time
from collections import defaultdict
# Janelas de degelo programadas (exemplo: 2h e 14h, 30 minutos cada)
JANELAS_DEGELO = [(time(2, 0), time(2, 30)), (time(14, 0), time(14, 30))]
LIMITE_CONGELADOS_C = -12.0 # acima disso, alerta para congelados
LIMITE_LOJAS_SIMULTANEAS = 3 # várias lojas ao mesmo tempo = possível ataque
def dentro_da_janela(instante: datetime) -> bool:
agora = instante.time()
return any(inicio <= agora <= fim for inicio, fim in JANELAS_DEGELO)
def analisar(leituras: list[dict]) -> None:
"""Cada leitura: {'loja', 'equipamento', 'instante', 'temp_c', 'degelo_ativo'}"""
lojas_suspeitas = defaultdict(list)
for l in leituras:
instante = datetime.fromisoformat(l["instante"])
if l["degelo_ativo"] and not dentro_da_janela(instante):
lojas_suspeitas[l["loja"]].append(f"degelo fora da janela em {l['equipamento']}")
if l["equipamento"].startswith("congelado") and l["temp_c"] > LIMITE_CONGELADOS_C:
lojas_suspeitas[l["loja"]].append(f"{l['equipamento']} a {l['temp_c']} °C")
for loja, motivos in lojas_suspeitas.items():
print(f"[ALERTA] loja {loja}: {'; '.join(motivos)}")
# Muitas lojas ao mesmo tempo indicam ação coordenada, não defeito isolado
if len(lojas_suspeitas) >= LIMITE_LOJAS_SIMULTANEAS:
print(f"[CRÍTICO] {len(lojas_suspeitas)} lojas com anomalia simultânea: acionar resposta a incidente")O detalhe mais importante está no final: um freezer quebrado é manutenção; trinta freezers esquentando na mesma madrugada são um incidente de segurança. Correlacionar eventos entre unidades é o que transforma telemetria operacional em detecção de ataque.
O Que Isso Ensina Para Quem Escreve Software
Pode parecer que esse é um problema só de quem cuida de rede de supermercado, mas as lições valem para qualquer pessoa que escreve software que controla algo físico, de uma fechadura inteligente a um painel de IoT com JavaScript:
- Senhas "mágicas" são dívida de segurança. O "code-of-the-day" da CVE-2025-41450 é um atalho de suporte que virou porta dos fundos. Se o seu produto tem acesso de manutenção, ele precisa de credencial única por dispositivo e registro de uso.
- Nunca monte comando de shell com entrada do usuário. A CVE-2025-41451 é o clássico: um campo de senha de SMTP concatenado num comando. Use as APIs da linguagem com lista de argumentos, nunca uma string única.
- Planeje o fim da vida do produto. Equipamento que fica 15 anos em campo precisa de um plano para quando o suporte acabar: modo offline seguro, desativação do painel remoto ou aviso claro ao cliente.
- Funções legítimas também viram arma. O degelo é uma função normal. O que faltou foi limite: quanto tempo ele pode ficar ativo, quem pode acioná-lo fora de hora e o que acontece se a temperatura passar do seguro.
Esse último ponto é o mais interessante do ponto de vista de engenharia. Um controlador bem projetado poderia recusar um degelo que deixasse congelados acima de um limite por muito tempo, independentemente de quem deu o comando. Travas de segurança no próprio dispositivo protegem até quando a autenticação falha.
Perspectivas: A Segurança Alimentar Virou Assunto de Cibersegurança
O ataque francês deve acelerar uma conversa que o setor de varejo vinha adiando. Na União Europeia, a diretiva NIS2 já amplia as obrigações de cibersegurança para setores considerados essenciais, e a fala do comissário Hansen indica que a cadeia de alimentos deve ganhar mais atenção. Do lado dos fabricantes, a pressão será para manter suporte por mais tempo e eliminar mecanismos de acesso escondidos.
Para quem trabalha com tecnologia, a mensagem é prática: faça hoje o inventário do que está exposto, isole o que não tem correção e crie alertas que olhem para o comportamento dos equipamentos. Nenhum desses passos exige orçamento gigante, mas todos exigem que alguém lembre que a geladeira também é um computador.
Bora pra cima! 🦅
📚 Quer Acompanhar o Que Vem Por Aí?
Este artigo cobriu o ataque às geladeiras dos supermercados franceses e como proteger IoT industrial, mas o ecossistema muda toda semana e nem tudo vira artigo aqui.
No X eu compartilho o que estou testando, os bastidores dos projetos e as novidades que aparecem antes de virarem post.
Me Segue Lá
💡 Conteúdo diário sobre desenvolvimento, carreira e as ferramentas que eu realmente uso

