漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2013-022352
漏洞标题:iNodeManager远程拒绝服务或执行任意代码漏洞
相关厂商:杭州华三通信技术有限公司
漏洞作者: cssembly
提交时间:2013-04-23 10:42
修复时间:2013-07-22 10:43
公开时间:2013-07-22 10:43
漏洞类型:拒绝服务
危害等级:高
自评Rank:20
漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2013-04-23: 细节已通知厂商并且等待厂商处理中
2013-04-27: 厂商已经确认,细节仅向厂商公开
2013-04-30: 细节向第三方安全合作伙伴开放
2013-06-21: 细节向核心白帽子及相关领域专家公开
2013-07-01: 细节向普通白帽子公开
2013-07-11: 细节向实习白帽子公开
2013-07-22: 细节向公众公开
简要描述:
iNodeManager存在远程拒绝服务或执行任意代码漏洞
详细说明:
由于完成SSL数据交互过程较困难,只做原理说明。在安装inode时,客户端存在认证过程所需的所有证书和key,所以一定能够构造出来。
分析的目标程序的版本为H3C iNode PC 5.1 E0307,存在漏洞的进程为iNodeMngChecker.exe
可以看到程序绑定9090端口监听连接。
在线程函数int __stdcall sub_420430(SOCKET *a1)中调用sub_41F730(v8, v5)接收并处理数据。
在sub_415AE0函数中完成数据的接收,缓冲区v90存放接收到的数据,v52为接收数据的长度
函数sub_419600处理数据,参数1为接收到的数据,参数2为数据长度
sub_419600中调用sub_41B950(&v105, a1, a2)函数,将a1中的数据拷贝到v105开始的缓冲区,并作一些初始化
sub_41BEE0函数完成对v105的处理
sub_41BEE0函数中首先判断接收数据的前4字节是否为0xA0BF007,然后取出v7 = *((_DWORD *)pRecvData + 2),判断是否小于0x1000。取v6 = *((_DWORD *)pRecvData + 1)判断等于0xC1。如果构造数据使得v6 = 0xC1,v7 = 0x90C,就能执行到
while循环中,首先判断 v15 = (int)((char *)pRecvData + v8(12))是否为0,显然不为0,取v16 = *(_DWORD *)(v15 + 4),此时相当于取pRecvData + 16处的4字节, 此时v25 = v7 - 0xC = 0x900,此时如果构造的数据中v16的值为0x8FF,就能越过if ( v16 > v25 || v16 < 8 )的判断,同时v17 = v16 - 8 = 0x8F7;到达switch,可以构造v15处的值为 0x14,可以看到程序拷贝数据memcpy((char *)pRecvData + 4108, v15 + 8, v17)到(char *)pRecvData + 4108处,而pRecvData 为sub_419600中的v105缓冲区
缓冲区v105距离栈底为0x1340,而memcpy的目标地址为(char *)pRecvData + 4108,即v105 + 0x100C,而拷贝的数据长度为v17也就是我们所构造的0x8F7,显然已经覆盖了sub_419600的返回地址。所以当sub_41BEE0正常运行结束后,如果不发生异常,则最终能够导致拒绝服务攻击,否则导致执行任意代码
溢出为位置显然包含后的多个memcpy
漏洞证明:
只有证明,木有POC
修复方案:
版权声明:转载请注明来源 cssembly@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:18
确认时间:2013-04-27 11:32
厂商回复:
CNVD确认漏洞所述情况(机理确认),暂未在互联网实例上复现。将在27日由CNVD直接联系华三公司处置。
按潜在最大危害进行评分(溢出+代码执行),rank 18
最新状态:
暂无