Múltiplas vulnerabilidades de segurança na PAXSTORE (PAX Technology) - PSADV2021-001
Nota esclarecedora
A PRIDE Security não oferece nenhuma garantia às informações contidas neste documento e não assume responsabilidade por quaisquer erros que também possam estar presentes. Em nenhum caso a PRIDE Security ou qualquer um dos seus parceiros serão responsáveis por danos decorrentes do uso das informações aqui descritas. A PRIDE Security se reserva o direito de alterar ou atualizar este conteúdo sem aviso prévio a qualquer momento.
Sobre a fabricante
PAX Technology é uma das líderes mundiais em terminais de pagamento, com mais de 45 milhões de terminais vendidos ao redor do mundo. A empresa, fundada em 2001 na China, opera em diferentes mercados por meio de uma rede de escritórios diretos e parceiros de canal em 120 países.
Site: https://marketing.paxtechnology.com/about-pax
Sobre o produto
PAXSTORE é um ecossistema da PAX Technology que conecta mais de 1 milhão de terminais de pagamento, milhares de desenvolvedores de aplicativos e mais de 150 marketplaces ao redor do mundo.
Por meio de um conjunto de APIs, a PAXSTORE pode ser integrada aos sistemas de gerenciamento de terminais existentes usados para gerenciar aplicativos de pagamento. Alternativamente, os aplicativos de pagamento podem ser gerenciados diretamente na PAXSTORE por meio de sua sofisticada funcionalidade de gerenciamento de parâmetros.
Site: https://www.whatspos.com/
Versões afetadas
PAXSTORE v7.5 e anteriores (PAX Technology)
Sumário
Em julho de 2020, a PRIDE Security foi contratada para identificar possíveis vulnerabilidades afetando software e hardware em produtos da PAX Technology adquiridos por um de seus clientes. Em dezembro de 2020, após a contratante mitigar as falhas encontradas em seu ambiente, a PAX Technology foi comunicada sobre algumas das vulnerabilidades de segurança pertinentes ao ecossistema PAXSTORE.
Essas vulnerabilidades, encontradas no conjunto de APIs Web do marketplace de aplicativos para terminais, representam alto risco de segurança, uma vez que contribuem para o comprometimento completo do ambiente, quando exploradas por um agente mal-intencionado. No geral, essas vulnerabilidades permitem a escalação de privilégios (horizontal e vertical), além da execução de comandos para listagem e leitura de arquivos do servidor Web.
A PRIDE Security está noticiando essas vulnerabilidades identificadas no ecossistema PAXSTORE com o intuito de aumentar a conscientização sobre os riscos associados, bem como incentivar os clientes a atualizarem imediatamente para a versão mais recente (8.0).
Impacto
Como exemplos, chaves privadas de assinatura de tokens JWT do marketplace analisado puderam ser comprometidas e usadas para manipular os tokens de acesso dos usuários cadastrados na plataforma (clientes e administradores), e assim, forçar a instalação remota de qualquer aplicativo em milhares de terminais de pagamento.
Vale ressaltar que essa técnica poderia ser utilizada para diversos fins, por exemplo, criar botnets voltados a ataques de negação de serviço distribuído (DDoS), obter informações financeiras, colocar todos os terminais de pagamento gerenciados por meio da plataforma em estado não operante (off-line), fraudes, etc.
Por se tratar de falhas pertinentes ao ecossistema PAXSTORE, estima-se que mais de 150 marketplaces da PAXSTORE existentes no mundo estão atualmente vulneráveis e a falta de diligência pode colocar em risco milhões de terminais de pagamento e causar danos imensuráveis.
Finding 1: XML External Entity – XXE (CVE-2020-36124)
O ecossistema da PAXSTORE permite que qualquer um se cadastre como desenvolvedor no marketplace (https://paxstore-marketpace-cliente.com/developer). Conforme descrito na documentação, o desenvolvedor pode definir um template XML para a sua aplicação.
Entretanto, foram identificados que dois dos endpoints acessíveis por meio desse painel possuem vulnerabilidades do tipo XXE. São eles:
- POST /p-market-web/v1/developers/apks/{App-ID}/paramTemplateSchema;
- POST /p-market-web/v1/developers/{Dev-ID}/app/{App-ID}/paramAnalysis.
Exemplo - Requisição HTTPS (abreviada):
POST /p-market-web/v1/developers/apks/{APK-ID}/paramTemplateSchema HTTP/1.1
Host: api.a-paxstore-marketplace-domain.com
Authorization: Bearer Developer-Access-Token
X-Market-Domain: X-Market-Domain-Name
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarykVegzdE7IoasleA2
------WebKitFormBoundarykVegzdE7IoasleA2
Content-Disposition: form-data; name="paramTemplateFile"; filename="PrideSec.xml"
Content-Type: text/xml
<!DOCTYPE foo [<!ENTITY load SYSTEM "file:///path/to/conf/fs.properties" >]>
<Schema>
<Groups>
<Group>
<ID>sys_G0</ID>
<Title>&load;</Title>
…
</Group>
</Groups>
…
</Schema>------WebKitFormBoundarykVegzdE7IoasleA2
Content-Disposition: form-data; name="paramTemplateName"
undefined
------WebKitFormBoundarykVegzdE7IoasleA2--
Exemplo - Resposta HTTPS (abreviada):
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
{"paramTemplateName":"paramTemplateFile","groupList":[{"id":"","title":"XXE-RETURN-HERE”…}]}]}]}
A injeção de entidade externa XML (também conhecida como XXE) é uma vulnerabilidade de segurança da Web que permite que um atacante interfira no processamento de dados XML de um aplicativo. Neste caso, ela permite que um atacante liste e visualize arquivos do servidor de APIs. Dentre os arquivos acessíveis no back-end, verificou-se o /path/to/conf/fs.properties que contém informações sensíveis, como chaves de assinaturas.
Finding 2: Referência direta e insegura de objetos – IDOR (CVE-2020-36126)
A aplicação marketplace da PAXSTORE, a partir de seus endpoints, permite que usuários autenticados tenham acesso a leitura, escrita e remoção de dados pertencentes a outros usuários, aplicativos ou terminais de pagamento. Esse comportamento representa uma vulnerabilidade de Broken Access Control - IDOR. Foram identificados 26 endpoints vulneráveis.
Como descrito, esse tipo de falha possibilita que atacantes assumam o papel dos usuários, podendo levar à divulgação, modificação ou destruição não autorizada de suas informações.
Os seguintes endpoints presentes apresentam vulnerabilidades de IDOR:
-
GET /p-market-web/v1/developers/apps/{App-ID}
Permite a um desenvolvedor coletar informações de qualquer aplicativo do marketplace, por exemplo, sua App Key e App Secret, dado seu App ID (valor sequencial a partir de 1000000001). -
PUT /p-market-web/v1/developers/apps/{App-ID}/appKey
Permite a um desenvolvedor atualizar informações sensíveis como App Key e App Secret de qualquer aplicativo do marketplace, a partir de seu AppID (valor sequencial a partir de 1000000001). -
GET /p-market-web/v1/terminals/{Terminal-ID}/installedApks
Permite a um usuário comum coletar a lista de aplicativos instalados em qualquer terminal de pagamento, dado seu Terminal ID (valor de 10 dígitos numéricos iniciado por "1000"). -
DELETE /p-market-web/v1/users/notification/messages/{Message-ID}
Permite a um usuário comum deletar mensagens recebidas por outros usuários, dado o Message ID (valor de 10 dígitos numéricos iniciado por "1000"). -
PUT /p-market-web/v1/developers/sandbox/terminals/{Sandbox-Terminal-ID}
Permite a um desenvolvedor adicionar terminais sandbox na conta de outros usuários, dado seu “Sandbox Terminal ID (valor sequencial a partir de 1). -
GET /p-market-web/v1/developers/sandbox/terminals/{Sandbox-Terminal-ID}
Permite a um desenvolvedor coletar informações de terminais sandbox da conta de outros usuários, dado seu Sandbox Terminal ID (valor sequencial a partir de 1). -
DELETE /p-market-web/v1/developers/sandbox/terminals/{Sandbox-Terminal-ID}
Permite a um desenvolver deletar terminais sandbox da conta de outros usuários, dado seu Sandbox Terminal ID (valor sequencial a partir de 1). -
GET /p-market-web/v1/terminals/serialNo/{Terminal-SerialNo}
Permite a um usuário comum coletar informações de qualquer terminal de pagamento, dado seu número de serial (valor com 10 dígitos numéricos, normalmente iniciado com “117”). -
GET /p-market-web/v1/users/{User-ID}
Permite a um desenvolvedor ou reseller coletar informações do perfil de outros usuários (nome, e-mail, telefone, nome de login, privilégio da conta, timestamp do último login, etc.), dado de seu User ID (valor sequencial a partir de 1000000001). -
POST /p-market-web/v1/developers/enterprise/{User-ID}/admin?admin=true
Permite a um desenvolvedor alterar o status Developer Admin (true ou false) de qualquer outra conta, dado o User ID da vítima (valor sequencial a partir de 1000000001). -
POST /p-market-web/v1/feedbacks
Permite a um usuário comum criar mensagens de feedback, incluindo o ID de qualquer terminal de pagamento no payload, induzindo outros usuários acreditarem que se trata de uma mensagem criada pelo proprietário daquele terminal. -
DELETE /p-market-web/v1/feedbacks/{Feedback-ID}
Permite a um usuário comum excluir mensagens de feedback, a partir de seu ID (valor sequencial a partir de 1). -
POST /p-market-web/v1/developers/apks/{Apk-ID}/originFile
Permite a um usuário comum efetuar o download (através do downloadTaskId) de qualquer aplicativo Android disponível na loja de aplicativos sem a assinatura da plataforma, mesmo os que se encontram restritos para um determinado grupo de resellers. Para isso, basta informar o Apk-ID (valor sequencial a partir de 1000000001). -
DELETE /p-market-web/v1/developers/apps/{App-ID}
Permite a um desenvolvedor deletar aplicativos presentes no marketplace, dado seu App ID (valor sequencial a partir de 1000000001). Note que, uma vez feito isso, não é possível recuperar o aplicativo removido. -
POST /p-market-web/v1/developers/apps/{App-ID}/apks/file
Permite a um desenvolvedor adicionar um APK a qualquer projeto de aplicativo do marketplace, dado seu App ID (valor sequencial a partir de 1000000001). -
POST /p-market-web/v1/developers/apps/{App-ID}/apks/{Apk-ID}/file
Permite a um desenvolvedor adicionar uma nova versão de APK a qualquer aplicativo do marketplace, dado seus App ID e Apk ID. -
DELETE /p-market-web/v1/developers/apps/{App-ID}/apks/{Apk-ID}
Permite a um desenvolvedor excluir uma versão de APK específica de qualquer aplicativo do marketplace, dado seus App ID e Apk ID. -
POST /p-market-web/v1/developers/apps/{App-ID}/apks/{Apk-ID}/submit
Permite a um desenvolvedor submeter para aprovação uma nova versão de APK para qualquer aplicativo do marketplace, dado seus App ID e Apk ID. Caso aprovado pelo administrador, o aplicativo será disponibilizado para download na plataforma. -
POST /p-market-web/v1/admin/apps/{App-ID}/specific
Permite que um reseller distribua qualquer um dos aplicativos do marketplace para os seus próprios terminais POS. Com isso, um reseller consegue habilitar o acesso para baixar aplicativos distribuídos para outros resellers. -
GET /p-market-web/v1/admin/apps/{App-Id}/installed/terminals
Permite que um reseller verifique quais terminais baixaram um determinado aplicativo, mesmo de aplicativos que não sejam de sua propriedade. -
POST /p-market-web/v1/admin/apps/apks/{Apk-ID}/file
Permite que um reseller faça o download de qualquer aplicativo do marketplace, mesmo aqueles que não sejam de sua propriedade. -
GET /p-market-web/v1/terminals/{Terminal-ID}/configurations
Permite que um reseller tenha acesso a determinados status de hardware de qualquer terminal de pagamento (ex.: status do GPS, brilho da tela, língua, volume do POS). -
GET /p-market-web/v1/terminals/{Terminal-ID}/installedFirmware
Permite que um reseller tenha acesso ao nome do firmware instalado em qualquer terminal POS. -
GET /p-market-web/v1/admin/apps
Permite que um reseller obtenha a lista de todos os aplicativos disponíveis no marketplace, mesmo aqueles que não sejam de sua propriedade. -
GET /p-market-web/v1/guides/admin/docs/{Doc-ID}
Permite um usuário comum acessar a documentação guia do painel de administrador, dado o Doc-ID (valo sequencial iniciando por 1). -
GET /p-market-web/v1/guides/super/docs/{Doc-ID}
Permite um usuário comum acessar a documentação guia do painel de administrador global, dado o Doc-ID (valo sequencial iniciando por 1).
Finding 3: Obtenção de certificado de assinatura e sua senha (CVE-2020-36127)
O marketplace da PAXSTORE concede aos usuários com privilégio de administrador o controle de recursos extras da plataforma, como a chave do certificado público responsável por assinar os aplicativos Android nos terminais de pagamento.
Ao abrir o painel de administração do marketplace e acessar a funcionalidade de PUK Signature, o administrador não terá acesso ao atual certificado p12 e seu password. Isso acontece porque a aplicação Web requisita o endpoint GET /p-market-web/v1/admin/signature.
Ao acessar essa funcionalidade, o usuário tem a opção de substituir o atual certificado através da interface e não é possível visualizar o password do certificado (p12) já existente na plataforma. Entretanto, identificou-se um endpoint, não acessível pela interface administrativa, que retorna o certificado p12 em base64, bem como seu password, e ambos podem ser acessados, inclusive, por usuários com privilégio de reseller.
O endpoint mencionado é:
- GET /p-market-web/v1/admin/signature/signaturePuk
Retorna o atual certificado p12 em base64, bem como o seu password.
Exemplo - Requisição HTTPS (abreviada):
GET /p-market-web/v1/admin/signature/signaturePuk HTTP/1.1
Host: api.a-paxstore-marketplace-domain.com
Authorization: Access-Token-from-Reseller-or-greater-privilege
X-Market-Domain: X-Market-Domain-Name
Exemplo - Resposta HTTPS (abreviada):
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
{…"password":"PASSWORD-RETURNED-HERE","certificateName":"CERTIFICATE-NAME-RETURNED-HERE","certificate":"CERTIFICATE-RETURNED-HERE"…}
Finding 4: X-Terminal-Token pode ser obtido sem senha (CVE-2020-36128)
Um terminal de pagamento que possui instalado o aplicativo de marketplace em seu sistema operacional possibilita que o usuário efetue o download dos aplicativos disponíveis.
Cada terminal de pagamento possui uma token de sessão (chamado X-Terminal-Token) para acessar o marketplace. Isso permite que a loja identifique o terminal e disponibilize os aplicativos distribuídos pelo seu reseller. Além disso, toda a comunicação remota com o marketplace, que inclui envio de comandos, alteração no status do hardware entre outros, é feita com base no token X-Terminal-Token presente no terminal.
Entretanto, ao interceptar o tráfego HTTPS da loja de aplicativos, foi possível coletar a requisição ao endpoint responsável por atribuir o X-Terminal-Token ao terminal e verificar que não há qualquer senha ou chave de segurança que impeça o terminal de obter o X-Terminal-Token referente a outro dispositivo.
O endpoint mencionado é:
- POST /p-market-api/v1/terminal/login
Logo, um usuário mal-intencionado pode utilizar desse comportamento para autenticar seu terminal de pagamentos na loja de aplicativos se passando por outro dispositivo.
Isso permitirá, por exemplo, com que um terminal deixe de ser administrado pelo seu verdadeiro reseller, ou até mesmo com que tenha acesso a outros aplicativos restritos.
Finding 5: Revalidação de senha em operações sensíveis pode ser contornada (CVE-2020-36125)
A aplicação marketplace da PAXSTORE concede aos usuários administradores o controle de operações sensíveis, como upload de um novo certificado de assinatura de aplicativos Android. Toda vez que uma ação dessa é requisitada, o usuário é obrigado a informar sua senha novamente, mesmo que já esteja autenticado. Entretanto, notou-se que essa validação de senha pode facilmente ser contornada ao se requisitar a ação diretamente.
Dessa forma, em um cenário que um atacante tem acesso a sessão de um usuário, todo tipo de ação poderá ser tomada, mesmo sem o consentimento do responsável.
Entretanto, essa validação, embora realizada no back-end, não impede que o usuário requisite a operação diretamente, por exemplo, através do endpoint abaixo:
- GET /p-market-web/v1/admin/signature
A revalidação da senha também é requisitada ao se tentar visualizar o Access Secret da credencial de integração com sistemas externos. Da mesma forma, sem conhecer a senha do usuário autenticado, é possível requisitar diretamente o endpoint abaixo, responsável por retornar o Access Secret:
- GET /p-market-web/v1/admin/market/3rdsys/config/secret
Note que a credencial de sistemas externos provê acesso a vários endpoints sensíveis da aplicação. Para utilizá-la, basta seguir os passos do projeto PAXSTORE Open API, disponível no GitHub (https://github.com/PAXSTORE/paxstore-openapi-java-sdk). Logo, sua exposição representa um enorme risco às aplicações.
Remediação das vulnerabilidades
A PAX Technology lançou a versão 8.0 e informou a PRIDE Security que todas as vulnerabilidades descritas acima foram corrigidas.
É importante observar que a PRIDE Security não retestou ou confirmou se as correções são eficazes.
Timeline de comunicação com o fabricante
• 02 de dezembro de 2020 – Contato por e-mail (tentativa 1).
• 30 de dezembro de 2020 – Contato por e-mail (tentativa 2).
• 31 de dezembro de 2020 – PAX Technology reconhece o recebimento do email.
• 07 de janeiro de 2021 – PAX Technology fornece um roadpmap das correções de todas as vulnerabilidades.
• 25 de abril de 2021 – PAX Technology lança a versão 8.0 com as correções.
• 14 de maio de 2021 – Lançamento público (PRIDE Security).
Agradecimentos
Nome | Empresa |
---|---|
Ricardo B. Gonçales | PRIDE Security |
Andriel C. S. Biagioni | PRIDE Security |
Sobre a PRIDE Security
A PRIDE Security é uma consultoria especializada em segurança da informação que oferece serviços e produtos customizados para atender as necessidades e metas de cada negócio. Nós identificamos falhas em sistemas e processos e ajudamos os clientes a mitigar os riscos associados, preservando suas informações e reputação.
Com equipe composta por ex-diretores de consultorias, nossos especialistas são altamente experientes, grande parte com mais de 15 anos de mercado, tendo atuado em projetos de segurança da informação com empresas presentes em todos os continentes, sendo que várias delas compõem a “Fortune 500”. Nossa equipe possui conhecimento para atuar nos mais complexos projetos, com capacidade para reunir conhecimento de diversas áreas, como criptografia, engenharia reversa em diversas arquiteturas, debugging de hardware e programação.
Somos uma empresa privada brasileira sem vínculo a investidores, neutra na avaliação de fabricantes de produtos de segurança e sem meta de vendas, para garantir que o nosso time tenha foco na qualidade e entrega de resultados que superem as expectativas. Nosso crescimento ocorre através das recomendações dos clientes sobre nossos serviços, associado à reputação e relacionamento que construímos em cada projeto.
Com foco na excelência técnica e atendimento personalizado, atuamos nos mais diversos tipos de projeto, desde testes de segurança em ambiente SCADA, até projetos de segurança nacional.
Com reconhecimento técnico internacional, os profissionais da PRIDE Security constantemente palestram em eventos de segurança pelo mundo. Citamos abaixo alguns exemplos:
• Blackhat – EUA
• RSA Conference – EUA
• Defcon – EUA
• ToorCon – EUA
• Blackhat – Europa
• OWASP AppSec Research – Europa
• OWASP AppSecEU09 – Europa
• Troppers – Alemanha
• H2HC (Hackers 2 Hackers Conference) – Brasil
• YSTS (You Sh0t The Sheriff) – Brasil
Além de palestrar nos principais eventos de segurança ao redor do mundo, os profissionais também são responsáveis por escrever diversos papers (artigos), coautores de patente de tecnologia ofensiva registrada nos Estados Unidos da América (US8756697), encontrar e publicar falhas de software como Sun Solaris, Kernel de FreeBSD/NetBSD, QNX RTOS, Microsoft ISA Server, Microsoft Word, Adobe Flash, Adobe PDF, dentre outros softwares.
Muitas organizações preocupadas com a segurança da informação contam com a PRIDE Security. Se você estiver interessado, nós teremos o maior prazer em colocá-lo em contato com nossos clientes para compartilharem as experiências com nossos serviços.