漏洞概述 在Bitser v5.2.4及更早版本中,发现了一个不安全的反序列化漏洞。该漏洞允许类型混淆,可能导致地址泄漏、任意内存读取、VTable劫持、拒绝服务以及潜在的任意代码执行。Bitser库支持指针的序列化,攻击者可以利用这一特性引用同一归档中不同类型的对象。 影响范围 Bitser v5.2.4及更早版本 条件:共享指针的不同类型被(反)序列化。数据随后被攻击者使用和观察。 示例: - :演示了地址泄漏的可能性,允许攻击者绕过ASLR。 - :演示了任意内存读取的可能性,允许攻击者泄露敏感信息。 - :演示了控制流劫持的可能性,允许攻击者跳转到任意位置或崩溃程序。 修复方案 1. 类型检查:在反序列化过程中,检查当前正在反序列化的对象的类型是否与预期类型匹配。 2. 类型哈希:使用哈希表 将原始指针地址映射到类型ID哈希。在首次遇到对象时,反序列化对象并将指针类型ID对插入到映射中。在后续遇到相同指针时,在浅拷贝之前,库会检查存储对象的类型哈希是否等于当前反序列化对象的类型哈希。 3. 多态处理:对于多态类,重新定义(重载)类型相等性。检查 ,我们希望两个类A和B相等,如果A > B(B是A的子类/派生类)或反之。这意味着我们需要遍历继承链。 POC代码