Network Audio System(NAS)是一套采用客户机/服务器结构的网络音频传输系统。该系统支持音频传输、音频处理、音频存储等。 Network Audio System中ProcAuSetElements中过大的num_actions导致无效的内存指针 在ProcAuSetElements中num_actions用于增量stuff缓冲区中el架构的指针。如果客户端发送了一个或多个很大的num_action值的话,就会强制服务器使用stuff缓冲区外的数据,导致崩溃。 server/dia/audispatch.c文件中的漏洞代码: #define ADD_VAR(n) \ { \ AuUint8 *_t = (AuUint8 *) el; \ \ varLen += (n); \ _t += (n); \ el = (auElement *) _t; \ } #define COMP_ACTIONS(num) \ { \ numActions += (num) ? (num) : numDefaultActions[el->type]; \ ADD_VAR((num) * sizeof(auElementAction)); \ } ... int ProcAuSetElements(ClientPtr client) { fprintf(stderr, \"XXX ProcAuSetElements\n\"); REQUEST(auSetElementsReq); FlowPtr flow; int len, i, varLen, numActions, status; auElement *el; ... el = (auElement *) & stuff[1]; /* compute length of variable data and do some error checking */ for (i = varLen = numActions = 0; i < stuff->numElements; i++, el++) switch (el->type) { case AuElementTypeImportClient: COMP_ACTIONS(el->importclient.actions.num_actions); ...
Network Audio System(NAS)是一套采用客户机/服务器结构的网络音频传输系统。该系统支持音频传输、音频处理、音频存储等。 Network Audio System中ProcAuSetElements中过大的num_actions导致无效的内存指针 在ProcAuSetElements中num_actions用于增量stuff缓冲区中el架构的指针。如果客户端发送了一个或多个很大的num_action值的话,就会强制服务器使用stuff缓冲区外的数据,导致崩溃。 server/dia/audispatch.c文件中的漏洞代码: #define ADD_VAR(n) \ { \ AuUint8 *_t = (AuUint8 *) el; \ \ varLen += (n); \ _t += (n); \ el = (auElement *) _t; \ } #define COMP_ACTIONS(num) \ { \ numActions += (num) ? (num) : numDefaultActions[el->type]; \ ADD_VAR((num) * sizeof(auElementAction)); \ } ... int ProcAuSetElements(ClientPtr client) { fprintf(stderr, \"XXX ProcAuSetElements\n\"); REQUEST(auSetElementsReq); FlowPtr flow; int len, i, varLen, numActions, status; auElement *el; ... el = (auElement *) & stuff[1]; /* compute length of variable data and do some error checking */ for (i = varLen = numActions = 0; i < stuff->numElements; i++, el++) switch (el->type) { case AuElementTypeImportClient: COMP_ACTIONS(el->importclient.actions.num_actions); ...