Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150210175705.GI23507@brightrain.aerifal.cx>
Date: Tue, 10 Feb 2015 12:57:05 -0500
From: Rich Felker <dalias@...c.org>
To: oss-security@...ts.openwall.com
Subject: Re: wordexp(3)

On Tue, Feb 10, 2015 at 08:27:56PM +0300, Solar Designer wrote:
> Hi,
> 
> I found this curious and relevant to this list, off Twitter:
> 
> (x250) <%worr> RT @FioraAeterna: oh my gosh, Apple's libc literally implements "wordexp" by shelling out to perl: https://github.com/Apple-FOSS-Mirror/Libc/blob/2ca2ae74647714acfc18674c3114b1a5d3325d7d/gen/wordexp.c#L192
> 
> <worr> So yesterday, @FioraAeterna tweeted this: https://github.com/Apple-FOSS-Mirror/Libc/blob/2ca2ae74647714acfc18674c3114b1a5d3325d7d/gen/wordexp.c#L192. I've decided to take a tour of wordexp(3) implementations
> <@worr> They can't all be that bad
> (x2) <@worr> NetBSD and FreeBSD both use a sh builtin to implement wordexp(3): http://svnweb.freebsd.org/base/head/lib/libc/gen/wordexp.c?revision=254977&view=markup http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/gen/wordexp.c?rev=1.3&content-type=text/x-cvsweb-markup&only_with_tag=MAIN
> (x5) <@worr> OpenBSD wins the wordexp(3) contest, by refusing to implement it altogether.
> <@worr> Correction: glibc implements a huge recursive descent parser, and only shells out when it needs to do subshell expansions.
> <@worr> tbh, wordexp(3) is an antifeature. Maybe even a misfeature.
> <@worr> Here's the implementation, btw: https://sourceware.org/git/?p=glibc.git;a=blob;f=posix/wordexp.c;h=26f3a2653feba2b1a5904937d9d6b58c32109e24;hb=a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c#l872
> <@worr> Continuing on my tour of wordexp(3) implementations, here's Illumos': https://github.com/joyent/illumos-joyent/blob/master/usr/src/lib/libc/port/regex/wordexp.c#L218-L290 It constructs a small shell script and runs it

POSIX is explict that the wordexp interface is designed such that
invoking a shell is one valid implementation choice. My view on all
this is that pretty much anything wordexp-related is not CVE-worthy;
wordexp simply is not a proper tool to be using in programs dealing
with untrusted inputs -- either untrusted input strings, or untrusted
environment contents. Obviously implementations using /bin/sh were
vulnerable to shellshock on systems where /bin/sh is bash.

Rich

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.