Message ID | 20241113130209.22376-1-aha310510@gmail.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] netfilter: ipset: add missing range check in bitmap_ip_uadt | expand |
On 11/13/24 14:02, Jeongjun Park wrote: > When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists, > the values of ip and ip_to are slightly swapped. Therefore, the range check > for ip should be done later, but this part is missing and it seems that the > vulnerability occurs. > > So we should add missing range checks and remove unnecessary range checks. > > Cc: <stable@vger.kernel.org> > Reported-by: syzbot+58c872f7790a4d2ac951@syzkaller.appspotmail.com > Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support") > Signed-off-by: Jeongjun Park <aha310510@gmail.com> @Pablo, @Jozsef: despite the subj prefix, I guess this should go via your tree. Please LMK if you prefer otherwise. Cheers, Paolo
On Thu, Nov 14, 2024 at 12:10:05PM +0100, Paolo Abeni wrote: > On 11/13/24 14:02, Jeongjun Park wrote: > > When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists, > > the values of ip and ip_to are slightly swapped. Therefore, the range check > > for ip should be done later, but this part is missing and it seems that the > > vulnerability occurs. > > > > So we should add missing range checks and remove unnecessary range checks. > > > > Cc: <stable@vger.kernel.org> > > Reported-by: syzbot+58c872f7790a4d2ac951@syzkaller.appspotmail.com > > Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support") > > Signed-off-by: Jeongjun Park <aha310510@gmail.com> > > @Pablo, @Jozsef: despite the subj prefix, I guess this should go via > your tree. Please LMK if you prefer otherwise. Thanks Paolo. Patch LGTM. I am waiting for Jozsef to acknowledge this fix.
On Wed, 13 Nov 2024, Jeongjun Park wrote: > When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists, > the values of ip and ip_to are slightly swapped. Therefore, the range check > for ip should be done later, but this part is missing and it seems that the > vulnerability occurs. > > So we should add missing range checks and remove unnecessary range checks. > > Cc: <stable@vger.kernel.org> > Reported-by: syzbot+58c872f7790a4d2ac951@syzkaller.appspotmail.com > Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support") > Signed-off-by: Jeongjun Park <aha310510@gmail.com> Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org> The patch should be applied to the stable branches too. Thanks! Best regards, Jozsef > --- > net/netfilter/ipset/ip_set_bitmap_ip.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/net/netfilter/ipset/ip_set_bitmap_ip.c b/net/netfilter/ipset/ip_set_bitmap_ip.c > index e4fa00abde6a..5988b9bb9029 100644 > --- a/net/netfilter/ipset/ip_set_bitmap_ip.c > +++ b/net/netfilter/ipset/ip_set_bitmap_ip.c > @@ -163,11 +163,8 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *tb[], > ret = ip_set_get_hostipaddr4(tb[IPSET_ATTR_IP_TO], &ip_to); > if (ret) > return ret; > - if (ip > ip_to) { > + if (ip > ip_to) > swap(ip, ip_to); > - if (ip < map->first_ip) > - return -IPSET_ERR_BITMAP_RANGE; > - } > } else if (tb[IPSET_ATTR_CIDR]) { > u8 cidr = nla_get_u8(tb[IPSET_ATTR_CIDR]); > > @@ -178,7 +175,7 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *tb[], > ip_to = ip; > } > > - if (ip_to > map->last_ip) > + if (ip < map->first_ip || ip_to > map->last_ip) > return -IPSET_ERR_BITMAP_RANGE; > > for (; !before(ip_to, ip); ip += map->hosts) { > -- >
On Thu, 14 Nov 2024, Pablo Neira Ayuso wrote: > On Thu, Nov 14, 2024 at 12:10:05PM +0100, Paolo Abeni wrote: > > On 11/13/24 14:02, Jeongjun Park wrote: > > > When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists, > > > the values of ip and ip_to are slightly swapped. Therefore, the range check > > > for ip should be done later, but this part is missing and it seems that the > > > vulnerability occurs. > > > > > > So we should add missing range checks and remove unnecessary range checks. > > > > > > Cc: <stable@vger.kernel.org> > > > Reported-by: syzbot+58c872f7790a4d2ac951@syzkaller.appspotmail.com > > > Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support") > > > Signed-off-by: Jeongjun Park <aha310510@gmail.com> > > > > @Pablo, @Jozsef: despite the subj prefix, I guess this should go via > > your tree. Please LMK if you prefer otherwise. > > Patch LGTM. I am waiting for Jozsef to acknowledge this fix. Sorry for the delay at acking the patch. Please apply it to the stable branches too because those are affected as well. Best regards, Jozsef
On Thu, Nov 14, 2024 at 12:46:29PM +0100, Jozsef Kadlecsik wrote: > On Thu, 14 Nov 2024, Pablo Neira Ayuso wrote: > > > On Thu, Nov 14, 2024 at 12:10:05PM +0100, Paolo Abeni wrote: > > > On 11/13/24 14:02, Jeongjun Park wrote: > > > > When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists, > > > > the values of ip and ip_to are slightly swapped. Therefore, the range check > > > > for ip should be done later, but this part is missing and it seems that the > > > > vulnerability occurs. > > > > > > > > So we should add missing range checks and remove unnecessary range checks. > > > > > > > > Cc: <stable@vger.kernel.org> > > > > Reported-by: syzbot+58c872f7790a4d2ac951@syzkaller.appspotmail.com > > > > Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support") > > > > Signed-off-by: Jeongjun Park <aha310510@gmail.com> > > > > > > @Pablo, @Jozsef: despite the subj prefix, I guess this should go via > > > your tree. Please LMK if you prefer otherwise. > > > > Patch LGTM. I am waiting for Jozsef to acknowledge this fix. > > Sorry for the delay at acking the patch. Please apply it to the stable > branches too because those are affected as well. No problem, preparing PR. Thanks Jozsef.
diff --git a/net/netfilter/ipset/ip_set_bitmap_ip.c b/net/netfilter/ipset/ip_set_bitmap_ip.c index e4fa00abde6a..5988b9bb9029 100644 --- a/net/netfilter/ipset/ip_set_bitmap_ip.c +++ b/net/netfilter/ipset/ip_set_bitmap_ip.c @@ -163,11 +163,8 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *tb[], ret = ip_set_get_hostipaddr4(tb[IPSET_ATTR_IP_TO], &ip_to); if (ret) return ret; - if (ip > ip_to) { + if (ip > ip_to) swap(ip, ip_to); - if (ip < map->first_ip) - return -IPSET_ERR_BITMAP_RANGE; - } } else if (tb[IPSET_ATTR_CIDR]) { u8 cidr = nla_get_u8(tb[IPSET_ATTR_CIDR]); @@ -178,7 +175,7 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *tb[], ip_to = ip; } - if (ip_to > map->last_ip) + if (ip < map->first_ip || ip_to > map->last_ip) return -IPSET_ERR_BITMAP_RANGE; for (; !before(ip_to, ip); ip += map->hosts) {
When tb[IPSET_ATTR_IP_TO] is not present but tb[IPSET_ATTR_CIDR] exists, the values of ip and ip_to are slightly swapped. Therefore, the range check for ip should be done later, but this part is missing and it seems that the vulnerability occurs. So we should add missing range checks and remove unnecessary range checks. Cc: <stable@vger.kernel.org> Reported-by: syzbot+58c872f7790a4d2ac951@syzkaller.appspotmail.com Fixes: 72205fc68bd1 ("netfilter: ipset: bitmap:ip set type support") Signed-off-by: Jeongjun Park <aha310510@gmail.com> --- net/netfilter/ipset/ip_set_bitmap_ip.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) --