NOTÍCIA

Bug de 2038 já tem data marcada e o seu código de 32 bits está na lista

Bug de 2038 já tem data marcada e o seu código de 32 bits está na lista
Imagem: Redação iMasters

Bug do milênio ficou famoso pelo apagão que nunca chegou. O sucessor dele, porém, já tem hora exata: 19 de janeiro de 2038, às 03h14min07s UTC. O apelido técnico é Y2K38. O alvo é todo sistema que ainda guarda tempo em um inteiro assinado de 32 bits. Para quem escreve código, essa data importa por um motivo simples. Ela cobra uma suposição antiga que atravessou décadas de infraestrutura.

Bug nasce de um contador que chega ao teto

Sistemas Unix contam o tempo em segundos desde 1º de janeiro de 1970. Esse marco ganhou o nome de Unix Epoch. Depois, o padrão se espalhou por bancos de dados, protocolos de rede, linguagens e sistemas embarcados. Quando o contador vive em um inteiro assinado de 32 bits, o valor máximo fica em 2.147.483.647 segundos. Portanto, o estouro acontece às 03h14min07s UTC de 19 de janeiro de 2038, ou 0h14min07s em Brasília. Em seguida, o valor vira negativo e o relógio salta para dezembro de 1901. Em alguns casos, o sistema aterrissa direto em janeiro de 1970.

Bug ignora o seu servidor e mira o que roda há dez anos

Servidores modernos já usam time_t de 64 bits. Assim, o teto se muda para bilhões de anos à frente. O risco real mora em outro lugar. Ele vive em firmware embarcado, controladores industriais, gateways de IoT, roteadores, terminais de pagamento, câmeras, medidores e equipamentos médicos. Esses aparelhos costumam operar por vinte anos. Além disso, muitos deles nunca receberam uma atualização depois da instalação.

Seis lugares onde o estouro espera dentro do seu stack

Vale mapear os pontos clássicos antes de qualquer coisa. Seguem os suspeitos mais comuns:

  1. time_t em binários compilados para arquiteturas de 32 bits, como ARM e MIPS.
  2. Colunas TIMESTAMP no MySQL, que terminam exatamente em 19 de janeiro de 2038.
  3. Formatos binários proprietários com campo de quatro bytes para data.
  4. Protocolos legados que trafegam epoch como inteiro de 32 bits.
  5. Bibliotecas antigas de manipulação de datas mantidas por compatibilidade.
  6. Builds de PHP e Perl de 32 bits ainda vivos em servidores esquecidos.

Por exemplo, uma coluna TIMESTAMP parece inofensiva até o dia em que uma regra de negócio grava um vencimento em 2039. Ou seja, o estouro chega bem antes de 2038 para quem trabalha com datas futuras.

Bug derruba o TLS antes de derrubar a aplicação

Certificados carregam janelas de validade. Quando o relógio informa 1901, toda validação falha. Logo, o dispositivo perde a rede, perde as APIs e perde o broker MQTT. A ironia aparece justamente nesse ponto. O equipamento perde o canal que entregaria a correção por atualização remota. Portanto, uma falha de data se transforma em falha de conectividade.

Bug de 2038 também é superfície de ataque

Pesquisadores tratam o Y2K38 como vulnerabilidade, e a lógica é direta. Quem controla o relógio de um dispositivo antecipa o estouro na hora que quiser. Um servidor NTP falso já resolve a tarefa. Sinais falsos de GPS fazem o mesmo em equipamentos que sincronizam via satélite. Depois disso, o atacante ganha validação de certificado quebrada, expiração de token bagunçada e log sem ordem cronológica. Ambientes industriais recebem correções devagar, então o cenário fica ainda mais atraente para o invasor.

Kernel e libc já entregaram a parte deles

O Linux 5.6 levou suporte a tempo de 64 bits para arquiteturas de 32 bits. A glibc 2.34 permite compilar com _TIME_BITS=64 junto de _FILE_OFFSET_BITS=64. Distribuições como o Ubuntu 24.04 já fizeram a transição do armhf. Ainda assim, cada binário precisa ser recompilado para aproveitar o ganho. A mudança altera a ABI, ou seja, biblioteca e aplicação precisam concordar. Por isso, o trabalho vira coordenação de toolchain, dependências e imagens de firmware.

Como testar o relógio de 2038 ainda nesta sprint

Primeiro, levante um ambiente isolado, como um container ou uma máquina virtual dedicada. Depois, avance o relógio para 03h14min06s UTC de 19 de janeiro de 2038 e observe a virada. Ferramentas como libfaketime ajudam quando mexer no relógio do host sai caro. Em seguida, teste os três instantes de fronteira: um segundo antes, o próprio limite e um segundo depois. Verifique agendadores, cron, filas, renovação de certificado, expiração de JWT, cálculo de idade e ordenação de logs. Por fim, registre o resultado por serviço e por dispositivo, porque o inventário vale mais do que a suposição.

Bug de 2038 é dívida técnica com prazo de validade

Faltam mais de onze anos, e o número engana. Hardware industrial instalado hoje ainda estará em campo naquela data. Portanto, a decisão de compra desta semana já define parte da exposição. Comece pelo inventário, cobre suporte dos fabricantes e valide tudo em ambiente controlado. O bug do milênio passou em silêncio graças ao trabalho feito antes do prazo. O Y2K38 seguirá o mesmo roteiro, desde que o esforço comece agora.

Acompanhe nosso perfil no Instagram!

Matérias especiais e reportagens conduzidas internamente pela Redação iMasters. Acompanhe no Twitter @imasters e no Instagram/Threads @portalimasters

Ver perfil