Vulnerabilidades GSON ou exploits na desserialização para evitar
-
28-10-2019 - |
Pergunta
Estou planejando usar o método fromJson () do gson para analisar uma string proveniente do navegador.Existem vulnerabilidades potenciais associadas a isso?O tipo de dados para o qual estou convertendo é relativamente simples, um List e um booleano.Mas uma vez que gson usa reflexão, há algo para eu tomar cuidado?
Por exemplo, com o jvm mais antigo (anterior ao 6.24), um ataque DOS poderia ter sido usado contra inteiros, onde o analisador de inteiros travaria.
Algum json inteligente pode fazer o gson começar a carregar classes?
Solução
O que deve ser observado com o Gson é o tipo de construtor que você está usando (consulte o desserializador / serializador personalizado)
Gson tem outro ponto fraco, quando você está desserializando (digamos, usando um personalizado), é melhor verificar o tipo de objeto que está passando (use instanceof).
Outro ponto principal: Gson converterá automaticamente a variável com base no tipo que está sendo passado.
ie.{"var1": 1, "var2": "1"} O primeiro será convertido em um inteiro, o segundo em uma string, portanto, eu ficaria atento à transformação de seus objetos.
Outras dicas
Por motivos de segurança, um desenvolvedor de projeto Gson recomendou não permitir que o código de desserialização carregue as definições de classe especificadas pelo usuário - a desserialização de coisas com tipo genérico deve ser controlada com cuidado.
Não é tão difícil escrever um analisador JSON, e qualquer versão de código aberto bem usada deve ser tão segura quanto se poderia esperar.Claro, o analisador pode conter um bug que o torna sujeito a saturação de buffer e coisas do gênero, mas, novamente, a lógica é simples o suficiente para que isso não aconteça se o código for razoavelmente bem escrito e revisado.
Um perigo maior é que você mesmo não inspecione adequadamente os resultados da análise e aceite, digamos, um número que está fora do intervalo de seu aplicativo ou uma string muito longa.