Symantec AntiVirus是非常流行的杀毒解决方案。 Symantec Antivirus远程管理接口中存在远程栈溢出漏洞。受影响产品通讯所使用的远程管理协议是基于消息的私有协议,有两级封装。外层由消息头组成,可能为消息类型10,表示请求Rtvscan.exe,也可能为类型20或30,表示转发SSL协商。如果为TCP连接创建了SSL,则之后的通讯就会加密,尽管私有格式中仍有明文。 类型10消息的数据包含有自己的首部和消息体,均由Rtvscan.exe处理。这个首部中有一个命令字段,指定将要执行的操作和消息体数据的格式。 COM_FORWARD_LOG (0x24)命令处理器没有正确的使用strncat,允许用任意数据覆盖0x180字节的栈缓冲区。如果COM_FORWARD_LOG请求中的第一个字符串包含有反斜线,就会执行以下两个strncat调用之一: * 如果字符串包含有逗号但没有双引号: strncat(dest, src, 0x17A - strlen(src)); * 否则: strncat(dest, src, 0x17C - strlen(src)); 如果源字符串的长度分别超过了0x17A或0x17C个字符的话,算术就会下溢,导致很大的内存拷贝大小。这可能允许将这个源字符串附加到缓冲区,用64KB的数据(空字符除外)覆盖栈。 Rtvscan.exe是用Visual Studio /GS安全选项编译的,包含有栈canary检查。但攻击者可以通过很大的覆盖并控制异常处理器注册绕过这个安全措施。
Symantec AntiVirus是非常流行的杀毒解决方案。 Symantec Antivirus远程管理接口中存在远程栈溢出漏洞。受影响产品通讯所使用的远程管理协议是基于消息的私有协议,有两级封装。外层由消息头组成,可能为消息类型10,表示请求Rtvscan.exe,也可能为类型20或30,表示转发SSL协商。如果为TCP连接创建了SSL,则之后的通讯就会加密,尽管私有格式中仍有明文。 类型10消息的数据包含有自己的首部和消息体,均由Rtvscan.exe处理。这个首部中有一个命令字段,指定将要执行的操作和消息体数据的格式。 COM_FORWARD_LOG (0x24)命令处理器没有正确的使用strncat,允许用任意数据覆盖0x180字节的栈缓冲区。如果COM_FORWARD_LOG请求中的第一个字符串包含有反斜线,就会执行以下两个strncat调用之一: * 如果字符串包含有逗号但没有双引号: strncat(dest, src, 0x17A - strlen(src)); * 否则: strncat(dest, src, 0x17C - strlen(src)); 如果源字符串的长度分别超过了0x17A或0x17C个字符的话,算术就会下溢,导致很大的内存拷贝大小。这可能允许将这个源字符串附加到缓冲区,用64KB的数据(空字符除外)覆盖栈。 Rtvscan.exe是用Visual Studio /GS安全选项编译的,包含有栈canary检查。但攻击者可以通过很大的覆盖并控制异常处理器注册绕过这个安全措施。