ARCServe Backup for Laptops and Desktops (L &D)是适用于中小业务的ARCServe Backup备份工具版本。 ARCserve L&D在处理RPC接口上的畸形请求数据时存在漏洞,远程攻击者可能利用此漏洞控制服务器或执行目录遍历。 ARCserve L&D使用TCP/1900端口做为RPC接口管理ARCserve L &D服务器,正常的通讯示例如下: 0000000027rxrLogin~~administrator --------------------------------------------- Field 1: 10-digit base10 command length field ("0000000027") Field 2: RPC command ("rxrLogin") Field 3: Constant Argument Delimiter ("~~") Field 4: Argument ("administrator") #1 认证用户名缓冲区溢出 rxRPC.dll的认证部分(通过TCP/1900访问)中存在栈溢出漏洞。合法的认证报文示例如下: 0000000013rxrLogin~~administrator 认证时使用wsprintfW将administrator参数拷贝到了栈上0x1AC大小的缓冲区,但没有执行字符串长度检查,如果在第一个认证请求中发送了超长用户名的话就可以触发可利用的溢出。 #2 认证口令缓冲区溢出 rxRPC.dll的认证部分存在栈溢出漏洞。带有口令的合法认证请求示例如下: 1: 0000000030rxrLogin~~administrator~~0000200 2: MyPasswordIs1234 第一个rxrLogin请求的第二个参数定义了下一个请求中所要发送口令的长度。尽管已经验证了第二个请求中的口令字符串长度为正确的长度,但没有对口令长度执行边界检查。如果在第二个请求中的超长口令指定了超长口令长度的话,就会溢出口令字符串目的地所使用的栈缓冲区。 #3 认证口令整数溢出 rxRPC.dll的认证部分存在栈溢出漏洞。带有无效口令的合法认证请求示例如下: 1: 0000000030rxrLogin~~administrator~~18 2:...
ARCServe Backup for Laptops and Desktops (L &D)是适用于中小业务的ARCServe Backup备份工具版本。 ARCserve L&D在处理RPC接口上的畸形请求数据时存在漏洞,远程攻击者可能利用此漏洞控制服务器或执行目录遍历。 ARCserve L&D使用TCP/1900端口做为RPC接口管理ARCserve L &D服务器,正常的通讯示例如下: 0000000027rxrLogin~~administrator --------------------------------------------- Field 1: 10-digit base10 command length field ("0000000027") Field 2: RPC command ("rxrLogin") Field 3: Constant Argument Delimiter ("~~") Field 4: Argument ("administrator") #1 认证用户名缓冲区溢出 rxRPC.dll的认证部分(通过TCP/1900访问)中存在栈溢出漏洞。合法的认证报文示例如下: 0000000013rxrLogin~~administrator 认证时使用wsprintfW将administrator参数拷贝到了栈上0x1AC大小的缓冲区,但没有执行字符串长度检查,如果在第一个认证请求中发送了超长用户名的话就可以触发可利用的溢出。 #2 认证口令缓冲区溢出 rxRPC.dll的认证部分存在栈溢出漏洞。带有口令的合法认证请求示例如下: 1: 0000000030rxrLogin~~administrator~~0000200 2: MyPasswordIs1234 第一个rxrLogin请求的第二个参数定义了下一个请求中所要发送口令的长度。尽管已经验证了第二个请求中的口令字符串长度为正确的长度,但没有对口令长度执行边界检查。如果在第二个请求中的超长口令指定了超长口令长度的话,就会溢出口令字符串目的地所使用的栈缓冲区。 #3 认证口令整数溢出 rxRPC.dll的认证部分存在栈溢出漏洞。带有无效口令的合法认证请求示例如下: 1: 0000000030rxrLogin~~administrator~~18 2: 000000000000000000 加密的无效口令可能导致可利用的情况: .text: 00231F24 mov cl, [esi+8] .text: 00231F27 and ecx, 0x0F .text: 00231F2A add esp, 8 .text: 00231F2D dec ecx ; XXXX Integer Overflow If ECX = 0 .text: 00231F2E mov [esp+0x7C+var_6C], eax .text: 00231F32 mov dwPasswordCopyLength, ecx .text: 00231F38 mov eax, ecx .text: 00231F3A lea esi, [esp+0x7C+var_6C] .text: 00231F3E mov edi, ebx .text: 00231F40 shr ecx, 2 .text: 00231F43 rep movs ; XXXX EXCEPTION: HITS PAGE BOUNDARY XXXX 源缓冲区中的数据包含有大量不可控的数据,但还存在用户名的拷贝,因此如果在原始报文中指定了超长用户名的话就会覆盖异常处理器。 #4 任意文件上传 rxRPC.dll的未经认证通讯存在任意文件上传漏洞。上传请求的文件示例如下: 1: 0000000056rxrReceiveFileFromServer~~8~~test1234.txt~~4~~3675727989 2: 0000000031~~<file_contents> 请求的第一个参数指定了rxrReceiveFileFromServer的子命令,数字8表示文件会上传到ARCserve L &D的安装目录;第二个参数指定了文件目标名称;第三个参数指定了目标文件的长度;第五个参数指定了入站文件的CRC32哈希。 但rxRPC.dll没有防范通过子函数8的目录遍历,因此如果文件名中包含有"..\"的话,就可能导致以系统级权限向任意目录写入任意文件。 #5 多个类似的缓冲区溢出 有八个通过TCP/1900端口可访问的函数中存在缓冲区溢出,示例如下: rxsUseLicenseIni~~<overflow> rxsLicGetSiteId~~<overflow> rxsGetLogFileNames~~<overflow>~~40000 rxsGetBackupLog~~aa~~<overflow>~~40000 rxsBackupComplete~~aa~~aa~~aa~~<overflow>~~aa rxsSetDataGrowthScheduleAndFilter~~aa~~aa~~aa~~aa~~<overflow> rxsSetDefaultConfigName~~<overflow> rxrSetMessageLogSettings~~65~~45~~79~~65~~<overflow>~~52~65~73~65~61~72~63~68~21