Swift Codable的CWE-502

wgx48brx  于 2023-09-30  发布在  Swift
关注(0)|答案(1)|浏览(95)

Snyk.io提醒我注意一个实现Codable的Swift类的CWE-502问题。
不受信任数据的反序列化(CWE-502)是当应用程序在没有充分验证结果数据将是有效的情况下反序列化不受信任数据时,使得攻击者控制执行的状态或流。
这个类被定义为class Foo: Codable { ...
该报告继续建议一个NSSecureCopy修复,我不认为这是相关的。
在Swift中,添加了NSSecureCoding协议(https://developer.apple.com/documentation/foundation/nssecurecoding)来减轻对象注入或反序列化攻击。分析发现了不完全符合NSSecureCoding协议的可序列化类。为了防止检测到此问题,所有可序列化的必须符合NSSecureCoding协议:
扩展NSSecureCoding类向类中添加一个布尔变量(supportsSecureCoding)并将值设置为true确保在类init中只使用安全的解码方法?(coder:NSCoding)构造函数,如decodeObjectOfClass()

  • 这可以通过代码更改来解决吗?
  • 这是一个有效的问题吗?可能是假阳性。
fcg9iug3

fcg9iug31#

免责声明:我为Snyk工作。:)
这一发现不再出现。它已从Snyk规则集中删除,Codable不再被标记。
使用NSCoding的传统案例仍然会被标记:

class Vehicle: NSObject, NSCoding {
    var make: String

    open func encode(with coder: NSCoder) {
        coder.encode(make, forKey: "make")
    }
    
    public init(make aMake) {
        self.make = aMake
    }

    public required convenience init?(coder: NSCoder) {
        guard let aMake = coder.decodeObject(of:NSString.self, forKey: "make") as? String
        else { return nil }
        
        self.init(make: aMake)
    }

}

相关问题