netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [Coverity] Untrusted user data in kernel
       [not found] <1103247211.3071.74.camel@localhost.localdomain>
@ 2004-12-17  5:15 ` James Morris
  2004-12-17  5:25   ` Patrick McHardy
  2004-12-17 15:10   ` Pavel Machek
  0 siblings, 2 replies; 17+ messages in thread
From: James Morris @ 2004-12-17  5:15 UTC (permalink / raw)
  To: Bryan Fulton; +Cc: netdev, netfilter-devel, linux-kernel

This at least needs CAP_NET_ADMIN.


On Thu, 16 Dec 2004, Bryan Fulton wrote:
> ////////////////////////////////////////////////////////
> // 3:   /net/ipv6/netfilter/ip6_tables.c::do_replace  //
> ////////////////////////////////////////////////////////
>  
> - tainted unsigned scalar tmp.num_counters multiplied and passed to
> vmalloc (1161) and memset (1166) which could overflow or be too large
> 
> Call to function "copy_from_user" TAINTS argument "tmp"
> 
> 1143            if (copy_from_user(&tmp, user, sizeof(tmp)) != 0)
> 1144                    return -EFAULT;
> 
> ...
> 
> TAINTED variable "((tmp).num_counters * 16)" was passed to a tainted
> sink.
> 
> 1161            counters = vmalloc(tmp.num_counters * sizeof(struct
> ip6t_counters));
> 1162            if (!counters) {
> 1163                    ret = -ENOMEM;
> 1164                    goto free_newinfo;
> 1165            }
> 
> TAINTED variable "((tmp).num_counters * 16)" was passed to a tainted
> sink.
> 
> 1166            memset(counters, 0, tmp.num_counters * sizeof(struct
> ip6t_counters));
> 

-- 
James Morris
<jmorris@redhat.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17  5:15 ` [Coverity] Untrusted user data in kernel James Morris
@ 2004-12-17  5:25   ` Patrick McHardy
  2004-12-17  6:45     ` James Morris
  2004-12-17 15:10   ` Pavel Machek
  1 sibling, 1 reply; 17+ messages in thread
From: Patrick McHardy @ 2004-12-17  5:25 UTC (permalink / raw)
  To: James Morris; +Cc: Bryan Fulton, netdev, netfilter-devel, linux-kernel

James Morris wrote:

>This at least needs CAP_NET_ADMIN.
>
It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
replace iptables rules :)

Regards
Patrick

>
>On Thu, 16 Dec 2004, Bryan Fulton wrote:
>  
>
>>////////////////////////////////////////////////////////
>>// 3:   /net/ipv6/netfilter/ip6_tables.c::do_replace  //
>>////////////////////////////////////////////////////////
>> 
>>- tainted unsigned scalar tmp.num_counters multiplied and passed to
>>vmalloc (1161) and memset (1166) which could overflow or be too large
>>
>>Call to function "copy_from_user" TAINTS argument "tmp"
>>
>>1143            if (copy_from_user(&tmp, user, sizeof(tmp)) != 0)
>>1144                    return -EFAULT;
>>
>>...
>>
>>TAINTED variable "((tmp).num_counters * 16)" was passed to a tainted
>>sink.
>>
>>1161            counters = vmalloc(tmp.num_counters * sizeof(struct
>>ip6t_counters));
>>1162            if (!counters) {
>>1163                    ret = -ENOMEM;
>>1164                    goto free_newinfo;
>>1165            }
>>
>>TAINTED variable "((tmp).num_counters * 16)" was passed to a tainted
>>sink.
>>
>>1166            memset(counters, 0, tmp.num_counters * sizeof(struct
>>ip6t_counters));
>>
>>    
>>
>
>  
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17  5:25   ` Patrick McHardy
@ 2004-12-17  6:45     ` James Morris
  2004-12-17 13:18       ` Tomas Carnecky
  2004-12-17 15:47       ` Bill Davidsen
  0 siblings, 2 replies; 17+ messages in thread
From: James Morris @ 2004-12-17  6:45 UTC (permalink / raw)
  To: Patrick McHardy; +Cc: Bryan Fulton, netdev, netfilter-devel, linux-kernel

On Fri, 17 Dec 2004, Patrick McHardy wrote:

> James Morris wrote:
> 
> >This at least needs CAP_NET_ADMIN.
> >
> It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
> replace iptables rules :)

That's what I meant, you need the capability to do anything bad :-)


- James
-- 
James Morris
<jmorris@redhat.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17  6:45     ` James Morris
@ 2004-12-17 13:18       ` Tomas Carnecky
  2004-12-17 19:16         ` David S. Miller
  2004-12-17 15:47       ` Bill Davidsen
  1 sibling, 1 reply; 17+ messages in thread
From: Tomas Carnecky @ 2004-12-17 13:18 UTC (permalink / raw)
  To: James Morris
  Cc: Patrick McHardy, Bryan Fulton, netdev, netfilter-devel,
	linux-kernel

James Morris wrote:
> That's what I meant, you need the capability to do anything bad :-)
> 

But.. even if you have the 'permission' to do bad things, it shouldn't 
be possible.

It's a bug, and only because you can't exploit it if you haven't the 
right capabilities doesn't make the bug disappear.

IMHO such things (passing values between user/kernel space) should 
always be checked.

tom

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17  5:15 ` [Coverity] Untrusted user data in kernel James Morris
  2004-12-17  5:25   ` Patrick McHardy
@ 2004-12-17 15:10   ` Pavel Machek
  2004-12-17 15:38     ` James Morris
  1 sibling, 1 reply; 17+ messages in thread
From: Pavel Machek @ 2004-12-17 15:10 UTC (permalink / raw)
  To: James Morris; +Cc: Bryan Fulton, linux-kernel, netdev, netfilter-devel

Hi!

> This at least needs CAP_NET_ADMIN.

Hmm, but that means that CAP_NET_ADMIN implies all other capabilities,
unless you fix this.

								Pavel

> > TAINTED variable "((tmp).num_counters * 16)" was passed to a tainted
> > sink.
> > 
> > 1161            counters = vmalloc(tmp.num_counters * sizeof(struct
> > ip6t_counters));
> > 1162            if (!counters) {
> > 1163                    ret = -ENOMEM;
> > 1164                    goto free_newinfo;
> > 1165            }
> > 
> > TAINTED variable "((tmp).num_counters * 16)" was passed to a tainted
> > sink.
> > 
> > 1166            memset(counters, 0, tmp.num_counters * sizeof(struct
> > ip6t_counters));


-- 
Boycott Kodak -- for their patent abuse against Java.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 15:10   ` Pavel Machek
@ 2004-12-17 15:38     ` James Morris
  0 siblings, 0 replies; 17+ messages in thread
From: James Morris @ 2004-12-17 15:38 UTC (permalink / raw)
  To: Pavel Machek; +Cc: Bryan Fulton, linux-kernel, netdev, netfilter-devel

On Fri, 17 Dec 2004, Pavel Machek wrote:

> Hi!
> 
> > This at least needs CAP_NET_ADMIN.
> 
> Hmm, but that means that CAP_NET_ADMIN implies all other capabilities,
> unless you fix this.

I'm not saying it doesn't need to be fixed, but that it is not exploitable 
by unprivileged users.


- James
-- 
James Morris
<jmorris@redhat.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17  6:45     ` James Morris
  2004-12-17 13:18       ` Tomas Carnecky
@ 2004-12-17 15:47       ` Bill Davidsen
  2004-12-17 16:11         ` linux-os
  1 sibling, 1 reply; 17+ messages in thread
From: Bill Davidsen @ 2004-12-17 15:47 UTC (permalink / raw)
  To: James Morris
  Cc: Patrick McHardy, Bryan Fulton, netdev, netfilter-devel,
	linux-kernel

James Morris wrote:
> On Fri, 17 Dec 2004, Patrick McHardy wrote:
> 
> 
>>James Morris wrote:
>>
>>
>>>This at least needs CAP_NET_ADMIN.
>>>
>>
>>It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
>>replace iptables rules :)
> 
> 
> That's what I meant, you need the capability to do anything bad :-)

Are you saying that processes with capability don't make mistakes? This 
isn't a bug related to untrusted users doing privileged operations, it's 
a case of using unchecked user data.


-- 
    -bill davidsen (davidsen@tmr.com)
"The secret to procrastination is to put things off until the
  last possible moment - but no longer"  -me

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 15:47       ` Bill Davidsen
@ 2004-12-17 16:11         ` linux-os
  2004-12-17 16:31           ` Oliver Neukum
                             ` (3 more replies)
  0 siblings, 4 replies; 17+ messages in thread
From: linux-os @ 2004-12-17 16:11 UTC (permalink / raw)
  To: Bill Davidsen
  Cc: James Morris, Patrick McHardy, Bryan Fulton, netdev,
	netfilter-devel, linux-kernel

On Fri, 17 Dec 2004, Bill Davidsen wrote:

> James Morris wrote:
>> On Fri, 17 Dec 2004, Patrick McHardy wrote:
>> 
>> 
>>> James Morris wrote:
>>> 
>>> 
>>>> This at least needs CAP_NET_ADMIN.
>>>> 
>>> 
>>> It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
>>> replace iptables rules :)
>> 
>> 
>> That's what I meant, you need the capability to do anything bad :-)
>
> Are you saying that processes with capability don't make mistakes? This isn't 
> a bug related to untrusted users doing privileged operations, it's a case of 
> using unchecked user data.
>

But isn't there always the possibility of "unchecked user data"?
I can, as root, do `cp /dev/zero /dev/mem` and have the most
spectacular crask you've evet seen. I can even make my file-
systems unrecoverable.



Cheers,
Dick Johnson
Penguin : Linux version 2.6.9 on an i686 machine (5537.79 BogoMips).
  Notice : All mail here is now cached for review by Dictator Bush.
                  98.36% of all statistics are fiction.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 16:11         ` linux-os
