
Enquanto explorava tecnologia IoT, encontrei uma vulnerabilidade no aplicativo Thingsboard que permitia caminhos para escalação de privilégios.
Thingsboard é um aplicativo de código aberto que permite gerenciamento de dispositivos, coleta, processamento e visualização de dados para serviços e implantações de IoT. Além disso, uma única instância do Thingsboard (gerenciada por um Administrador de Tenant) pode hospedar serviços para várias organizações, cada uma com seus próprios Administradores de Empresa.
Ao explorar suas funcionalidades, notei uma funcionalidade de upload de arquivos na visualização 'Image Gallery'. Infelizmente, o recurso era vulnerável a cross-site scripting armazenado, o que permitia a um adversário escalar privilégios ao roubar tokens de autenticação.
Essa vulnerabilidade afeta todas as versões do Thingsboard, incluindo as edições Community, Cloud e Professional. Reportei o problema de forma responsável à equipe de segurança do Thingsboard, que o reconheceu e se comprometeu a corrigi-lo em uma versão futura. Posteriormente, reportei a vulnerabilidade à MITRE, resultando na atribuição de um CVE.
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:HPara demonstrar a vulnerabilidade, seria necessário ter uma instalação do ThingsBoard (Repositório GitHub) com pelo menos um usuário com privilégios baixos.
Passo 1: Faça login em uma conta de cliente com privilégios baixos.

Passo 2: Navegue até Resources > Image Gallery

Passo 3: Crie um arquivo de imagem malicioso (aqui, um arquivo SVG é usado com um payload JavaScript) para explorar a vulnerabilidade de Cross Site Scripting.

Passo 4: Faça upload do arquivo e inspecione a resposta para identificar o caminho do arquivo de destino onde o payload foi carregado.

Passo 5: Acesse o caminho do arquivo publicLink para acionar o payload.

Como o payload está armazenado na instância legítima do Thingsboard, um adversário pode facilmente enganar alvos de alto valor (ex: Administrador de Tenant, Administrador de Empresa, etc.) para roubar tokens de autenticação.
Uma demonstração do impacto mencionado acima:
Passo 1: Faça login em uma conta de alto valor (aqui, uma conta de administrador de Tenant é usada no navegador Chrome, para demonstrar um ambiente isolado do navegador Firefox usado anteriormente).

Passo 2: Acesse o caminho do arquivo publicLink, obtido anteriormente.
