BlackTDN Search

sexta-feira, 6 de setembro de 2013

BlackTDN :: Bug acesso a base de dados sem validação de privilégios de usuário


Untitled-1Existe um ‘bug’ que permite acessar a base de dados, mesmo que o usuario não tenha acesso ao sistema (ambiente), com cadastro no arquivo de senhas do Protheus. A falha permite acesso total a base de dados através do APSDU com privilégios de Administrador usando uma instalação local para acesso ao servidor alvo. Para isso basta acompanhar os passos indicados abaixo:

Passos:
Ter o protheus instalado em sua máquina local.
Ter acesso ao ambiente, mesmo que seja como usuario normal e com acesso ao campo formulas.
Acessar o ambiente que deseja ter acesso aos dados para obter os parametros de acesso seguindo os passos abaixo:
    3.1 Acessar o sistema e usando o campo formulas para obter as informacoes abaixo:
        Anote as informações obtidas para uso posterior.        * Para cada item, de a) à d), executar uma formula de cada vez até obter o valor desejado.

        a)Database (Nome do banco configurado no Top)           
            Formula 1: ApMsgInfo(GetSrvProfString('DBDataBase', 'ERROR' ))
            Formula 2: ApMsgInfo(GetSrvProfString('TopDataBase', 'ERROR' ))
            Formula 3: ApMsgInfo(GetPvProfString( 'TotvsDbAccess', 'DataBase', 'ERROR', GetAdv97() ))
            Formula 4: ApMsgInfo(GetPvProfString( 'TopConnect', 'DataBase', 'ERROR', GetAdv97() ))
       
        b)Alias (Alias do banco definida no ODBC)
           
            Formula 1: ApMsgInfo(GetSrvProfString( 'DBAlias'   , 'ERROR'))
            Formula 2: ApMsgInfo(GetSrvProfString( 'TopAlias'   , 'ERROR'))
            Formula 3: ApMsgInfo(GetPvProfString( 'TotvsDbAccess', 'Alias' , 'ERROR', GetAdv97() ))
            Formula 4: ApMsgInfo(GetPvProfString( 'TopConnect', 'Alias' , 'ERROR', GetAdv97() ))
       
        c)Server (IP ou nome do servidor definido no INI)
       
            Formula 1: ApMsgInfo(GetSrvProfString( 'DBServer'  , 'ERROR' ))
            Formula 2: ApMsgInfo(GetSrvProfString( 'TopServer'  , 'ERROR' ))
            Formula 3: ApMsgInfo(GetPvProfString( 'TotvsDbAccess', 'Server'  , 'ERROR', GetAdv97() ))
            Formula 4: ApMsgInfo(GetPvProfString( 'TopConnect', 'Server'  , 'ERROR', GetAdv97() ))
           
        d)Port    (Numero da porta do servidor, por default 7890)
           
            Formula 1: ApMsgInfo(GetSrvProfString( 'DBPort', 'ERROR' ))
            Formula 2: ApMsgInfo(GetSrvProfString( 'TopPort', 'ERROR' ))
            Formula 3: ApMsgInfo(GetPvProfString( 'TotvsDbAccess', 'Port'  , 'ERROR', GetAdv97() ))
            Formula 4: ApMsgInfo(GetPvProfString( 'TopConnect', 'Port'  , 'ERROR', GetAdv97() ))
       
        Caso não tenha sucesso será exibida a mensagem abaixo:
        tela1

        Em caso de sucesso a mensagem abaixo será exibida com o valor pretendido:
        tela2-ok

        Para prosseguir são necessárias todas as informações:

        a)Database: Nome do banco configurado no Top/DBAccess
        b)Alias ODBC: Alias para acesso ao banco
        c)Server: IP do server Protheus
        d)Porta: (default 7890)       
        Sem qualquer um dos parametros acima nao será possível prosseguir.       
4º Acessar o sistema local (Instalação do Protheus em sua máquina)       
   4.1 Na tela de Splash informar APSDU, como rotina a ser executada,
        não alterar informações de ambiente.

       
        Após abrir o APSDU (Local).
       
        a) Acessar o menu arquivo e abrir
        apsdu abrir
       
        b) Escolher o driver de conexão [TopConnect]
        apsdu abrir driver
       
        c) Informar os parametros obtidos anteriormente para acesso a base de dados
        apsdu abrir conectar topconn
* Em 'DBMS/Base de dados' informar o resultado obtido com a formula a) concatenando
com o resultado da formula b). Por exemplo, suponhamos que o resultado de a) foi MSSQL
e o resultado de b) ODBC_P11, entao deverá ser informado no campo 'MSSQL/ODBC_P11'
E pronto! Todas as tabelas do sistema serão exibidas para seleção.


Dessa forma qualquer pessoa, desde que, na mesma rede e com acesso de usuario normal no ambiente que deseja ter acesso aos dados, poderá acessar com privilégios de admin todos os dados da empresa.
Também é possível executar queries consultando a base de dados, basta configurar os parametros na tela abaixo como descrito no 4º item, citado acima:
Conectar como...ApQA - Protheus P Query Analyzer
Como isso é possível?
       
Isso é possível devido a arquitetura do Protheus, na figura abaixo é apresentado de forma simplificada a arquitetura de validação de permissão de acessos.
       
Na figura 1
validacaoarquivosenha
é apresentada a forma normal de acesso onde o Client envia requisições ao Protheus Server, que após validação da permissão de usuário solicita acesso ao BD pelo TopConnect.
       
Na figura 2
topologia1
é apresentada a forma de acesso utilizando uma brecha na arquitetura, onde
o Client ‘impostor’, executa a validação do usuário em seu proprio Protheus Server garantindo
acesso de Administrador e então utilizando os parametros para requisição ao TopConnect de acesso
aos dados.
       
É evidente a existencia de uma brecha no processo, permitindo acesso a base por um usuario sem
sequer realizar a validação das permissões do mesmo, já que este consegue realizar requisições ao
TopConnect de forma autentica sem distinção da aplicação (Client) requisitante.
Este post não tem como objetivo desmerecer o produto, mas sim elucidar essa falha que pode estar sendo explorada. Esperamos então que sejam tomadas as devidas providencias a fim de sanar o problema.
[]’s

Um comentário:

  1. ÓTIMO POST
    Infelizmente a Totvs não demonstra interesse em acabar com as brechas, como se explora-las não fosse interessante a ninguém.
    Digo isto pois encontrei brechas no FTP da Totvs(cloud), onde abri chamado informando todo processo e nada foi feito para arrumar.

    Espero que a Totvs veja a importância de corrigir estas falhas pois ao contrário do que eles pensam, pode existir pessoas mal intensionadas prontas para se aproveitar.

    ResponderExcluir