From: Wannes Rombouts <wannes.rombouts@epitech.eu>
To: <davem@davemloft.net>, <jasowang@redhat.com>, <mst@redhat.com>,
<edumazet@google.com>, <nhorman@tuxdriver.com>,
<netdev@vger.kernel.org>
Cc: Kevin Soules <kevin.soules@epitech.eu>
Subject: Use-after-free in TUNSETIFF
Date: Wed, 11 Sep 2013 01:59:47 +0200 [thread overview]
Message-ID: <522FB273.1030506@epitech.eu> (raw)
In-Reply-To: <522FACCB.1040707@epitech.eu>
(I sent this email to security@kernel.org but they told me I should send
it to you guys, so here you go.)
Hi,
I would like to report what I believe could be a potential CAP_NET_ADMIN
to ring0 privilege escalation.
The bug is in the way tuntap interfaces are initialized, when given an
invalid name they cause a use after free. Also software like vmware
allows for at least a freeze or kernel panic by a simple user but might
also allow privilege escalation.
Very simple to test, this causes a crash:
# ip tuntap add dev %% mode tap
If it doesn't crash immediately wait a few seconds and try again.
We haven't managed to exploit the use after free yet, but we are still
working on it. At least it crashes even with the latest kernel 3.11 and
on different distros. (tested on Debian, Ubuntu and Arch) Looking at the
source the bug seems quite old.
Here is our analysis:
A user with CAP_NET_ADMIN calls ioctl with TUNSETIFF and an invalid name
for example "%d%d".
tun_set_iff starts to initialize the tun_struct.
http://lxr.free-electrons.com/source/drivers/net/tun.c#L1589
It calls tun_flow_init which starts a timer with tun_flow_cleanup as
callback. http://lxr.free-electrons.com/source/drivers/net/tun.c#L852
After this tun_set_iff calls register_netdevice which returns an error
because of the invalid name.
This error causes the goto err_free_dev and the call to free_netdev.
This will free the tun_struct.
Later, once the callback gets called it uses bad memory. Sometimes it
doesn’t get called because the timer_list has been compromised and we
get a kernel panic at:
http://lxr.free-electrons.com/source/kernel/timer.c?v=2.6.33#L949
But it is possible to get some memory from userland that overlaps only
the beginning of the tun_struct without overwriting the timer_list
because there is a big array before it. Then it might be possible to
exploit tun_flow_cleanup when it is called, but we didn't succeed yet.
------------------------------------------------------------------------
This is the first time we try to exploit the kernel so we basically suck
at this. I don't know if someone more skilled could do this easily or
not, but we'll keep trying and I'll let you know if we manage it.
In the mean time please let us know what you think of this and of course
we are very interested in the way this is patched. Please keep us in the
loop.
Of course we will be happy to assist in any way we can, feel free to
ask! Also we would like to know when you think it would be reasonable to
disclose and talk about this bug.
Regards,
Wannes 'wapiflapi' Rombouts
Kevin 'eax64' Soules
next parent reply other threads:[~2013-09-11 0:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <522FACCB.1040707@epitech.eu>
2013-09-10 23:59 ` Wannes Rombouts [this message]
2013-09-11 0:32 ` Use-after-free in TUNSETIFF Stephen Hemminger
2013-09-11 14:44 ` Ben Hutchings
2013-09-11 4:43 ` Michael S. Tsirkin
2013-09-11 4:45 ` Jason Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=522FB273.1030506@epitech.eu \
--to=wannes.rombouts@epitech.eu \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jasowang@redhat.com \
--cc=kevin.soules@epitech.eu \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=nhorman@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).