smcFanControl是在苹果机器上所使用的用于控制风扇转速的免费软件。 在/Applications/smcFanControl.app/Contents/Resources/smc文件中,smc -k输入选项无法处理超大的缓冲区,这可能导致缓冲区溢出。以下是smc.c中的有漏洞代码段: -- snip snip -- int main(int argc, char *argv[]) { int c; extern char *optarg; extern int optind, optopt, opterr; kern_return_t result; int op = OP_NONE; UInt32Char_t key = "\0"; SMCVal_t val; while ((c = getopt(argc, argv, "fhk:lrw:v")) != -1) { switch(c) { case 'f': op = OP_READ_FAN; break; case 'k': sprintf(key, optarg); // Overflow !!! break; -- snip snip -- 在默认安装中,smc二进制程序是以suid root安装的,这就允许本地用户获得root权限提升。
smcFanControl是在苹果机器上所使用的用于控制风扇转速的免费软件。 在/Applications/smcFanControl.app/Contents/Resources/smc文件中,smc -k输入选项无法处理超大的缓冲区,这可能导致缓冲区溢出。以下是smc.c中的有漏洞代码段: -- snip snip -- int main(int argc, char *argv[]) { int c; extern char *optarg; extern int optind, optopt, opterr; kern_return_t result; int op = OP_NONE; UInt32Char_t key = "\0"; SMCVal_t val; while ((c = getopt(argc, argv, "fhk:lrw:v")) != -1) { switch(c) { case 'f': op = OP_READ_FAN; break; case 'k': sprintf(key, optarg); // Overflow !!! break; -- snip snip -- 在默认安装中,smc二进制程序是以suid root安装的,这就允许本地用户获得root权限提升。