@ 2004-12-17 16:31           ` Oliver Neukum
  2004-12-17 18:37           ` Bill Davidsen
                             ` (2 subsequent siblings)
  3 siblings, 0 replies; 17+ messages in thread
From: Oliver Neukum @ 2004-12-17 16:31 UTC (permalink / raw)
  To: linux-os
  Cc: Bill Davidsen, James Morris, Patrick McHardy, Bryan Fulton,
	netdev, netfilter-devel, linux-kernel


> > Are you saying that processes with capability don't make mistakes? This isn't 
> > a bug related to untrusted users doing privileged operations, it's a case of 
> > using unchecked user data.
> >
> 
> But isn't there always the possibility of "unchecked user data"?
> I can, as root, do `cp /dev/zero /dev/mem` and have the most
> spectacular crask you've evet seen. I can even make my file-
> systems unrecoverable.

Only if you have the capability for raw hardware access.
The same is true for the firmware interface. What other subsystems might
be dangerous?

	Regards
		Oliver

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 16:11         ` linux-os
  2004-12-17 16:31           ` Oliver Neukum
@ 2004-12-17 18:37           ` Bill Davidsen
  2004-12-17 19:18           ` Tomas Carnecky
  2004-12-18  1:42           ` Horst von Brand
  3 siblings, 0 replies; 17+ messages in thread
