O que é desserialização insegura
Ler bytes do cliente de volta para um objeto e confiar nesse objeto como se o servidor o tivesse criado.
Serializar é transformar um objeto em bytes para guardar ou enviar (um cookie, um token, um arquivo). Desserializar é o caminho de volta: pegar esses bytes e reconstruir o objeto na memória. Um exemplo comum: o servidor guarda a sua sessão num cookie em base64, e a cada pedido faz base64 vira texto, texto vira objeto com JSON.parse, e lê os campos.
O problema aparece quando os bytes vêm do cliente. Quem controla os bytes controla o objeto reconstruído, campo por campo. Se o servidor confia nesse objeto (lê role, isAdmin, um tipo, uma classe) como se ele mesmo o tivesse criado, então o cliente está preenchendo a cabeça do servidor. Isso é desserialização insegura: desserializar dado não confiável e agir sobre ele sem verificar.
O sinal de alerta é sempre o mesmo: um dado estruturado (cookie, token, blob) chega do cliente e é lido de volta para um objeto que decide algo. Quanto mais poderoso o formato (guardar tipos, guardar classes), pior o estrago possível.