多家厂商XDR实现远程缓冲区溢出漏洞 CVE-2003-0028 CNNVD-200303-077

7.5 AV AC AU C I A
发布: 2003-03-25
修订: 2020-01-21

XDR(外部数据表示)库用来提供一种平台无关的方法来将数据从一个系统进程发送给其他系统进程。 Sun Microsystems提供的XDR库中包含的xdrmem_getbytes()函数存在一个整数溢出 ,远程攻击者利用这个漏洞对使用XDR库的应用程序进行攻击,可能以应用程序进程权限在系统上执行任意指令。 问题存在于\'\'usr/src/lib/libnsl/rpc/xdr_mem.c\'\'的168行的xdrmem_getbytes()函数: static bool_t xdrmem_getbytes(XDR *xdrs, caddr_t addr, int len) { int tmp; trace2(TR_xdrmem_getbytes, 0, len); if ((tmp = (xdrs->x_handy - len)) < 0) { <--- VULNERABILITY syslog(LOG_WARNING, ..... ..... return (FALSE); } xdrs->x_handy = tmp; (void) memcpy(addr, xdrs->x_private, len); <--- VULNERABILITY xdrs->x_private += len; trace1(TR_xdrmem_getbytes, 1); return (TRUE); } 上面代码中\"len\"是有符号整数,因此如果\"len\"为负数就会导致缓冲区溢出: if ((tmp = (xdrs->x_handy - len)) < 0) { -->这个检查会绕过 但是在memcpy(addr, xdrs->x_private, len);处理时就会导致溢出。攻击者可以构造一个特殊的XDR编码来触发整数溢出,依赖于使用者如何调用xdrmem_getbytes()函数,攻击者可能覆盖一个已经分配的堆区缓冲区,造成堆缓冲区溢出。攻击者可能造成远程服务崩溃或者利用memcpy()实现的一些特点来改变内存数据并执行任意代码。

0%
暂无可用Exp或PoC
当前有165条受影响产品信息