Sebastien Raveau wrote:
That may help a bit, but buffer overflows are not the cause of most security
flaws. Let me quote Theo de Raadt (maintainer of OpenBSD) on this:
"Crispin Cowan has suggested that buffer overflows are the most common
security causing programmer error. I disagree. I believe that we found
more /tmp races in our source tree than buffer overflows."
...and we've found more buffer overflows than /tmp races in our code
(the only /tmp race we know of was "fixed" a long time ago by the
OpenBSD folks in a fashion that broke captures; we fixed it differently).
I.e., whether /tmp races, buffer overflows, or other problems are the
main source of security flaws in a particular piece of code depends on
the code. If the code has lots of static buffers into which stuff is
read, and not a lot of manipulation of files in /tmp, buffer overflows
are likely to be a bigger problem.
Anyway, I just find it amazing that in Ethereal more than a million lines of C
run with root priviledges...
*No* lines of Ethereal code run on my system with root privileges.
But that's because I'm running on a BSD-derived system (OS X), and can
therefore arrange that I have read and write permissions on the /dev/bpf
devices, and therefore don't have to run Ethereal - or tcpdump, or any
other capture program - as root.
Ethereal has to be redesigned (as I suggested in a previous post to this
mailing-list, apparently ignored) to minimize the amount of code running with
root priviledges. Basically, the only thing Ethereal needs root priviledges
for is opening the capture socket,
"Capture socket" suggests the person who said this is running on Linux
or IRIX, not BSD. It's a socket on those systems, it's a BPF device on
BSDs (and AIX), it's a STREAMS device on some other systems, etc.. See
http://wiki.ethereal.com/CaptureSetup_2fCapturePrivileges
In any case, we agree that, as not all systems are as nice as BSD in
this regard, the rest of the code shouldn't run with root privileges if
the code that opens the capture device does need to run with root
privileges. This is a work in progress; see
http://wiki.ethereal.com/Development_2fPrivilegeSeparation
However...
and that could take less than a hundred
lines of code. Once the amount of code running with root priviledges is
downsized to about a hundred lines, it will be easily auditable and soon
devoid of security flaws.
...it's not the case that you're "done" when the code running as root is
known to be safe. Code running as the user can't do as much damage as
code running as root, but it can still do damage; see
http://wiki.ethereal.com/Security
for a discussion of ways of making Ethereal dissectors (which I think
*are* the primary source of security problems in Ethereal) safer.