From: Bill Davidsen @ 2004-12-17 18:37 UTC (permalink / raw)
  To: linux-os
  Cc: James Morris, Patrick McHardy, Bryan Fulton, netdev,
	netfilter-devel, linux-kernel

linux-os wrote:
> On Fri, 17 Dec 2004, Bill Davidsen wrote:
> 
>> James Morris wrote:
>>
>>> On Fri, 17 Dec 2004, Patrick McHardy wrote:
>>>
>>>
>>>> James Morris wrote:
>>>>
>>>>
>>>>> This at least needs CAP_NET_ADMIN.
>>>>>
>>>>
>>>> It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
>>>> replace iptables rules :)
>>>
>>>
>>>
>>> That's what I meant, you need the capability to do anything bad :-)
>>
>>
>> Are you saying that processes with capability don't make mistakes? 
>> This isn't a bug related to untrusted users doing privileged 
>> operations, it's a case of using unchecked user data.
>>
> 
> But isn't there always the possibility of "unchecked user data"?
> I can, as root, do `cp /dev/zero /dev/mem` and have the most
> spectacular crask you've evet seen. I can even make my file-
> systems unrecoverable.

But that's not the type of thing you would do by accident. The kernel 
can't protect against deliberate abuse by trusted users, nor should it. 
But the type of problem caused by an application program bug can, and I 
believe should, be caught.

