hotfix/cve-as-a-service
- 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
- 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.
- 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.
- 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.
- 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.
hotfix/cve-as-a-service
(como se fosse o nome de uma branch que ninguém ousa apagar)
merge/linux-6.x⚠️ : quando o kernel vira backlog do SRE
(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.
(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.
(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.
(“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.