← volver
CVE-2010-3904highbajo ataque

CVE-2010-3904

91Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 7.8epss 12%
de la publicación al arma0 días
Publicada en NVD6 dic
1ª PoC19 oct
metasploit20 oct
CISA KEV+4540d
probabilidad de explotación
12%top 4% de las CVE
explotación observada
CISA + VulnCheck
6 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2023-06-02

The impacted product is end-of-life and should be disconnected if still in use.

Resumen

Falha de validação de ponteiros no subsistema RDS (Reliable Datagram Sockets) do kernel Linux permite que um usuário local sem privilégios escale para root através de chamadas sendmsg/recvmsg manipuladas. O CVSS de 7.8 é justificado, mas a exploração prática depende de o atacante conseguir vazar um endereço de memória do kernel (kallsyms/System.map) e de o sistema não ter confinamento SELinux ativo — condições que reduzem bastante o alcance real da falha em produção hoje, mesmo estando ela no catálogo KEV da CISA por exploração histórica confirmada.

Detalle técnico

A função rds_page_copy_user, em net/rds/page.c, foi introduzida no commit 7875e18e (v2.6.30-rc1) para copiar dados de/para buffers de usuário durante operações de socket RDS. O problema é que ela chama diretamente __copy_to_user_inatomic() e __copy_from_user_inatomic() sem antes validar, via access_ok() ou verificação de faixa de endereço, que o ponteiro fornecido pelo usuário (o endereço base de um iovec passado em sendmsg/recvmsg) realmente pertence ao espaço de endereçamento de usuário. Isso é uma falha clássica de validação de entrada (a Red Hat descreve como ausência de checagem de acesso; o NVD/CISA classificam como CWE-20, Improper Input Validation).

Como o kernel confia no endereço fornecido, um atacante local pode montar um struct iovec cujo campo base apunte para um endereço de memória do kernel, em vez de um buffer de usuário legítimo. Dependendo da direção da operação (sendmsg copia dados do usuário para o kernel; recvmsg copia do kernel para o usuário), isso se traduz em leitura ou escrita arbitrária de memória do kernel a partir de um processo sem privilégios.

O vetor de escalonamento típico é sobrescrever uma estrutura de credenciais do processo (struct cred) ou um ponteiro de função no espaço do kernel, elevando o UID do processo atacante para 0. Para isso o atacante precisa conhecer o endereço-alvo, o que normalmente exige leitura de /proc/kallsyms ou /boot/System.map — arquivos que, em configurações restritivas, não são acessíveis a usuários comuns.

Cómo se explota

O pré-requisito mínimo é acesso local a um shell sem privilégios elevados e a capacidade de abrir um socket AF_RDS (família de protocolo 21) via socket(2) — isso não exige capacidade especial além da criação normal de sockets. O atacante então monta chamadas sendmsg/recvmsg com um iovec cujo endereço base é um ponteiro de kernel previamente descoberto, geralmente lendo símbolos do kernel expostos por /proc/kallsyms ou por um mapa de símbolos (System.map) legível.

Red Hat documentou que a exploração é bloqueada na prática pela maioria dos domínios confinados por SELinux (incluindo staff_t e user_t), porque esses perfis normalmente não concedem acesso de leitura ao mapa de símbolos nem permissão "create" em sockets AF_RDS. Isso significa que sistemas com SELinux enforcing e políticas padrão de distribuição têm risco efetivo bem menor do que a nota indica isoladamente.

A falha foi divulgada publicamente por Dan Rosenberg (Virtual Security Research) em 19/10/2010, com PoC e módulo Metasploit disponíveis desde então, o que a tornou trivial de operacionalizar assim que as condições (RDS carregado, kallsyms legível, sem confinamento efetivo) estivessem presentes. A CISA incluiu a CVE no catálogo KEV em maio de 2023 confirmando exploração no mundo real, mas como o kernel afetado é de 2010-2011 e está fora de suporte há anos, a orientação da própria CISA é desconectar/substituir qualquer sistema que ainda rode essas versões, não apenas aplicar patch.

