Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Implementando o Desafio "String to Integer (atoi)" em Harbour e TL++ (TOTVS Language Plus Plus)

_Créditos das imagens: Copilot_ # LeetCode :: Implementando o Desafio "String to Integer (atoi)" em Harbour e TL++ (TOTVS Language Plus Plus) A conversão de uma string para um número inteiro é uma tarefa comum em muitos algoritmos de programação, sendo frequentemente utilizada como um exercício para demonstrar manipulação de strings e números. A técnica utilizada para implementar o [desafio "String to Integer"](https://leetcode.com/problems/string-to-integer-atoi) (ou `atoi`) pode variar significativamente dependendo da linguagem de programação escolhida. Neste artigo, vamos explorar as nuances de duas implementações do desafio, uma utilizando **Harbour** (linguagem baseada em xBase) e outra utilizando **TL++** (TOTVS Language Plus Plus, um superconjuto do dialeto xBase), comparando o estilo e as abordagens em ambas as linguagens. ## O Desafio: Converter uma String para um Número Inteiro (atoi) O objetivo do problema é escrever uma função que converta uma string...

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

Comentários

  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
  2. Para contornar esta falha seria interessante criar regras no firewall do servidor para permitir conexões de entrada apenas de maquinas previamente autorizadas.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas