在 EagleEyes Lite(版本 2.0.0)中,GetHttpsResponse() 方法直接将账户 ID、密码、设备令牌和内部服务器 URL 等敏感信息置于 HTTPS 请求的查询字符串中进行传输。
由于这些凭据和令牌嵌入在 URL 中,而非安全地放置在请求体中,任何执行中间人(MITM)攻击的对手都可以轻松提取它们。
尽管连接名义上使用 HTTPS,但此类敏感参数以明文形式暴露在 URL 中,大大增加了凭据泄露以及未经授权访问 AVTECH CCTV 系统的风险。
该弱点损害了用户数据的机密性,并使应用程序在不受信任的网络上运行时特别容易受到攻击。
当设备运行在 Android 8.0 以下版本(即 SDK_API_26 设置为 false)时,该方法不会返回 GetHttpsUrlResponse()。
相反,它执行 try 块中的易受攻击逻辑。
public static String GetHttpsResponse(String str) {
if (SDK_API_26) {
return GetHttpsUrlResponse(str);
}
try {
...
HttpResponse execute = new DefaultHttpClient(
new SingleClientConnManager(defaultHttpClient.getParams(), schemeRegistry),
defaultHttpClient.getParams()
).execute(new HttpPost(str));
...
}
...
}
此处,参数 str 包含完整的请求 URL,而该 URL 直接将 account_id 和 password 等敏感信息嵌入在查询字符串中。
因此,用户凭据以明文形式暴露在 URL 中,若通过 MITM 攻击被拦截或被中间系统记录,则容易导致泄露。
通过运行 Frida 钩子脚本 hook.js,我们确认 GetHttpsResponse() 方法被调用,并且生成的请求 URL 中包含了明文敏感信息(如 account_id 和 password)。
有关易受攻击的 GetHttpsResponse() 实现的详细分析,请参考 CVE-2025-46408。
应用程序绝不应将敏感信息(如账户 ID、密码或身份验证令牌)包含在 URL 查询参数中。
相反,凭据应通过使用 POST 参数的方式在 HTTPS 请求体中安全地传输。这可以防止敏感值暴露在 URL、日志或中间系统中。