- Há pouco tempo, foi possível montar uma cadeia de ataque que, explorando uma vulnerabilidade de injeção de JSON em dispositivos Samsung, chegava até a execução de código no aparelho
- Isso pode servir de lição sobre como APIs que confiam cegamente no JSON do payload podem ser exploradas
Injetando de forma "inteligente" em tudo
- No caso do Samsung Smart Hub, um app móvel conseguia se comunicar remotamente com o hub para controlar tudo o que estivesse conectado
- Ao enviar uma requisição POST maliciosa para o endpoint /credentials, era possível alterar as credenciais usadas pelo hub para se conectar a um servidor remoto e adulterar os dados, levando a uma injeção de SQL
- A biblioteca json-c da qual a Samsung dependia foi compilada com JSON_TOKENER_STRICT=0, permitindo definir strings com aspas simples e aspas duplas
- Com isso, o invasor podia criar colunas personalizadas no banco de dados sqlite interno do hub
- Em seguida, ao inserir uma cadeia ROP excessivamente longa na tabela camera e enviar um DELETE para o endpoint /cameras, era possível fazer o processo video-core travar ao tentar ler os dados, provocando um buffer overflow tradicional baseado em pilha
- A lição aqui foi: injeção de JSON → injeção de SQL → buffer overflow → ROP = comprometimento total
O que é injeção de JSON?
- Injeção de JSON é uma vulnerabilidade em que dados maliciosos são inseridos em um fluxo JSON para alterar o comportamento da aplicação ou acionar operações não intencionais
- A injeção de JSON no lado do servidor ocorre quando dados de fontes não confiáveis são usados direta ou indiretamente em código no servidor sem a devida sanitização
O problema está no parser
- Em aplicações web e APIs modernas, vários parsers podem ser usados no pipeline de requisição, cada um com características e fragilidades próprias
- A combinação de inconsistências entre parsers e processamento de requisições em múltiplas etapas pode levar a vulnerabilidades graves
- Parsers JSON enfrentam dificuldades porque o RFC oficial do JSON deixa em aberto temas como chaves duplicadas e representação numérica
- O RFC oficial não é a única especificação: também existem ECMAScript, JSON5, HJSON e Binary JSON (BSON)
- A interoperabilidade entre parsers expõe riscos de segurança cuja existência muita gente nem imagina
Problemas de segurança na interoperabilidade entre parsers JSON
- Inconsistências na forma de tratar chaves duplicadas
- Inconsistências na forma de tratar caracteres especiais ou comentários
- Inconsistências na (de)serialização de JSON
Como explorar JSON?
- Ao manipular JSON, é possível injetar dados para fazer a aplicação funcionar de maneiras que o desenvolvedor não esperava
- Quando se consegue manipular a forma como os dados passam pelos componentes dentro da infraestrutura da API, surge a oportunidade de controlar a lógica de negócio
- Ao entender como os parsers processam a entrada, é possível explorar esse comportamento para fazer com que os dados sejam interpretados de formas que permitam contornar a validação de entrada
Conclusão
- O ataque ao Samsung Smart Hub é apenas um exemplo de como a injeção de JSON pode levar a cadeias complexas de vulnerabilidades, desde injeção de SQL até execução remota de código
- A causa raiz muitas vezes está nas inconsistências de como parsers JSON tratam os dados, especialmente quando vários parsers incomuns estão envolvidos
- Ao inspecionar cuidadosamente como objetos JSON são serializados, desserializados e processados, é possível descobrir como criar payloads capazes de contornar filtros de sanitização e influenciar a lógica de negócio
- Como as APIs continuam sendo a base das aplicações modernas, garantir a segurança da forma como elas processam dados é mais importante do que nunca
1 comentários
Acho que vai ser preciso validar com bastante rigor os dados recebidos no body em JSON.