slocate是一款查找文件和目录的工具,slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 slocate当处理环境变量SLOCATE_PATH数据时存在问题,本地攻击者可以利用这个漏洞进行基于堆的溢出,可能以root用户权限在系统上执行任意指令。 问题存在于main.c中的parse_decode_path函数,此函数通过getenv(\"LOCATE_PATH\")获得环境变量,但是此变量的分配可以由外部用户控制,如: while ((part = strchr(part+1, \'\':\'\'))) i++; 上面的part可以由用户提供,并可以使i为一个非常大的值,当后续进行malloc()操作的时: SLOCATE_PATH = malloc(i * sizeof(char *)); 就可以导致malloc()分配过小而发生基于堆的整数溢出,精心构建提交数据可能以root用户权限在系统上执行任意指令。
slocate是一款查找文件和目录的工具,slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。 slocate当处理环境变量SLOCATE_PATH数据时存在问题,本地攻击者可以利用这个漏洞进行基于堆的溢出,可能以root用户权限在系统上执行任意指令。 问题存在于main.c中的parse_decode_path函数,此函数通过getenv(\"LOCATE_PATH\")获得环境变量,但是此变量的分配可以由外部用户控制,如: while ((part = strchr(part+1, \'\':\'\'))) i++; 上面的part可以由用户提供,并可以使i为一个非常大的值,当后续进行malloc()操作的时: SLOCATE_PATH = malloc(i * sizeof(char *)); 就可以导致malloc()分配过小而发生基于堆的整数溢出,精心构建提交数据可能以root用户权限在系统上执行任意指令。