CVE-2016-20031CVE-2016-20031是ZKTeco公司ZKBioSecurity 3.0版本中的一个本地授权绕过漏洞。该漏洞位于visLogin.jsp页面,由于应用程序对IPv6环回地址处理不当,导致攻击者可以在无需有效凭证的情况下通过伪造本地请求进行身份验证。漏洞的核心问题在于EnvironmentUtil.getClientIp()方法将IPv6环回地址0:0:0:0:0:0:0:1错误地识别为IPv4本地地址127.0.0.1,从而绕过了正常的身份验证机制。攻击者利用这一特性,使用IP地址作为用户名,配合硬编码密码"123456"即可成功登录系统,进而访问敏感信息并执行未授权操作。此漏洞需要攻击者具备本地访问权限,但不需要任何用户交互,属于低复杂度攻击。
漏洞存在于ZKBioSecurity 3.0的visLogin.jsp身份验证逻辑中。应用程序使用EnvironmentUtil.getClientIp()方法获取客户端IP地址用于访问控制判断。该方法在处理IPv6环回地址时存在逻辑缺陷:它将IPv6格式的环回地址0:0:0:0:0:0:0:1(完整的IPv6环回地址表示)错误地转换为IPv4本地地址127.0.0.1。系统将此IP地址识别为受信任的本地请求,从而跳过了正常的用户名密码验证流程。攻击者通过构造特殊的HTTP请求,将X-Forwarded-For或类似的HTTP头设置为IPv6环回地址,欺骗服务器认为请求来自本地主机。随后,攻击者使用该IP地址作为登录用户名,配合硬编码密码123456即可完成身份验证并获得系统访问权限。这种认证机制不仅绕过了密码验证,还可能被用于横向移动和权限提升。