CVE:CVE-2007-2054
CNNVD:CNNVD-200704-585
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()调用中的一个命令行参数用作了格式串，如果攻击者能够影响户名称的话就可以导致格式串注入漏洞。
solution:Upgrade afflib afflib to a higher version than 2.2.0,and avoid the version (,2.2.0]