Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Social :: Rifa Festival da Arte Capoeira Projeto Eu Sou Ninja

Angariar fundos para cobrir os custos logísticos do "Festival da Arte Capoeira" e apoiar o projeto Eu Sou Ninja em sua missão de promover a integração social e cultural na comunidade de Jacaraípe. Com a criação da rifa, buscamos envolver a comunidade de forma ativa no financiamento do evento, permitindo que todos contribuam para o sucesso do festival e para a continuidade das atividades do projeto. Prêmio: Copia da minha biblioteca pessoal de AdvPL/TLpp ..etc Participe da Rifa Eu já contribui. Só falta você! ```cmd Pasta de C:\GitHub\naldodj-tlpp 13/04/2024 19:17 . 19/03/2024 13:49 .. 05/01/2024 12:22 2.742 .gitattributes 14/11/2023 16:02 83 .gitignore 02/12/2023 20:08 .vscode 05/01/2024 12:05 bin 13/04/2024 19:18 4.121 ChangeLog.txt 27/12/2023 02:05 include 14/11/2023 16:02 27.030 LICENSE.txt 14/11/2023 16:02 0 makepatch.lst 14/11/2

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 deste blog

BlackTDN :: RLeg ~ Desvendando a Função ParamBox

Para quem precisar desenvolver uma interface de entrada de dados, coisa rápida, e não quer ter aquele trabalhão danado que todos já sabemos, o Protheus tem uma função que ajuda muito, é uma interface semelhante a função Pergunte, porém com muito mais opção de objeto de entrada de dados, alias até colocar o scrollbox desta interface com todos os objetos em outra MsDialog ou Wizard é simples. Vejam o exemplo abaixo, boa sorte! Rleg. //---------------------------------------------------------- // Função exemplo utilizando a função ParamBox() //---------------------------------------------------------- User Function xParamBox() Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox" // ---------------

Protheus :: Chamando Funções do Menu Diretamente e sem a Necessidade de Login

Ferne$ perguntou: "...é possível abrir alguma rotina do sistema sem solicitar login ao usuário, como por exemplo a rotina MATA010..." Sim Ferne$, é possível sim. Abaixo um Exemplo para a Chamada à função MATA010 sem a necessidade de Login no sistema. #INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" /*/ Funcao: MATA010Ex Data: 30/04/2011 Autor: Marinaldo de Jesus Descricao: Executar a Funcao MATA010 diretamente sem a necessidade de LOGIN no Protheus Sintaxe: 1 ) U_MATA010Ex ( Chamada diretamente na Tela de Entrada do Sistema ) ; ou 2 ) totvsclient.exe -q -p=u_MATA010Ex -a=01;01 -c=rnp_local -e=rnp -m -l ( Chamada Via Linha de Comando ) /*/ User Function MATA010Ex( cEmpFil ) Local aEmpFil Local bWindowInit := { || __Execute( "MATA010()" , "xxxxxxxxxxxxxxxxxxxx" , "MATA010" , "SIGAFAT" , "SIGAFAT", 1 , .T. ) } Local cEmp Local cFil Local cMod Local cModName := "SIGAFAT" DEFA

BlackTDN :: Customizando a interface de Login no Protheus e by You

A publicação “ BlackTDN :: By You e sua nova tela de login ”  de nosso amigo OBona deu o que falar e, em função disso, esse que a muito não vos escreve resolveu criar uma versão onde será possível personalizar, “por completo”, a tela de login no Protheus/by You. Considerando que OBona já havia “mapeado, identificado e customizado” as imagens peguei-as emprestadas para o exemplo que se segue: O primeiro passo para a customização “total” da interface de login do Protheus/by You será implementar o “Ponto de Entrada” ChgPrDir (Diretório de impressão) . Usaremos esse PE juntamente como programa U_FindMsObject.prg (apresentado pela primeira vez em: Protheus :: ADVPL : The Container : Presents Pandora's box ). Diferente do exemplo proposto por OBona, que substitui, durante o processo de compilação, as imagens padrões do sistema (excluindo-as) por imagens customizadas (com o mesmo nome) este novo exemplo mantém, no RPO, as imagens padrões adicionando novas imagens customizadas que serã