{"id":"CVE-2026-98485","kind":"vulnerability","aliases":["CVE-2026-98485"],"related":[],"title":"Linux kernel: crafted IPv6 packet triggers out-of-bounds read in netfilter","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: ip6t_rt: fix zero-address non-strict match out-of-bounds read\n\nrt_mt6_check() permits rules to be configured with rtinfo->addrnr == 0\neven when address matching (IP6T_RT_FST_MASK) is requested.\n\nIn the IP6T_RT_FST_NSTRICT path, rt_mt6() evaluates packet routing\naddresses against rtinfo->addrs[i] and terminates backwards at the bottom\nof the loop:\n\n    if (ipv6_addr_equal(ap, &rtinfo->addrs[i])) {\n        i++;\n    }\n    if (i == rtinfo->addrnr)\n        break;\n\nWhen addrnr is 0, if the first packet address matches rtinfo->addrs[0],\ni is incremented to 1. Because i is now strictly greater than addrnr (0),\nthe loop termination condition (i == rtinfo->addrnr) is bypassed and will\nnever be satisfied.\n\nIf a crafted IPv6 packet contains matching routing addresses, i will\nadvance past IP6T_RT_HOPS (16). The subsequent call to ipv6_addr_equal()\nreads beyond struct ip6t_rt, triggering UBSAN/KASAN out-of-bounds warnings\nor kernel panics.\n\nFix this by:\n1. Rejecting rules in rt_mt6_check() where IP6T_RT_FST_MASK is set but\n   rtinfo->addrnr is zero.\n2. In rt_mt6(), moving the termination condition (i < rtinfo->addrnr)\n   into the for-loop header condition and removing the backwards break\n   at the end of the loop body.","summary":"The netfilter ip6t_rt match module lets a rule with zero addresses and non-strict address matching loop past its array bounds. A crafted IPv6 packet with matching routing addresses makes the kernel read beyond the rule structure, causing kernel warnings or a crash.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["infrastructure","ipv6","linux","netfilter","self-hosted"],"not_affected_if":["no-ip6t-rt-rules","no-ipv6"],"how_to_check":"- Check the running kernel version with `uname -r` and compare it to the fixed kernel release in the linked kernel commits.\n- Look for netfilter rules using the `rt` match with `--rt-type` or `--rt-segsleft` address matching in `ip6tables-save` output, for example `ip6tables-save | grep 'rt'`.","fix":"- Update the Linux kernel to a release that includes the upstream fix for ip6t_rt (the fix rejects rules with address matching and zero addresses, and fixes the loop termination).\n- Until patched, remove any ip6tables rules that use the rt match with address matching options.","status":"open","published_at":"2026-10-18T16:16:59+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","triaged_at":"2026-10-25T05:25:49+00:00","updated_at":"2026-10-25T05:25:49+00:00","category":"infrastructure","confidence":0.6,"triage":{"at":"2026-10-25T05:25:49Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Linux kernel to a release that includes the upstream fix for ip6t_rt (the fix rejects rules with address matching and zero addresses, and fixes the loop termination).\n- Until patched, remove any ip6tables rules that use the rt match with address matching options.","reach":"network","title":"Linux kernel: crafted IPv6 packet triggers out-of-bounds read in netfilter","impact":"medium","summary":"The netfilter ip6t_rt match module lets a rule with zero addresses and non-strict address matching loop past its array bounds. A crafted IPv6 packet with matching routing addresses makes the kernel read beyond the rule structure, causing kernel warnings or a crash.","category":"infrastructure","nicknames":[],"who_cares":["linux","netfilter","ipv6","self-hosted"],"confidence":0.6,"needs_auth":"no","worst_case":"Kernel reads out of bounds, causing crash or warnings; code execution not stated","analyst_note":"Sources give no CVSS score or exploit status; confirm fixed kernel version and whether code execution is possible beyond the out-of-bounds read.","how_to_check":"- Check the running kernel version with `uname -r` and compare it to the fixed kernel release in the linked kernel commits.\n- Look for netfilter rules using the `rt` match with `--rt-type` or `--rt-segsleft` address matching in `ip6tables-save` output, for example `ip6tables-save | grep 'rt'`.","needs_analyst":true,"not_affected_if":["no-ip6t-rt-rules","no-ipv6"],"who_is_affected":"Systems running a Linux kernel with ip6t_rt netfilter matching enabled and IPv6 rules that use the rt match with address-matching options are exposed. Hosts that do not use IPv6 routing-header matches in ip6tables or nftables rules, or that run no netfilter IPv6 rules, can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000732,"input_tokens":3793,"output_tokens":706,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':15A,18A '-98485':16A,19A '0':109C,163C,172C,186C '1':177C,243C '16':217C '2':262C 'addr':135C,148C,152C,171C,223C 'address':38B,43B,57B,88C,112C,132C,168C,209C 'addrnr':108C,158C,161C,185C,193C,259C,272C 'advanc':212C 'ap':150C 'array':48B 'backward':139C,283C 'beyond':62B,226C 'bodi':291C 'bottom':142C 'bound':10A,49B,96C,235C 'break':159C,284C 'bypass':195C 'call':220C 'caus':66B 'check':100C,249C 'condit':190C,269C,279C 'configur':105C 'contain':206C 'craft':3A,51B,203C 'crash':71B 'cve':14A,17A 'end':287C 'equal':149C,224C 'evalu':129C 'even':110C 'first':166C 'fix':85C,240C 'follow':77C 'for-loop':275C 'fst':116C,124C,253C 'greater':183C 'header':278C 'hop':216C 'host':26B 'increment':175C 'infrastructur':20B 'ip6t':29B,83C,114C,122C,214C,228C,251C 'ipv6':4A,21B,52B,147C,204C,222C 'kernel':2A,60B,67B,75C,238C 'let':33B 'linux':1A,22B,74C 'loop':45B,145C,188C,277C,290C 'make':58B 'mask':117C,254C 'match':31B,44B,55B,92C,113C,169C,207C 'modul':32B 'move':266C 'mt6':99C,128C,248C,265C 'netfilt':13A,23B,28B,82C 'never':198C 'non':41B,90C 'non-strict':40B,89C 'nstrict':125C 'out-of-bound':7A,93C,232C 'packet':5A,53B,130C,167C,205C 'panic':239C 'past':46B,213C 'path':126C 'permit':101C 'read':11A,61B,97C,225C 'reject':244C 'remov':281C 'request':119C 'resolv':81C 'rout':56B,131C,208C 'rt':30B,84C,98C,115C,123C,127C,215C,229C,247C,252C,264C 'rtinfo':107C,134C,151C,157C,170C,192C,258C,271C 'rule':35B,64B,102C,245C 'satisfi':200C 'self':25B 'self-host':24B 'set':256C 'strict':42B,91C,182C 'struct':227C 'structur':65B 'subsequ':219C 'termin':138C,189C,268C 'trigger':6A,230C 'ubsan/kasan':231C 'vulner':78C 'warn':68B,236C 'zero':37B,87C,261C 'zero-address':86C","nicknames":[],"mitigations":[],"who_affected":"Systems running a Linux kernel with ip6t_rt netfilter matching enabled and IPv6 rules that use the rt match with address-matching options are exposed. Hosts that do not use IPv6 routing-header matches in ip6tables or nftables rules, or that run no netfilter IPv6 rules, can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-18T16:16:59+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98485","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98485","severity":null,"published_at":"2026-10-18T16:16:59+00:00","modified_at":"2026-10-19T10:18:59+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","fetched_at":"2026-10-23T22:28:56+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}