The difference between "oops" and "take that!"

-- 
    -bill davidsen (davidsen@tmr.com)
"The secret to procrastination is to put things off until the
  last possible moment - but no longer"  -me

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 13:18       ` Tomas Carnecky
@ 2004-12-17 19:16         ` David S. Miller
  2004-12-17 19:34           ` Tomas Carnecky
  0 siblings, 1 reply; 17+ messages in thread
From: David S. Miller @ 2004-12-17 19:16 UTC (permalink / raw)
  To: Tomas Carnecky
  Cc: bryan, jmorris, netdev, netfilter-devel, linux-kernel, kaber

On Fri, 17 Dec 2004 14:18:52 +0100
Tomas Carnecky <tom@dbservice.com> wrote:

> IMHO such things (passing values between user/kernel space) should 
> always be checked.

As per Patrick's posting, which James was responding to, it is
checked at the level above this function.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 16:11         ` linux-os
  2004-12-17 16:31           ` Oliver Neukum
  2004-12-17 18:37           ` Bill Davidsen
@ 2004-12-17 19:18           ` Tomas Carnecky
  2004-12-17 19:30             ` Oliver Neukum
  2004-12-18  1:42           ` Horst von Brand
  3 siblings, 1 reply; 17+ messages in thread
From: Tomas Carnecky @ 2004-12-17 19:18 UTC (permalink / raw)
  To: linux-os
  Cc: Bill Davidsen, James Morris, Patrick McHardy, Bryan Fulton,
	netdev, netfilter-devel, linux-kernel

linux-os wrote:
> On Fri, 17 Dec 2004, Bill Davidsen wrote:
> 
>> James Morris wrote:
>>
>>> On Fri, 17 Dec 2004, Patrick McHardy wrote:
 >>>
>>> That's what I meant, you need the capability to do anything bad :-)
>>
>>
>> Are you saying that processes with capability don't make mistakes? 
>> This isn't a bug related to untrusted users doing privileged 
>> operations, it's a case of using unchecked user data.
>>
> 
> But isn't there always the possibility of "unchecked user data"?
> I can, as root, do `cp /dev/zero /dev/mem` and have the most
> spectacular crask you've evet seen. I can even make my file-
> systems unrecoverable.
> 

But the difference between you example (cp /dev/zero /dev/mem) and 
passing unchecked data to the kernel is... you _can_ check the data and 
do something about it if you discover that the data is not valid/within 
a range/whatever even if the user has full permissions.
No same person would do a 'cp /dev/zero /dev/mem', but passing bad data 
is more likely to happen, badly written userspace configuration tools etc.

tom

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 19:18           ` Tomas Carnecky
@ 2004-12-17 19:30             ` Oliver Neukum
  2004-12-17 19:39               ` Tomas Carnecky
  0 siblings, 1 reply; 17+ messages in thread
From: Oliver Neukum @ 2004-12-17 19:30 UTC (permalink / raw)
  To: Tomas Carnecky
  Cc: linux-os, Bill Davidsen, James Morris, Patrick McHardy,
	Bryan Fulton, netdev, netfilter-devel, linux-kernel


> But the difference between you example (cp /dev/zero /dev/mem) and 
> passing unchecked data to the kernel is... you _can_ check the data and 

This is the difference:
static int open_port(struct inode * inode, struct file * filp)
{
	return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
}
(from mem.c)

	Regards
		Oliver

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 19:34           ` Tomas Carnecky
@ 2004-12-17 19:30             ` David S. Miller
  0 siblings, 0 replies; 17+ messages in thread
From: David S. Miller @ 2004-12-17 19:30 UTC (permalink / raw)
  To: Tomas Carnecky
  Cc: bryan, jmorris, netdev, netfilter-devel, linux-kernel, kaber

On Fri, 17 Dec 2004 20:34:55 +0100
Tomas Carnecky <tom@dbservice.com> wrote:

>  > It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
>  > replace iptables rules :)
> For me it seems that only CAP_NET_ADMIN is checked and not the data.

If that's the case then I agree with you Tomas.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 19:16         ` David S. Miller
@ 2004-12-17 19:34           ` Tomas Carnecky
  2004-12-17 19:30             ` David S. Miller
  0 siblings, 1 reply; 17+ messages in thread
