Pesquisa de VulnerabilidadeVulnerability Research
Microsoft Store: comprando de graça e furando o sandboxMicrosoft Store: free purchases and sandbox bypass
Duas falhas de lógica no ecossistema Xbox / Microsoft Store que permitiram comprar produtos e assinar serviços sem pagar nada — uma abusando da cobrança de pré-venda, outra entrando nos sandboxes de desenvolvedor da Microsoft.Two logic flaws in the Xbox / Microsoft Store ecosystem that let me buy products and subscribe to services without paying a cent — one abusing the pre-order billing window, the other walking into Microsoft's developer sandboxes.
- CVE ID
- Severity
- High
- Affected
- Microsoft Store / Xbox Live / Xbox Game Pass
- Vendor
- Microsoft
- Disclosure
- Coordenada via MSRC · corrigidaCoordinated via MSRC · fixed
- Researcher
- Marlon Fabiano (@astrounder)
ConteúdoContents
A Microsoft tem um programa de Bug Bounty enorme. Já participei algumas vezes e recebi reconhecimentos no portal do MSRC (Microsoft Security Response Center). Foi aí que identifiquei um baita bug no método de pagamento da Microsoft: uma falha que me deixava comprar produtos da loja sem pagar nada por eles.Microsoft runs a huge Bug Bounty program. I've taken part a few times and earned some acknowledgements on the MSRC (Microsoft Security Response Center) portal — and that's where I found a great bug in Microsoft's payment method: a flaw that let me buy products from the store without paying a thing for them.
Primeiro bypass — compras grátisFirst bypass — free purchases
Vale dizer que, quando reportei a falha pro MSRC, não foi nada simples, porque o time de triagem acabou desacreditando — mesmo com as PoCs (Proof of Concept) de quem chegou dizendo: "Ei Microsoft, consigo assinar o Xbox Live de graça."It's worth mentioning that when I reported the flaw to MSRC it wasn't that simple, because the triage team ended up dismissing it — even with the PoCs (Proof of Concept) from someone saying: "Hey Microsoft, I can subscribe to Xbox Live for free."
Meu ticket no MSRC foi fechado, mas continuei refinando a vulnerabilidade e, depois de um tempo, abri um novo ticket dizendo: "Ei Microsoft, além de assinar seus serviços, agora consigo comprar seus produtos sem pagar nada."My ticket at MSRC got closed, but I kept improving the vulnerability and after a while I opened a new ticket saying: "Hey Microsoft, on top of subscribing to your services, now I can buy your products without paying anything."
Depois de muito descrédito por parte do MSRC e de muitas compras (uns US$ 5k em produtos) eles responderam: "Ei, fica com a gente, porque vamos continuar reproduzindo seu bug."After a lot of disbelief from MSRC and a lot of purchases (about US$ 5k in products) they replied: "Hey, stay with us, because we'll keep reproducing your bug."
Para entender o bug, primeiro precisamos entender o fluxo de compra da MicrosoftTo understand the bug, first we need to understand Microsoft's purchase flow
- O cliente, logado na Xbox ou na Microsoft Store, procura e seleciona os produtos que quer e, no fim, pede pra fechar o carrinho, iniciando o processo de pagamento.The customer, logged in to the Xbox or Microsoft Store, searches for and selects the products they want and, at the end, requests to close the cart, kicking off the payment process.
- A Microsoft recebe o pedido de compra dos itens selecionados e os detalhes do pagamento.Microsoft receives the purchase request for the selected items and the payment details.
- O Microsoft Payment Host faz uma request pro Payment Gateway responsável.The Microsoft Payment Host makes a request to the responsible Payment Gateway.
- O payment gateway consulta o adquirente (acquirer) para que ele possa liquidar a transação.The payment gateway consults the acquirer so it can settle the transaction.
- O adquirente consulta a instituição financeira para saber se o cliente tem crédito suficiente para a transação.The acquirer consults the financial institution to find out whether the customer has enough credit for the transaction.
- O banco submete a transação às suas regras de validação, que, entre outras coisas, checam se o cliente tem crédito para concluir a transação, e devolve a resposta ao adquirente.The bank submits the transaction to its validation rules, which — among other things — check whether the customer has credit to complete the transaction, and returns the answer to the acquirer.
- O processo inverso acontece para que a aprovação da compra seja concluída.The reverse process takes place so the purchase approval is completed.
Entendido o fluxo de compra, também precisamos saber que a Microsoft tem duas categorias de produto:With the purchase flow understood, we also need to know that Microsoft has two product categories:
- Produtos em release (jogos que já foram lançados).Release products (games that have already been released).
- Produtos em pré-venda (jogos ainda por lançar).Pre-order products (games to be released).
Sobre a lógica de cobrança do produtoAbout the product billing logic
Produtos em release — para produtos em release, a validação (checkout feito pelo gateway) ocorre no momento do cadastro do cartão de crédito e no momento da compra.Release products — for products in release, the validation (checkout performed by the gateway) happens at the moment of credit card registration and at the moment of purchase.
Produtos em pré-venda — para produtos em pré-venda, a validação (checkout feito pelo gateway) ocorre no momento do cadastro e da compra. Só que tem uma pequena diferença.Pre-order products — for pre-order products, the validation (checkout performed by the gateway) happens at the moment of registration and purchase. There's just one small difference.
A cobrança de um produto em pré-venda acontece no momento da compra, mas, se não houver limite disponível, ela vai ocorrer em outro momento. Nesse caso, se a primeira cobrança falhar, a segunda acontece 10 dias antes do produto ser lançado. Portanto, os passos 2 a 7 do fluxograma vão ser executados exatamente 10 dias antes de o produto virar um release.The charge for a pre-order product happens at the moment of purchase, but if there's no available limit, it'll happen at another time. In this case, if the first charge fails, the second one happens 10 days before the product launches. So steps 2 to 7 of the flowchart get executed exactly 10 days before the product becomes a release.
Nesse caso, temos a seguinte timelineIn this case we have the following timeline
- Cadastro do cartão de crédito — uma consulta ao payment gateway é feita para confirmar que os dados informados são de um cartão de crédito válido.Credit card registration — a query to the payment gateway is made to confirm that the data entered is a valid credit card.
- Compra do produto — a segunda consulta é feita no payment gateway; porém, como é um produto de pré-venda, não há obrigação de pagar no momento da compra, e temos a opção implícita de ser "cobrado" 10 dias antes do lançamento.Product purchase — the second query is made at the payment gateway; however, since it's a pre-order product, there's no obligation to pay at the moment of purchase, and we have an implicit option of being "charged" 10 days before release.
- Entrega do produto — o produto é enviado ao comprador.Product delivery — the product is sent to the buyer.
Nesse cenário, a tentativa de quebrar a lógica de pagamento é ganhar acesso ao produto e não pagar antes dos 10 dias do lançamento dele.In this scenario, the attempt to break the payment logic is to gain access to the product and not pay before the 10 days prior to its release.
Para fazer o bypass do pagamento, temos que tornar nosso cartão de crédito um cartão válido na hora de cadastrar o método de pagamento e um cartão inválido na hora de debitar o valor do produto.To bypass the payment, we have to make our credit card a valid card at the moment of registering the payment method and an invalid card at the moment of debiting the product value.
Reproduzindo a falhaReproducing the flaw
- Cadastramos um cartão válido na nossa conta do Xbox Live (a primeira consulta ao payment gateway é feita).We register a valid card in our Xbox Live account (the first payment gateway query is performed).
- Cancelamos e bloqueamos o cartão de crédito no banco emissor.We cancel and block the credit card at the issuing bank.
- Agora, com um cartão inválido, conseguimos comprar os produtos em pré-venda. A segunda consulta ao gateway é feita; porém, como a cobrança pode acontecer 10 dias antes do lançamento, conseguimos acessar os produtos sem ser cobrados.Now, with an invalid card, we can buy the pre-order products. The second query to the gateway is performed; however, since the charge can happen 10 days before release, we can access the products without being charged.
- A tentativa de débito do cartão cadastrado vai ser feita 10 dias antes do lançamento do produto, e você vai receber várias notificações avisando da falha de pagamento (Keep Calm and Bypass).The attempted debit of the registered card will happen 10 days before the product launch, and you'll get several notifications about the payment failure (Keep Calm and Bypass).
- Nesse momento, encontramos a falha: ela está no estorno da compra, porque a licença do produto não é revogada.At that moment, we find the flaw: it's in the purchase refund, because the product license is not revoked.
Quando o produto é lançado, você normalmente já tem a licença e vai poder curtir os jogos.When the product is released, you normally already have the license and will be able to enjoy the games.
Depois de um tempo percebi que, em alguns casos, nem é preciso cancelar um cartão de crédito válido. Dá pra usar também um cartão pré-pago ou uma conta PayPal sem fundos suficientes.After a while I realized that, in some cases, you don't even need to cancel a valid credit card. You can also use a prepaid card or a PayPal account without enough funds.
Curiosamente, na época deste report, não existia programa para ativos do Xbox One. Mas, depois que o MSRC aceitou o bug, eles criaram um programa privado pro qual fui convidado e, recentemente, lançaram um programa público.Interestingly, at the time of this report there was no program for Xbox One assets. But after MSRC accepted the bug, they created a private program I was invited to, and recently launched a public program.
Esse bug já foi corrigido, mas existem outras plataformas de e-commerce e de jogos que podem ser testadas exatamente da mesma forma.This bug has already been fixed, but there are other e-commerce and gaming platforms that can be tested in exactly the same way.
Entrei em contato com a Microsoft pelo programa de recompensas e eles me premiaram com um ótimo bounty.I contacted Microsoft through the reward program and they rewarded me with a great bounty.
PoCPoC
Segundo bypassSecond bypass
Acessando o sandbox de desenvolvedores da Microsoft e assinando os serviços Xbox Live e Xbox Game Pass.Accessing Microsoft's developer sandbox and subscribing to the Xbox Live and Xbox Game Pass services.
Passo a passo do segundo bypassStep by step for the second bypass
A exploração foi possível por causa da troca e da falta de controle no sandbox. O Xbox One tem um Developer Mode que permite algumas interações diferentes das de consoles em Retail. Quando um console está em Dev Mode, é possível trocar o sandbox atual para interagir com algumas features que deveriam estar disponíveis só para os donos daqueles sandboxes. Com o app "Developer Mode activation" dá pra trocar os sandboxes do console ou, em alguns casos, também dá pra ir no menu do Xbox em Settings > System > Console Information e apertar as teclas LB + RB + LT + RT. Porém, o segundo modo não funciona em todos os sandboxes depois de algumas atualizações da Microsoft.Exploitation was possible because of the swapping and lack of control in the sandbox. The Xbox One has a Developer Mode that allows some interactions that differ from Retail consoles. When a console is in Dev Mode it's possible to change the current sandbox to interact with some features that should only be available to the owners of those sandboxes. With the "Developer Mode activation" app you can change the console sandboxes, or in some cases you can also go to the Xbox menu under Settings > System > Console Information and press the LB + RB + LT + RT keys. However, the second mode doesn't work on all sandboxes after some Microsoft updates.
A vulnerabilidade acontece dentro de alguns sandboxes de desenvolvedores da Microsoft, onde existe uma opção de comprar assinaturas de serviço (XboxLive, GamePass PC, GamePass Console e GamePass Ultimate). Só que, como é um ambiente de desenvolvimento, não há cobrança por isso. A falha só é possível porque não há segmentação entre o que foi comprado dentro do ambiente de desenvolvimento e o que foi comprado em retail. Assim, compras feitas no ambiente de desenvolvimento aparecem nas compras feitas na MSA como se fossem uma compra real. Um fato que foi confirmado ao entrar em contato com o suporte do Xbox, que não sabia como eu tinha a assinatura do GamePass Ultimate sem pagar um centavo.The vulnerability happens inside some of Microsoft's developer sandboxes, where there's an option to buy service subscriptions (XboxLive, GamePass PC, GamePass Console and GamePass Ultimate). But since it's a development environment, there's no charge for it. The flaw is only possible because there's no segmentation between what was purchased inside the development environment and what was purchased in retail. So purchases made in the development environment show up in the purchases made on the MSA as if they were a real purchase. A fact confirmed by contacting Xbox support, who had no idea how I owned the GamePass Ultimate subscription without paying a cent.
Para corrigir essa vulnerabilidade, seria necessário segmentar as compras de retail e de desenvolvimento. Além disso, implementar um controle de autenticação e autorização para validar que o usuário que está digitando o sandbox realmente tem permissão para isso. Na época do report, dava pra entrar no sandbox só sabendo o ID dele.To fix this vulnerability, it would be necessary to segment retail and development purchases. On top of that, implement an authentication and authorization control to validate that the user typing in the sandbox actually has permission to do so. At the time of the report, you could enter the sandbox just by knowing its ID.
Os sandboxes conhecidos são:The known sandboxes are:
RETAIL (Retail ID)
XDKS.1 (Dev ID)
MSFT.XDK (Dev ID)
MSFT.1 (Dev ID)
MSFT.PRERELEASE (Dev ID)
MSFT.Dogfood (Dev ID)
MSFT.99 (Dev ID)
MSFT.88 (Dev ID)
TURN.99 (Turn 10's App Debugging ID)
RKTR.99 (Dev ID)
BNGE.99 (Destiny's App Debugging ID)
A vulnerabilidade foi reportada ao MSRC. Eles disseram que não havia esse cruzamento de assinaturas entre os ambientes Retail e Dev, mas não souberam explicar como eu tinha logado nos sandboxes listados. Mesmo assim, disseram que a vulnerabilidade não era uma falha de segurança e fecharam o caso.The vulnerability was reported to MSRC. They said there was no such crossover of subscriptions between the Retail and Dev environments, but they couldn't explain how I had logged into the listed sandboxes. Even so, they said the vulnerability wasn't a security breach and closed the case.
Depois que a vulnerabilidade foi publicada no Twitter em https://twitter.com/astrounder/status/1284109107922968577, ela foi corrigida — mas a Microsoft não entrou em contato com a gente para mencionar o incidente.After the vulnerability was published on Twitter at https://twitter.com/astrounder/status/1284109107922968577, it was fixed — but Microsoft never reached out to mention the incident.
PoCPoC
TimelineTimeline
- 2020-07-17Segundo bypass (sandbox) publicado no Twitter (@astrounder).Second bypass (sandbox) published on Twitter (@astrounder).
- 2020Após a divulgação, a Microsoft corrigiu o acesso ao sandbox.After disclosure, Microsoft fixed the sandbox access.
- 2021Primeiro bypass (compra grátis) aceito pelo MSRC, premiado e corrigido.First bypass (free purchase) accepted by MSRC, rewarded, and fixed.
- 2021-06-24Publicação deste write-up.Publication of this write-up.
ReferênciasReferences
- Tweet de divulgação do bypass de sandbox (@astrounder).Disclosure tweet for the sandbox bypass (@astrounder). https://twitter.com/astrounder/status/1284109107922968577
- Microsoft Security Response Center (MSRC). https://msrc.microsoft.com/