漏洞信息: EDB-ID: 40354 CVE: 2016-3861 Author: GOOGLE SECURITY RESEARCH Type: REMOTE Platform: ANDROID Date: 2016-09-08 Vulnerable App: LIBUTILS Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=840 漏洞描述: 问题: 在libutils/Unicode.cpp中的两个函数处理无效的代理对时存在不一致,导致utf16_to_utf8_length计算的大小与utf16_to_utf8写入的字节数之间的不匹配。 影响: 引发堆缓存溢出。 利用方式: 通过Binder调用到核心系统服务“android.security.keystore”,从正常的应用程序上下文中,无需任何额外的权限即可访问。 示例字符序列: 构建PoC: 1. String16构造器在攻击者提供的输入上执行; 2. 提供庞大的输入字符串; 3. 写入 个字节为2字节堆分配; 4. 在最近的Nexus 5X userdebug构建上已测试过,导致崩溃,对象vectorImpl已被覆盖所破坏。 崩溃信息: 受影响的服务: phone iphonesubinfo isub telecom voiceinteraction backup audio media.audio_policy media.audio_flinger android.security.keystore SurfaceFlinger Proofs of Concept: https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/40354.zip