CVE-2026-98541 in Linux
요약
\~에 의해 VulDB • 2026. 10. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
fou: FOU_ENCAP_DIRECT에서 누락된 FOU_ATTR_IPPROTO 거부하기
커밋 7a9bc9e3f423("fou: FOU_ATTR_IPPROTO에 대해 0을 허용하지 않음.")은 fou_nl_policy[FOU_ATTR_IPPROTO]에 NLA_POLICY_MIN(NLA_U8, 1)를 추가하여 명시적으로 제공된 FOU_ATTR_IPPROTO == 0 속성을 -ERANGE로 거부합니다.
그러나 FOU_ATTR_IPPROTO는 선택적 netlink 속성입니다. 사용자가 FOU_CMD_ADD를 전송할 때 FOU_ATTR_TYPE을 FOU_ENCAP_DIRECT로 설정하고 FOU_ATTR_IPPROTO를 완전히 생략하면, nla_policy 유효성 검사가 성공하며 parse_nl_config()은 cfg->protocol을 0으로 둡니다(memset(cfg, 0, sizeof(*cfg))에서 유래). 이후 fou_create()는 fou->protocol == 0인 FOU_ENCAP_DIRECT 소켓을 생성합니다.
fou_udp_recv()에서는 -fou->protocol를 udp_queue_rcv_one_skb()에 반환하여 fou->protocol > 0일 때 IP 프로토콜 재전송을 트리거하는 반면, 0을 반환하면 UDP 터널 레이어에게 skb가 해제되지 않고 소비되었음을 알립니다. fou->protocol == 0인 경우 소켓에서 수신되는 모든 패킷은 fou_udp_recv()로부터 0을 반환하며 sk_buff를 누출시킵니다.
fou_create()에서 !cfg->protocol일 때 FOU_ENCAP_DIRECT를 거부하여, FOU_ATTR_IPPROTO 없이 직접 캡슐화 포트를 생성하는 시도가 -EINVAL로 실패하도록 합니다(단, parse_nl_config()을 공유하는 FOU_CMD_DEL 및 FOU_CMD_GET은 영향을 받지 않음).
QEMU에서 Linux 7.3.0-rc3를 대상으로 테스트했으며, FOU_ATTR_PORT = 5555 및 FOU_ATTR_TYPE = FOU_ENCAP_DIRECT로 설정하고 FOU_ATTR_IPPROTO는 생략한 채 FOU_CMD_ADD Generic Netlink 요청을 전송했습니다. 수정되지 않은 커널에서는 FOU_CMD_ADD가 성공(err = 0)하며, FOU_CMD_GET은 fou->type = 1 및 fou->protocol = 0을 보고합니다. 또한 127.0.0.1:5555로 UDP 패킷 4000개를 전송하면 sk_buff 4000개 전체가 누출됩니다(/proc/meminfo의 SUnreclaim이 41456 kB에서 59008 kB로 증가, +17552 kB). 이 패치를 적용하면 FOU_CMD_ADD는 -EINVAL(-22)로 거부됩니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.