3
respostas

[Bug] Possível falha de segurança no Spring Boot Java

Olá, Estou mexendo em uma aplicação que roda em Java com Spring boot + Maven. Tenho uma API com uma rota onde recebo um Enum por parâmetro:

@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Supplier>> getSupplierByType(
        @RequestParam(value = "Type", required = false) SupplierTypes type)
        throws UnsupportedEncodingException {
    List<Supplier> suppliers;
    // Some Logic
}

Ao rodar a aplicação e fazer uma chamada conforme a seguinte:

http://localhost:8080/api/suppliers?Type=${T(java.lang.System).getenv()}

A aplicação roda com erro, porém loga na tela as minhas variáveis de ambiente. Isso porque ele executa o script passado pela query parameter

O breakpoint nem chega a passar para nenhuma linha após a declaração do método, o que me faz pensar que existe uma possível falha de segurança no spring boot. Alguem sabe se fiz alguma coisa errada, ou se tem algum jeito de evitar que esse tipo de erro ocorra?

3 respostas

Fala Fernando, de boa ?

Cara, geralmente a galera acaba criando uma classe diferente do modelo utilizado, justamente para não permitir esse tipo de injection..

Outro tipo de cenário é fazer a validação dos parametros recebidos, assim vc garante que não vai ter nada diferente do esperado.

Fala Matheus, tudo certo!! Sim, eu estou indo por essa abordagem Só queria saber se tinha alguma coisa pronta no framework que evitasse esse problema, saca? Mas já que não tem, vou fazer a conversão aqui mesmo Obrigado pela ajuda!

Bom dia. Fiz essa alteração e parece que o script em linux é executado antes de chegar no meu código. Fiz a alteração pra receber uma string como parâmetro, e se é passado o comando malicioso, ele executa antes de qualquer breakpoint Alguem tem alguma ideia? Código atual:

@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Supplier>> getSupplierByType(
        @RequestParam(value = "Type", required = false) string type)
        throws UnsupportedEncodingException {
    SupplierType myType = SupplierType.fromString(type);
    // Some Logic
}