现在的杀毒软件都会杀掉c盘下的program.exe程序,所以某种意义上而言,这个漏洞算不上“漏洞”。
问题描述
眼睛护士版本:3.0.18.301存在createProcess调用漏洞。
详细说明
将精心构造的program.exe放置到C盘根目录下,运行眼睛护士,
右键桌面上的眼睛护士软件的矩形窗口,点击“立即休息”,可以看到C盘根目录下的program.exe程序被执行!
主要原因是:createprocess的第一个参数设为NULL,commandLine参数没有做“”包含,导致精心放置在系统目录下的 “C:Program.exe”被加载执行。
漏洞证明
1.下载最新版本eyefoo
2.使用DEV-C++构造program程序,如下:
#include<stdio.h>
int main()
{
printf("12345678910 ");
getchar();
getchar();
return 0;
}
将编译生成的program.exe程序扔到c盘根目录下
运行眼睛护士软件,可以看到桌面上有如下矩形窗口:
右键该矩形窗口,点击“立即休息”,可以看到C:program.exe被执行。
3.漏洞调试
使用OllyDbg,附加到eyefoo进程
打开视图中的可执行模块,
在可执行模块中找到KERNEL32模块。
右键“显示名称”,在其中找到createProcessW调用,
在地址7674A510处右键设置断点。
此时,回到桌面上眼睛护士的矩形窗口,右键点击“立即休息”,可以看到OllyDbg调试eyefoo执行到了地址7674A510的位置,如下图所示:
从图中右下角可以看到如下信息:
即使用的是UNICODE字符,用的是CreateProcessW调用。其调用的参数信息在图中右下角,如下所示:
可以看到:
createProcessW的第一个参数被设置为NULL,第二个参数传入“C:Program Files (x86)EyeFoo3eyefoo.exe /break”时没有再加上一层双引号。其中/break表示的就是让眼睛护士立即休息。
此时,在OllyDbg程序中继续运行,可以看到,
即createProcess漏洞被触发,精心构造在C盘根目录下的program.exe程序被执行。
漏洞修复
修复方式有两种:
1.将CreateProcessW的第一个参数由NULL改为cmd。
2.将命令字符串放置在第2个参数时,应用双引号包括进来,如下:
““C:\Program Files (x86)\EyeFoo3\eyefoo.exe /break””
提交到乌云平台
http://www.wooyun.org/bugs/wooyun-2010-0147165/trace/0ca409b12cda790d1340e13f1a15ea49
利用上述链接,进行跟进漏洞审核过程。