Pular para o conteúdo
Todos os conceitos

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.

cliente cookie (base64) servidor 1 - manda os bytes objeto u: ... role: admin 2 - reconstrói campo que decide Os bytes vieram do cliente; o servidor confia nos campos do objeto reconstruído.
O cliente manda bytes num cookie; o servidor os reconstrói num objeto e confia nos campos, inclusive os que decidem permissão.

Aparece nestes desafios