From: Tomas Carnecky @ 2004-12-17 19:34 UTC (permalink / raw)
  To: David S. Miller
  Cc: jmorris, kaber, bryan, netdev, netfilter-devel, linux-kernel

David S. Miller wrote:
> On Fri, 17 Dec 2004 14:18:52 +0100
> Tomas Carnecky <tom@dbservice.com> wrote:
> 
> 
>>IMHO such things (passing values between user/kernel space) should 
>>always be checked.
> 
> 
> As per Patrick's posting, which James was responding to, it is
> checked at the level above this function.

Is only the capability checked or also the data passed to the kernel?
It's not clear from Patricks reply:
 > It is already checked in do_ip6t_set_ctl(). Otherwise anyone could
 > replace iptables rules :)
For me it seems that only CAP_NET_ADMIN is checked and not the data.

tom

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 19:30             ` Oliver Neukum
@ 2004-12-17 19:39               ` Tomas Carnecky
  0 siblings, 0 replies; 17+ messages in thread
From: Tomas Carnecky @ 2004-12-17 19:39 UTC (permalink / raw)
  To: Oliver Neukum
  Cc: linux-os, Bill Davidsen, James Morris, Patrick McHardy,
	Bryan Fulton, netdev, netfilter-devel, linux-kernel

Oliver Neukum wrote:
>>But the difference between you example (cp /dev/zero /dev/mem) and 
>>passing unchecked data to the kernel is... you _can_ check the data and 
> 
> 
> This is the difference:
> static int open_port(struct inode * inode, struct file * filp)
> {
> 	return capable(CAP_SYS_RAWIO) ? 0 : -EPERM;
> }
> (from mem.c)
> 

OK, but my point was, whenever you can check the 'contents' of the data 
passed to the kernel, do it. You can't check if the data someone writes 
to /dev/mem is valid or not, but you can check for out-of-range/etc. 
data in ioctl & friends.

tom

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Coverity] Untrusted user data in kernel
  2004-12-17 16:11         ` linux-os
                             ` (2 preceding siblings ...)
  2004-12-17 19:18           ` Tomas Carnecky
@ 2004-12-18  1:42           ` Horst von Brand
  3 siblings, 0 replies; 17+ messages in thread
From: Horst von Brand @ 2004-12-18  1:42 UTC (permalink / raw)
  To: linux-os
  Cc: Bill Davidsen, James Morris, Patrick McHardy, Bryan Fulton,
	netdev, netfilter-devel, linux-kernel

linux-os <linux-os@chaos.analogic.com> said:
> On Fri, 17 Dec 2004, Bill Davidsen wrote:

[...]

> > Are you saying that processes with capability don't make mistakes? This
> > isn't a bug related to untrusted users doing privileged operations,
> > it's a case of using unchecked user data.

> But isn't there always the possibility of "unchecked user data"?

Yes. But it should be kept to a minimum.

> I can, as root, do `cp /dev/zero /dev/mem` and have the most
> spectacular crask you've evet seen. I can even make my file-
> systems unrecoverable.

Right. And you can get rid of /dev/mem if you don't want to screw yourself
this way (which is well-known). The problem at hand is _not_ in this same
league.
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2004-12-18  1:42 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1103247211.3071.74.camel@localhost.localdomain>
2004-12-17  5:15 ` [Coverity] Untrusted user data in kernel James Morris
2004-12-17  5:25   ` Patrick McHardy
2004-12-17  6:45     ` James Morris
2004-12-17 13:18       ` Tomas Carnecky
2004-12-17 19:16         ` David S. Miller
2004-12-17 19:34           ` Tomas Carnecky
2004-12-17 19:30             ` David S. Miller
2004-12-17 15:47       ` Bill Davidsen
2004-12-17 16:11         ` linux-os
2004-12-17 16:31           ` Oliver Neukum
2004-12-17 18:37           ` Bill Davidsen
2004-12-17 19:18           ` Tomas Carnecky
2004-12-17 19:30             ` Oliver Neukum
2004-12-17 19:39               ` Tomas Carnecky
2004-12-18  1:42           ` Horst von Brand
2004-12-17 15:10   ` Pavel Machek
2004-12-17 15:38     ` James Morris

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).