Versiones

Afectadas
Linux kernel antes da versão 2.6.36 (segundo a descrição oficial da CVE). A nota VU#362983 do CERT/CC descreve o intervalo como kernels 2.6.30 até 2.6.38-rc8 — divergência que sugere que o fix nem sempre havia sido integrado em todas as branches de desenvolvimento no momento da publicação; a referência mais confiável para o corte é o próprio commit de correção aplicado a partir de 2.6.36.
Corregidas en
Mainline: kernel 2.6.36 (commit 799c10559d60f159ab2232203f222f18fa3c4a5f). Backports distribuídos: Red Hat Enterprise Linux 5 via RHSA-2010:0792; Red Hat Enterprise Linux 6 via RHSA-2010:0842; openSUSE conforme avisos de outubro/2010, novembro/2010 e fevereiro/2011. Red Hat Enterprise Linux 3, 4 e Red Hat Enterprise MRG não são afetados por não incluírem suporte a RDS.

Cómo protegerse

A correção definitiva é atualizar para kernel 2.6.36 ou posterior, onde o commit upstream 799c10559d60f159ab2232203f222f18fa3c4a5f adiciona a validação de endereço ausente. Distribuições empacotaram backports específicos: Red Hat Enterprise Linux 5 via RHSA-2010:0792 e RHEL 6 via RHSA-2010:0842; openSUSE publicou avisos equivalentes em outubro/2010, novembro/2010 e fevereiro/2011 para seus respectivos kernels.

Se a atualização não for possível de imediato, o paliativo real e documentado pelo fornecedor é impedir o carregamento do módulo RDS: adicionar 'blacklist rds' em /etc/modprobe.d/blacklist (ou 'alias net-pf-21 off' em um arquivo de modprobe.d), garantindo depois que o módulo não esteja já carregado (lsmod | grep rds). Como reforço, remover CAP_SYS_MODULE do conjunto de capacidades global (via /proc/sys/kernel/cap-bound) impede que o módulo seja carregado sob demanda por um usuário local. Nenhuma dessas medidas corrige a falha de validação em si — apenas eliminam a superfície de ataque enquanto o RDS não for necessário.

Restringir a leitura de /proc/kallsyms (kptr_restrict=2) e manter SELinux/AppArmor enforcing com políticas que neguem criação de sockets AF_RDS a usuários não confiáveis reduz a probabilidade de exploração bem-sucedida, mas não é mitigação garantida — é redução de superfície, não correção de root cause. Como o CVE afeta apenas versões de kernel de 2010-2011, hoje o cenário mais provável não é patch pendente e sim sistema legado fora de suporte; nesse caso, a única ação recomendada pela CISA é desconectar ou substituir o sistema.

Cómo detectar

Não há assinatura de rede confiável, pois a exploração é inteiramente local — não trafega em interface de rede monitorável por IDS/NIDS convencional. Em nível de host, os sinais úteis são: criação de sockets da família AF_RDS (protocolo 21) por processos não privilegiados (rastreável via auditd com regra em socket(2) e filtro de família de protocolo), leitura de /proc/kallsyms ou /boot/System.map por usuários comuns, carregamento inesperado do módulo rds.ko (lsmod | grep rds) em hosts onde RDS não é usado por aplicações legítimas, e elevação súbita de UID/GID em processos que antes rodavam sem privilégios — sinal característico de exploração de escalonamento via corrupção de struct cred.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
The rds_page_copy_user function in net/rds/page.c in the Reliable Datagram Sockets (RDS) protocol implementation in the Linux kernel before 2.6.36 does not properly validate addresses obtained from user space, which allows local users to gain privileges via crafted use of the sendmsg and recvmsg system calls.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Productos afectados
n/a · n/a
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.