Skip to content

hotfix/cve-as-a-service #275

@marcialwushu

Description

@marcialwushu

hotfix/cve-as-a-service

  1. Título criativo e provocativo

(como se fosse o nome de uma branch que ninguém ousa apagar)

merge/linux-6.x⚠️: quando o kernel vira backlog do SRE


  1. Introdução leve, irônica ou autozoada

(traga o leitor pra dentro como se estivesse contando uma história no Slack)

Sabe aquela segunda-feira em que você abre o Slack, respira fundo e pensa “hoje eu foco nas minhas tasks”? Então, o Linux Kernel ouviu, riu e respondeu com uma chuva de CVEs que parece release notes de app bancário em fim de sprint: “corrigimos pequenos bugs e… escalada de privilégios”. A sensação é de acordar num data center onde o pcie_failed_link_retrain() é o Ctrl+Z da placa-mãe, o amd_pmf_remove() faz double free como quem dá double click, e a pilha de drivers de Wi-Fi te olha com a mesma confiança de um regex sem timeout.


  1. Apresentação da(s) notícia(s)

(para quem já perdeu produção às 3h da manhã)

Resumo do apocalipse em lotes:

PCI: o CVE-2025-39784 acerta o pcie_failed_link_retrain(). Quando a renegociação do link falha, o kernel tenta voltar à velocidade anterior mas… lê bits indevidos antes de mascarar. É tipo “rollback” que consulta a tabela errada. Corrigido upstream.

AMD PMF (platform/x86/amd): CVE-2025-38421, clássico double free ao descarregar o módulo se a inicialização falhou. É o equivalente de demitir a mesma pessoa duas vezes no mesmo e-mail. Corrigido upstream também.

Wi-Fi / ieee80211/carl9170: CVE-2025-38420 — NULL deref por cutucar dispositivo cujo firmware falhou. “Se tá morto, não pinga”. Patch aplicado.

remoteproc: CVE-2025-38419 (e parentes) — vazamentos por má faxina ao lidar com rproc_handle_resources()/rproc_attach(). Lindo para lateral movement quando há caminho até esses subsistemas em SoCs; péssimo para uptime.

Intel ICE (rede): CVE-2025-38417 — leak no caminho de reset do eswitch. Pense numa piscina de memórias vazando no porão do data plane. Corrigido.

virtio-net + AF_XDP: CVE-2025-38413 — checagem de comprimento em xsk_pool_get_rx_frame_size() falhava e podia estourar buffer. Só alegria para quem ama pacotinhos velozes. Patch publicado.

fd housekeeping: CVE-2025-38409 — put_unused_fd() em caminho de erro do DRM/MSM vazava. Porque nada diz “sexta-feira” como file descriptors órfãos.

irq_sim: CVE-2025-38408 — inicialização incompleta (kzalloc vs kmalloc); ponteiros com “lixo cósmico” levam a acessos inválidos. Corrigido para usar kzalloc().

Squashfs: CVE-2025-38415 — leitura fora dos limites durante mount em cenários estressados (obrigado, syzkaller). Patchado.

Outros pingos do inferno: dell-wmi-sysman NULL deref (CVE-2025-38412), loop infinito em netfs::ki_complete (CVE-2025-38411), leak no msm::drm_sched_entity_push_job (CVE-2025-38410). Em parte surgiram primeiro em agregadores (VulDB/feeds) e foram sendo varridos pelos vendors. Moral da história: mantenha um olho no NVD e outro no changelog do kernel.

Bônus meta-bug: alguns feeds descreviam a CVE-2025-38416 como try_module_get → priv-esc. Já os advisories oficiais apontam para NFC NCI UART com correção no caminho de disc_data. Ou seja, às vezes o feed chega antes da errata… ou chega torto. Verifique a fonte antes de estourar janela de manutenção.


  1. Opinião pessoal

(agora é hora da filosofia de terminal)

Nada disso é “o fim do Linux”. É só a vida real do maior monorepo do planeta, escrito em C, abraçado por bilhões de hardwares, com drivers que nasceram em 2009 e voltam do git blame como aquele commit meia-noite “fix attempt (pls work)”. O kernel é a sua aplicação legada perfeita: performático, amado, e sempre com um TODO: escondido num #ifdef.

O padrão aqui não é “0-days hollywoodianos com worm GIF animado”, e sim uma coleção de falhas de borda — resource leaks, checagens de tamanho, ordens de chamada, estados de erro mal tratados. O tipo de coisa que o seu linter finge ver, o code review acha chato, e o syzkaller descobre com um palito de dente. É também o retrato do nosso ofício: complexidade não perdoa. Mais threads + mais caminhos de erro + mais “só um hotpathzinho” = mais CVE-driven development.

Se você é SRE/DevSec/Infra, leia esta leva como um post-mortem preventivo:

Ataque local ≠ irrelevante. Em 2025, cadeia de ataque é Lego: macro → userland foothold → LPE → contêiner → kernel; “só local” é o degrau favorito do atacante paciente.

É LTS que fala, né? Muita correção já foi para stable (5.15/6.1/6.6/6.12/6.15/6.16). O risco é você estar num -rc ou num vendor kernel que atrasou backport. Verifique sua distro/AMI, especialmente em node groups de Kubernetes onde “imutável” virou “imutável até sexta”.

Live patching salva janelas: kpatch/kGraft/Ksplice não resolvem tudo, mas compram tempo. E tempo é a moeda dos incidentes.

Observabilidade não compila bug de memória. eBPF é lindo, mas double free não vira “evento bonito no Kibana”. Garanta crash dump, panic_on_oops, e uma história para rotação de nós (cordon/drain) sem teatro.

Política de módulos: reduzir superfície de ataque ainda paga. Menos drivers carregados, menos “surpresas”. Try before you modprobe.

Esteiras de kernel: trate kernel como aplicativo crítico. Watch do NVD/Red Hat/Ubuntu, SLO de atualização, runbooks por família (PCI, net, wifi, drm). E marque no calendário “a cada CVE novo, um teste de boot com systemd.unit=rescue.target para os valentes”.

Metáfora dev para amarrar: isto tudo escalou mais rápido que microserviço sem observabilidade e caiu com a elegância de pod com imagePullPolicy: Never. A diferença é que, quando o kernel tropeça, o resto do castelo despenca junto.


  1. Fechamento reflexivo ou provocador

(“isso daria um pull request filosófico...”)

Talvez o kernel seja nosso memento mori técnico: lembra que todo free() precisa de um NULL, que todo “rollback simples” precisa mascarar bits, que drivers envelhecem como TODOs. E lembra também que segurança não é sprint — é daemon. Ele roda em segundo plano, consome memória, irrita às vezes, mas sem ele nada sobe.

No fim, a pergunta não é “tem CVE no kernel?” — é “qual a nossa cadência para domesticar o caos?”. Porque enquanto a gente discute story points, o syzkaller não dorme, e a entropia… faz git push --force.


Leituras oficiais para quem precisa sair da poesia e ir pro patch window:
CVE-2025-39784 (PCI retrain), CVE-2025-38421 (AMD PMF double free), CVE-2025-38420 (wifi/carl9170 NULL deref), CVE-2025-38419 (remoteproc leaks), CVE-2025-38417 (ICE leak), CVE-2025-38413 (virtio-net/AF_XDP len check), CVE-2025-38409 (put_unused_fd), CVE-2025-38408 (irq_sim init). E atenção às descrições divergentes da CVE-2025-38416 entre feeds e vendor.

“Tudo certo, nada resolvido.” — DevComputariaHub, vendo dmesg rolar como poesia slam.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions