AFFLIB是用于操作高级取证格式(AFF)文件的开源函数库。 AFFLIB的一些命令行工具实现上存在格式串处理漏洞,本地攻击者可能利用此漏洞提升自己的权限。 这些工具以格式串参数向warn()和err()调用传输一些命令行参数。如果攻击者能够影响这些命令行参数的话,就可能导致执行任意指令。 * s3格式串注入 * 文件:lib/s3.cpp 行数:207 err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。192-207行说明了这个问题: void s3_cp(const char *fname,string key) { struct s3headers meta[2] = {{0,0},{0,0}}; char buf[64]; if(opt_flag){ snprintf(buf,sizeof(buf),"%d",opt_flag); meta[0].name = AMAZON_METADATA_PREFIX "arg"; meta[0].value = buf; } /* Read from fname into a buffer. * Note that we do this with read, so that we can read from stdin */ FILE *f = fopen(fname,"r"); if(!f) err(1,fname); 如果s3二进制程序为setuid/setgid,或s3程序在CGI脚本中执行的话,攻击者就可以利用这个漏洞。 * afconvert格式串注入 * 文件:tools/afconvert.cpp 行数:226、263和305 3个err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。 * afcopy格式串注入 * 文件:tools/afcopy.cpp 行数:202和250 2个err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。 * afinfo格式串注入 * 文件:tools/afinfo.cpp 行数:584...
AFFLIB是用于操作高级取证格式(AFF)文件的开源函数库。 AFFLIB的一些命令行工具实现上存在格式串处理漏洞,本地攻击者可能利用此漏洞提升自己的权限。 这些工具以格式串参数向warn()和err()调用传输一些命令行参数。如果攻击者能够影响这些命令行参数的话,就可能导致执行任意指令。 * s3格式串注入 * 文件:lib/s3.cpp 行数:207 err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。192-207行说明了这个问题: void s3_cp(const char *fname,string key) { struct s3headers meta[2] = {{0,0},{0,0}}; char buf[64]; if(opt_flag){ snprintf(buf,sizeof(buf),"%d",opt_flag); meta[0].name = AMAZON_METADATA_PREFIX "arg"; meta[0].value = buf; } /* Read from fname into a buffer. * Note that we do this with read, so that we can read from stdin */ FILE *f = fopen(fname,"r"); if(!f) err(1,fname); 如果s3二进制程序为setuid/setgid,或s3程序在CGI脚本中执行的话,攻击者就可以利用这个漏洞。 * afconvert格式串注入 * 文件:tools/afconvert.cpp 行数:226、263和305 3个err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。 * afcopy格式串注入 * 文件:tools/afcopy.cpp 行数:202和250 2个err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。 * afinfo格式串注入 * 文件:tools/afinfo.cpp 行数:584 err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。 * aimage格式串注入 * 文件:aimage/aimage.cpp 行数:577 err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。548-577行说明了这个问题: int getlock(class imager *im) { /* If the file exists and the PID in the file is running, * can't get the lock. */ char lockfile[MAXPATHLEN]; sprintf(lockfile,"/tmp/aimge.%s.lock",im->infile); if(access(lockfile,F_OK)==0){ /* Lockfile exists. Get it's pid */ char buf[1024]; FILE *f = fopen(lockfile,"r"); if(!f){ perror(lockfile); // can't read lockfile... return -1; } fgets(buf,sizeof(buf),f); buf[sizeof(buf)-1] = 0; int pid = atoi(buf); if(checkpid(pid)==0){ /* PID is not running; we can delete the lockfile */ if(unlink(lockfile)){ err(1,"could not delete lockfile %s: ",lockfile); } } /* PID is running; generate error */ errx(1,"%s is locked by process %d\n",im->infile,pid); } FILE *f = fopen(lockfile,"w"); if(!f){ err(1,lockfile); 由于用户可以指定im->infile值,因此lockfile字符串可能包含有格式串字符。如果aimage二进制程序为setuid/setgid或aimage程序在CGI脚本中执行的话,就可能导致这个漏洞。 * imager格式串注入 * 文件:aimage/imager.cpp 行数:265 err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响名称的话就可以导致格式串注入漏洞。 * afxml格式串注入 * 文件:tools/afxml.cpp 行数:101 err()调用中的一个命令行参数用作了格式串,如果攻击者能够影响户名称的话就可以导致格式串注入漏洞。 AFFLIB 2.2.0 - 2.2.8 目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本: <a href="http://www.afflib.org/index.php" target="_blank">http://www.afflib.org/index.php</a>