Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 24 May 2012 19:18:14 -0400
From: Steve Grubb <sgrubb@...hat.com>
To: oss-security@...ts.openwall.com
Subject: Re: CVE Request: powerdns does not clear supplementary groups

On Thursday, May 24, 2012 06:56:46 PM Solar Designer wrote:
> On Thu, May 24, 2012 at 06:15:53PM -0400, Steve Grubb wrote:
> > Here is a real life case:
> > 
> > + if ( initgroups(pw->pw_name, NULL) != 0 || setgid(pw->pw_gid) != 0 ||
> > +                                setuid(pw->pw_uid) != 0 )
> > 
> > This is not upstream. This is a patch to drop capabilities by changing
> > uid/gid. The person writing the patch intended to do the right thing -
> > but failed. See the bug? This is in a network facing daemon that parses
> > untrusted network packets.
> 
> Wow.  The NULL results in group 0 being added to the supplementary
> groups list (so it survives the setgid(), at least on my quick test).

Yes. If you put that one snippet of code into google, you would find arpwatch is 
the culprit.
 
> How did you spot this?  Compiler warning?
>
> "passing arg 2 of `initgroups' makes integer from pointer without a cast"

It was more of an empirical thing. I had a script that started all daemons and 
it walked the proc tree.  If any uid != 0, it would check to see if there were 
any supplemental groups. Arpwatch had different supplemental groups than 
everything else that did this wrong, so I looked at the code to see what was 
different and found this bug.

-Steve

Powered by blists - more mailing lists

Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.