Attacking Insecure Deserialization in .NET — Part 1: Fundamentals, Lab Setup, and $type Metadata Abuse