░░░                              ░░░             ▀▄
                       ▄ ▀▀▄              ░░░                                   ■  ▒          ░░░
                     ▄      ▒        ▄▄                ▒    ▄▀       ▒         ▄  ▀▄▄
                     ▄▄             ▄                ▄█    █       ▄▀           ▄█▀▀▀     ▀▀ ▄
                      ▀▄▀█▄▄▄▄▄▄██▀ ▀▄▀███▄▄▄      ▄▄█▄▄▄ █▄▄▄   ▄▀▄▄▀  ▄▄▄▄▄    ▀▄▀ ▒    ▄▄▄▄▀
                      ▀▀▄▄  █▄▀▀▄     ▄▀ ▄▄ ▀▄   ▄▀▄▀▀▀▀▄  ▀▄▀▀▄██▀█   █▀▌  ▐▄          ▄█▀▀▀▀▄▄
                            █▀ ▄▄ ▒   ░░   █ █▀ ▄▄▀ ■▀ ▀▄  ▒ ▀▄▀▄▀ █  ▀▄    ██▄  ▓     ▄█ ▄▀▀ ██▀▄
           ▄              ▒ ██   ▄    ▓▓   ▒ █▄ ██ █   ██  █▄  ▀  ▀▒  ██   ▐▌██  █ ▒   ▄█ ▓   ██            ▄
             ▀            ▒ ▀█     ▄  ██     █  ░░ ▒   ▓▓  █▄     ██  ▓▓   █ ░█  ▄ ▄   ██ ▒   ▀▄          ▀
            ▀▄            ▓ ▓█      ▀▀█▀▄▄▄▄▀   ▒▒     ░░▀ ▒▒ ░   ▒▒  ░░  ▐▌ ██  █ ▒   ▀▀ ▄▄▄▄▄ ▄         ▄▀
           ░█▀            █ █▓      ▒ ▓ ▀▀▄    ▄▄▄▄▄▓▓▀▄█  ░▓ ▒   ▓░▐ █▓  ▓  ▌▓  ░▒░ ▄▀██  ▄▄▄▀▀          ▀█░
           ▄╬▄            ▓ ▓▒      █ █▓   ▀▒▄  ▀░▀▀   █▓  ▓█ █   █▓  ▓█ ▐▌  ▓▓  ▓▓█ ▄▀█▓     ▄█ ▒        ▄╬▄
      ,    ▌█▌    ,       ▓ ░▀      ░ ▓█  ▀  ▀░░▄▄     ░▓  █▓ █   ▒█▐ ▌▓ █   ▌▒  █▓█   ░█ ▒   █▓ █   ,    ▐█▐    ,
      ▄ ▄ ═▌█▌═ ▄ ▄  ░░▀▀▀▀ ██      ░ █▒    ▀▄ ▀▓░░░▄▄ █░  ▓░ ▓   ▀█▐ █░▐▌   ▌█  ░░░   ▀░ ▓   ░█ ▀   ▄ ▄ ═▐█▐═ ▄ ▄ 
       ▀▀█▓▄▓█▓█▀▀    ▀▄ ▀░░░░   ▒  ▀▄▓▀▒     █  █▓▄▀▀▀░▄▀░░█ █   ░░█▀▀▓█    █   ░▓█ ▀▄▓█ ▓   ░  ▄▄   ▀▀█▓█▓▄▓█▀▀  
           ▀▓▄%         ▀  ▀▄     ▀░░▀ ▄    ▄▀  ▄▀     █▀  ▀█ ▓   ░▀▄▄  ▀ ▄▄▀   ▒▀ █▄  ▀█ █   ▓▄▀  ▀     %▄▓▀      
   ▒      •▀▒             ▀▄        ▄▄▀    ▒  ▄▀          ▀▄  ▓   ▄▀   ▀ ▄▄  ▀    ▄▀  ■▄  ░   ▀            ▒▀•      ▒   
 ▄▀▀▀▀▄▄▄█▄▄▒                ■                ░     ▒        ▀█         ■       ▄▀      ▀▄░                ▒▄▄█▄▄▄▀▀▀▀▄ 
 ░ ░  •▀                                       ▀ ▄▄▀                           ▒          ▀                     ▀•  ░ ░ 
 █ ▒▄▀                                                                               [ Arte por L.Ayres ]         ▀▄▒ █ 
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒          --------------------------------------------------------------------------------                      ▒ █
 █▒▒                   .:.:.: Elytron Cibersecurity orgulhosamente apresenta :.:.:.                                 ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                  ::::: fepame e vrechson em :::::                                              █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                 :.:.:. Histórias que seu avô nunca lhe contou sobre firebase .:.:.:                            ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                            ~~~~~  e outros contos de arrepiar  ~~~~~                                           █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                            ___                                                                                 ▒▒█
 █ ▒                         ___)__|_                                                                               ▒ █
 █ █                    .-*'          '*-,                                                                          █ █
 █▒▒ ¡                 /      /|   |\     \                                                                         ▒▒█
 █ ▒,█▄               ;      /_|   |_\     ;                                                                        ▒ █
 █ █▀▀°               ;   |\           /|  ;                                                                        █ █
 █▒▒                  ;   | ''--...--'' |  ;                                                                        ▒▒█
 █ ▒                   \  ''---.....--''  /                                                                         ▒ █
 █ █                    ''*-.,_______,.-*'                                                                          █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          0x00 Introdução                                                                                       ▒ █
 █ █                                                                                                                █ █
 █ ▒          Mais uma noite de Halloween e o nosso grupo se encontra reunido nesta casa abandonada para            ▒ █
 █▒▒          uma bateria de histórias horripilantes. Hoje, nosso encontro será temático, iremos contar             ▒▒█
 █ ▒          histórias assustadoras sobre o Firebase, a plataforma do Google amado pelos devs, e ainda             ▒ █
 █ █          mais pelos hackers. Para os não familiarizados, essa plataforma oferece diversas ferramentas          █ █
 █ ▒          e serviços que auxiliam o desenvolvimento e gerenciamento de aplicações, incluindo os                 ▒ █
 █▒▒          aplicativos de celular. Entre as principais funcionalidades oferecidas estão o armazenamento        ¡ ▒▒█
 █ ▒          de dados, autenticação e hospedagem das aplicações. Neste momento talvez você esteja se            ▄█,▒ █
 █ █          perguntando: O que tem de tão assustador nisso tudo? Apaguem as luzes e acendam as velas,          °▀▀█ █
 █▒▒          que vamos compartilhar 3 histórias assustadoras que seus avós nunca devem ter te contado              ▒▒█
 █ ▒          sobre o Firebase:                                                                                     ▒ █
 █ █                                                                                                                █ █
 █ ▒          0x01 Identity Toolkit                                                                                 ▒ █
 █▒▒          0x02 Firebase security rules                                                                          ▒▒█
 █ ▒          0x03 Realtime Database                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒                  _   ,_,   _                                                                                   ▒ █
 █▒▒                 / `'=) (='` \                                                                                  ▒▒█
 █ ▒                /.-.-.\ /.-.-.\                                                                                 ▒ █
 █ █                `      "      `                _   ,_,   _                                                      █ █
 █ ▒                                              / `'=) (='` \                                                     ▒ █
 █▒▒ ¡                                           /.-.-.\ /.-.-.\                                                    ▒▒█
 █ ▒,█▄                                          `      "      `                                                    ▒ █
 █ █▀▀°                                                                                                             █ █
 █▒▒          0x01 Autenticação em Firebase                                                                         ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          Era um 22 de Outubro chuvoso, eu estava testando um ambiente com diversas aplicações, todas           █ █
 █ ▒          elas se tratavam de páginas de login, e portanto eu acreditava que não teria nenhum                   ▒ █
 █▒▒          resultado interessante nesse teste. Esse era o meu estado quando fiz a primeira varredura e,          ▒▒█
 █ ▒          utilizando a ferramenta httpx para identificar a tecnologia utilizada, ficou claro que todos          ▒ █
 █ █          os domínios utilizavam a mesma tecnologia: Firebase.                                                  █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Eu, que não tive muita experiência com esse serviço, fiz o que qualquer um faria, e                   ▒▒█
 █ ▒          perguntei aos meus amigos se eles conheciam alguma falha comum nessa tecnologia. Foi neste            ▒ █
 █ █          momento que o fepame me encontrou, e me estendeu a mão. Após 30 minutos, já haviamos obtido           █ █
 █ ▒          acesso a todas as aplicações. Mas, para entender todos os detalhes dessa história,                    ▒ █
 █▒▒          precisamos saber como a autenticação funciona no Firebase.                                          ¡ ▒▒█
 █ ▒                                                                                                             ▄█,▒ █
 █ █          O Identity Toolkit do Firebase fornece uma API que permite a aplicação o utilizar como             °▀▀█ █
 █▒▒          autenticação no ambiente, disponível através do endereço                                              ▒▒█
 █ ▒          https://identitytoolkit.googleapis.com/. Além disso, uma documentação mais completa pode ser          ▒ █
 █ █          obtida em https://docs.cloud.google.com/identity-platform/docs/reference/rest. Ao se ler a            █ █
 █ ▒          documentação, é possível perceber algumas coisas interessantes, como por exemplo a menção de          ▒ █
 █▒▒          usuários anônimos e endpoints de registro.                                                            ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          Mas para poder começar a interagir com essas APIs, um detalhe ainda se faz necessário: como           █ █
 █ ▒          o Firebase sabe com qual aplicação estamos trabalhando? A identificação é feita por um token          ▒ █
 █▒▒          do Firebase, que frequentemente será encontrado em algum arquivo JavaScript carregado na              ▒▒█
 █ ▒          página, o trecho abaixo mostra um formato comum no qual o apiKey pode ser encontrado:                 ▒ █
 █ █                                                                                                                █ █
 █ ▒                  const e = {                                                                                   ▒ █
 █▒▒ ¡                    apiKey: "AIza[...]",                                                                      ▒▒█
 █ ▒,█▄                   authDomain: "appcliente-c2e0.firebaseapp.com",                                            ▒ █
 █ █▀▀°                   databaseURL: "https://appcliente-c2e0.firebaseio.com",                                    █ █
 █▒▒                      projectId: "appcliente-c2e0",                                                             ▒▒█
 █ ▒                      storageBucket: "appcliente-c2e0.appspot.com",                                             ▒ █
 █ █                      messagingSenderId: "392960120414",                                                        █ █
 █ ▒                      appId: "1:392960120414:web:d3456256189ef18fab81241",                                      ▒ █
 █▒▒                      measurementId: "G-M1S5B121L"                                                              ▒▒█
 █ ▒                  }                                                                                             ▒ █
 █ █                                                                                                                █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Repare que os tokens do Firebase sempre iniciam com o mesmo padrão AIza[...] (e cuidado               ▒▒█
 █ ▒          para não confundir com outros tokens do Google, que também iniciam com esse padrão, tipo o            ▒ █
 █ █          token do Google maps). No Apêndice A, foi disponibilizado um bcheck para a identificação              █ █
 █ ▒          passiva desse token, auxiliando na descoberta de ambientes utilizando essa tecnologia.                ▒ █
 █▒▒                                                                                                              ¡ ▒▒█
 █ ▒          Uma vez com o token é possível começar com as maldades. A implementação do Firebase não é          ▄█,▒ █
 █ █          capaz de impedir que um usuário se registre no ambiente, a não ser que todo o processo de          °▀▀█ █
 █▒▒          autenticação seja desativado. Portanto, o primeiro teste que pode ser realizado é a                   ▒▒█
 █ ▒          tentativa de se obter um token utilizando um usuário anônimo! Isso pode ser feito através do          ▒ █
 █ █          comando a seguir:                                                                                     █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          $ TOKEN=AIza[...] curl -s                                                                             ▒▒█
 █ ▒          "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=$TOKEN" -H 'Content-Type:              ▒ █
 █ █          application/json' --data-binary '{"returnSecureToken":true}'                                          █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Tudo bem também se não for possível obter esse token através desse método, a opção é criar o          ▒ █
 █ █          nosso próprio usuário. Essa ação pode ser feita com a requisição a seguir:                            █ █
 █ ▒                                                                                                                ▒ █
 █▒▒ ¡        $ TOKEN=AIza[...] curl -s                                                                             ▒▒█
 █ ▒,█▄       "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=$TOKEN" -H 'Content-Type:              ▒ █
 █ █▀▀°       application/json' --data-binary                                                                       █ █
 █▒▒          '{"email":"user@mail.com","password":"OTelesNaoLavaOPe","returnSecureToken":true}'                    ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒          Caso o ambiente esteja vulnerável, o usuário será criado e um token de sessão poderá ser              ▒ █
 █▒▒          obtido. A autenticação poderá ser feita com essas credenciais ou utilizando esse token de             ▒▒█
 █ ▒          sessão obtido com elas. No caso em análise, esse token se quer foi necessário após o login,           ▒ █
 █ █          visto que foi descoberto que as requisições para a API não eram autenticadas.                         █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                  _   ,_,   _                                                                                   ▒▒█
 █ ▒                 / `'=) (='` \                                                                                  ▒ █
 █ █                /.-.-.\ /.-.-.\                                                                                 █ █
 █ ▒                `      "      `                _   ,_,   _                                                      ▒ █
 █▒▒                                              / `'=) (='` \                                                   ¡ ▒▒█
 █ ▒                                             /.-.-.\ /.-.-.\                                                 ▄█,▒ █
 █ █                                             `      "      `                                                 °▀▀█ █
 █▒▒                                                                                                                ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          0x02 Firebase security rules                                                                          █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Era fim de tarde. A luz do sol desaparecia lentamente atrás dos prédios, derramando sombras           ▒▒█
 █ ▒          longas e silenciosas pelas ruas — como se algo antigo e inquieto estivesse despertando. Eu            ▒ █
 █ █          revisava meus alerts de rotina, confiante de que tudo estava sob controle… até meu celular            █ █
 █ ▒          vibrar.                                                                                               ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Bsysop.                                                                                               ▒ █
 █ █          O monstro do submundo digital. A criatura que habita redes esquecidas, servidores                     █ █
 █ ▒          abandonados.                                                                                          ▒ █
 █▒▒ ¡                                                                                                              ▒▒█
 █ ▒,█▄       A mensagem apareceu na tela como um sussurro vindo de uma cripta:                                     ▒ █
 █ █▀▀°       _"Consegui acessar várias bases de dados do Firebase."_                                               █ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Senti um arrepio percorrrer minha espinha.                                                            ▒ █
 █ █          Isso não fazia sentido.                                                                               █ █
 █ ▒          Nós tínhamos bloqueado o acesso.                                                                      ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Até que encontrei.                                                                                    ▒ █
 █ █          A verdade.                                                                                            █ █
 █ ▒          O horror!!!                                                                                           ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Firebase Security Rules.                                                                              ▒ █
 █ █                                                                                                                █ █
 █ ▒          Silenciosas. Esquecidas. Letais.                                                                      ▒ █
 █▒▒                                                                                                              ¡ ▒▒█
 █ ▒          Imagino que todos conhecem a famosa vulnerabilidade                                                ▄█,▒ █
 █ █          https://appcliente-c2e0.firebaseio.com/.json, não? Mas, por que essa vulnerabilidade ocorre?       °▀▀█ █
 █▒▒          Como podemos nos proteger e abusar dessa funcionalidade?                                              ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          Firebase Security Rules são o mecanismo de controle de acesso do Firebase. Elas definem               █ █
 █ ▒          quem pode ler e escrever em seus produtos e sob quais condições. Diferente de um                      ▒ █
 █▒▒          backend tradicional, onde você constrói toda a camada de autorização, o Firebase confia               ▒▒█
 █ ▒          nessas regras para proteger os dados.                                                                 ▒ █
 █ █                                                                                                                █ █
 █ ▒          E aqui está o ponto crítico:                                                                          ▒ █
 █▒▒          Se a gente não definir as regras corretamente, o Firebase assume um comportamento                     ▒▒█
 █ ▒          extremamente permissivo — e isso significa que **qualquer pessoa com o link pode acessar os           ▒ █
 █ █          dados**.                                                                                              █ █
 █ ▒                                                                                                                ▒ █
 █▒▒ ¡        Por que a vulnerabilidade ocorre?                                                                     ▒▒█
 █ ▒,█▄                                                                                                             ▒ █
 █ █▀▀°       Existem três cenários:                                                                                █ █
 █▒▒          - Regras negligenciadas ou deixadas no modo de desenvolvimento:                                       ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          {                                                                                                     █ █
 █ ▒            "rules": {                                                                                          ▒ █
 █▒▒              ".read": true,                                                                                    ▒▒█
 █ ▒              ".write": true                                                                                    ▒ █
 █ █            }                                                                                                   █ █
 █ ▒          }                                                                                                     ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Permitindo que qualquer pessoa com as configurações do firebase possa acessar, por exemplo a          ▒ █
 █ █          base de dados com o famoso /.json                                                                     █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          - Regras que apenas validam se o usuário está autenticado                                           ¡ ▒▒█
 █ ▒                                                                                                             ▄█,▒ █
 █ █          {                                                                                                  °▀▀█ █
 █▒▒            "rules": {                                                                                          ▒▒█
 █ ▒              ".read": "auth != null",                                                                          ▒ █
 █ █              ".write": "auth != null"                                                                          █ █
 █ ▒            }                                                                                                   ▒ █
 █▒▒          }                                                                                                     ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒          Aqui o Firebase exige que o usuário esteja logado.                                                    ▒ █
 █▒▒          O problema? Autenticação ≠ Autorização.                                                               ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          > Qualquer usuário autenticado pode acessar qualquer dado, mesmo que não seja dele.                   █ █
 █ ▒                                                                                                                ▒ █
 █▒▒ ¡        E é ai que muita gente, ao acessar apenas o /.json e receber um Permission Denied encerra             ▒▒█
 █ ▒,█▄       os testes. Mas nós, piratas digitais, sabemos que isso nem sempre é o fim da história:                ▒ █
 █ █▀▀°       explorando o token do Identity Toolkit é possível satisfazer a condição da regra `auth                █ █
 █▒▒          != null` e, assim, abusar de regras mal configuradas para acessar dados que não nos                   ▒▒█
 █ ▒          pertencem.                                                                                            ▒ █
 █ █                                                                                                                █ █
 █ ▒          E então, o último cenário, considero o pior para nós, hackers:                                        ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Regras que validam se o usuário está autenticado E AUTORIZADO                                         ▒ █
 █ █                                                                                                                █ █
 █ ▒          Este é o nível correto.                                                                               ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Aqui, as regras validam quem é o usuário e o que ele pode acessar.                                    ▒ █
 █ █                                                                                                                █ █
 █ ▒          {                                                                                                     ▒ █
 █▒▒            "rules": {                                                                                        ¡ ▒▒█
 █ ▒              "users": {                                                                                     ▄█,▒ █
 █ █                "$uid": {                                                                                    °▀▀█ █
 █▒▒                  ".read": "auth != null && auth.uid === $uid",                                                 ▒▒█
 █ ▒                  ".write": "auth != null && auth.uid === $uid"                                                 ▒ █
 █ █                }                                                                                               █ █
 █ ▒              }                                                                                                 ▒ █
 █▒▒            }                                                                                                   ▒▒█
 █ ▒          }                                                                                                     ▒ █
 █ █                                                                                                                █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Esse modelo garante que:                                                                              ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          > O usuário só pode acessar os dados dele — e nada mais.                                              █ █
 █ ▒                                                                                                                ▒ █
 █▒▒ ¡                _   ,_,   _                                                                                   ▒▒█
 █ ▒,█▄              / `'=) (='` \                                                                                  ▒ █
 █ █▀▀°             /.-.-.\ /.-.-.\                                                                                 █ █
 █▒▒                `      "      `                _   ,_,   _                                                      ▒▒█
 █ ▒                                              / `'=) (='` \                                                     ▒ █
 █ █                                             /.-.-.\ /.-.-.\                                                    █ █
 █ ▒                                             `      "      `                                                    ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          0x03 Realtime Database                                                                                █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Era um dia comum. Tão comum que eu até achei que nada ia acontecer, até começar a analisar            ▒▒█
 █ ▒          um site de livestreams... Por um segundo pensei: “por que não virar streamer e largar essa            ▒ █
 █ █          vida de segurança?” E foi isso que eu fiz, fui atrás do meu sonho.                                    █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Criei uma conta, realizei o login e comecei a analisar como poderia ser o melhor streamer da        ¡ ▒▒█
 █ ▒          plataforma... Aquele com os melhores números.                                                      ▄█,▒ █
 █ █                                                                                                             °▀▀█ █
 █▒▒          Foi quando anlisando o código JavaScript da aplicação, a configuração do Firebase estava lá.          ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          Tentei o básico de exploração do Realtime Database, o famigerado /.json, porém, sem                   █ █
 █ ▒          sucesso.                                                                                              ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Tentei gerar um token de maneira anônima... Nada, tentei criar uma conta... Nada!                     ▒ █
 █ █                                                                                                                █ █
 █ ▒          Porém, firebase tem uma coisa engraçada, nós não temos apenas 1 maneira de gerar um token,            ▒ █
 █▒▒          muitas vezes, as aplicações desabilitam o self signup e geram um CustomToken                          ▒▒█
 █ ▒          (https://firebase.google.com/docs/auth/admin/create-custom-tokens?hl=pt-br).                          ▒ █
 █ █                                                                                                                █ █
 █ ▒          Analisando as chamadas que a aplicação realizava, encontrei, a chamada responsável por gerar          ▒ █
 █▒▒ ¡        um Id Token através de um Custom Token:                                                               ▒▒█
 █ ▒,█▄                                                                                                             ▒ █
 █ █▀▀°       POST /v1/accounts:signInWithCustomToken?key=AIza... HTTP/2                                            █ █
 █▒▒          Host: identitytoolkit.googleapis.com                                                                  ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒          Perfeito, já temos o token, é só acessar com /.json?auth=eyJh... que vai funcionar, certo?            ▒ █
 █▒▒          Errado.                                                                                               ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          Permission Denied                                                                                     █ █
 █ ▒                                                                                                                ▒ █
 █▒▒          Bom, sabendo como funcionam as security rules, nós poderiamos ter uma estrutura assim:                ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          {                                                                                                     █ █
 █ ▒            "users": {                                                                                          ▒ █
 █▒▒              "123": {                                                                                        ¡ ▒▒█
 █ ▒                "name": "Don't hack me plx",                                                                 ▄█,▒ █
 █ █                "livestreams":{                                                                              °▀▀█ █
 █▒▒                  "123": {                                                                                      ▒▒█
 █ ▒                    "viewers": 0                                                                                ▒ █
 █ █                  }                                                                                             █ █
 █ ▒                }                                                                                               ▒ █
 █▒▒              }                                                                                                 ▒▒█
 █ ▒            },                                                                                                  ▒ █
 █ █                                                                                                                █ █
 █ ▒          }                                                                                                     ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          E uma regra similar a:                                                                                █ █
 █ ▒                                                                                                                ▒ █
 █▒▒ ¡        {                                                                                                     ▒▒█
 █ ▒,█▄         "rules": {                                                                                          ▒ █
 █ █▀▀°           ".read": false, // Impossibilitando o acesso ao  "root" do documento /.json                       █ █
 █▒▒              ".write": false,                                                                                  ▒▒█
 █ ▒              "users": {                                                                                        ▒ █
 █ █                "$uid": {                                                                                       █ █
 █ ▒                  ".read": "auth != null && auth.uid === $uid", // Permitindo a leitura de users[].uid          ▒ █
 █▒▒                  ".write": "auth != null && auth.uid === $uid" // Permitindo escrita de users[].uid.*          ▒▒█
 █ ▒                }                                                                                               ▒ █
 █ █              }                                                                                                 █ █
 █ ▒            }                                                                                                   ▒ █
 █▒▒          }                                                                                                     ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒          Ou seja, não possuimos a capacidade de LER todos os dados, PORÉM, temos a capacidade de               ▒ █
 █▒▒          escrever dados.                                                                                     ¡ ▒▒█
 █ ▒                                                                                                             ▄█,▒ █
 █ █          Mas nesse momento, eu não tinha ideia da estrutura, nem quais regras de segurança teriam,          °▀▀█ █
 █▒▒          então... Fuzzing em ./FUZZ.json até acertar /users/uid.json?                                          ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          Bom, em casos onde não tenham regras tão complexas, pode funcionar, .json é bloqueado, mas            █ █
 █ ▒          pedidos.json não.                                                                                     ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          As abordagens que utilizo são:                                                                        ▒ █
 █ █          - Vou utilizando a aplicação até ver alguma chamada para a API do fireabase;                          █ █
 █ ▒          - Analiso o código javascript em busca dessas informações.                                            ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          A segunda abordagem é a que mais utilizo.                                                             ▒ █
 █ █                                                                                                                █ █
 █ ▒          Lendo a documentação (https://firebase.google.com/docs/database/web/read-and-write?hl=pt-br)          ▒ █
 █▒▒ ¡        do realtime database, vejo que a utilização através do sdk utiliza alguns métodos para                ▒▒█
 █ ▒,█▄       definir em qual lugar deve buscar o dado.                                                             ▒ █
 █ █▀▀°                                                                                                             █ █
 █▒▒          Um exemplo de código que busca os dados da referência /posts/123/starCount                            ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');                         █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Claro que as várias aplicações vão implementar isso de maneiras diferentes, as vezes sem              ▒ █
 █ █          firebase. ou abstraídas em outras classes, mas, ainda podemos buscar por .ref( ou ref(                █ █
 █ ▒          para identificar.                                                                                     ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          E foi isso o que eu fiz, encontrei a seguinte estrutura:                                              ▒ █
 █ █                                                                                                                █ █
 █ ▒          livestream/                                                                                           ▒ █
 █▒▒              :livestreamid/                                                                                  ¡ ▒▒█
 █ ▒                  online_count                                                                               ▄█,▒ █
 █ █                                                                                                             °▀▀█ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Tendo o token e a estrutura, realizei uma chamada GET para:                                           ▒ █
 █ █          live-cad8c.firebaseio.com/livestram/020297a6-e1b4-45d0-a4ed-61bcb4a97b13/online_count.json            █ █
 █ ▒          e tinha acesso, sabendo que essa base era utilizada para contabilizar o total de pessoas              ▒ █
 █▒▒          assistindo a live, bastou realizar uma requisição PUT para a mesma url, com o valor                   ▒▒█
 █ ▒          100000000000000000 no body.                                                                           ▒ █
 █ █                                                                                                                █ █
 █ ▒          E foi assim que eu virei o streamer com mais visualizações na plataforma e pude realizar meu          ▒ █
 █▒▒          sonho de ser um streamer famoso.                                                                      ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒                  _   ,_,   _                                                                                   ▒ █
 █▒▒ ¡               / `'=) (='` \                                                                                  ▒▒█
 █ ▒,█▄             /.-.-.\ /.-.-.\                                                                                 ▒ █
 █ █▀▀°             `      "      `                _   ,_,   _                                                      █ █
 █▒▒                                              / `'=) (='` \                                                     ▒▒█
 █ ▒                                             /.-.-.\ /.-.-.\                                                    ▒ █
 █ █                                             `      "      `                                                    █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Gostou do nosso trabalho? Achou que a pwnage foi interessante demais? Quer contratar um               ▒ █
 █ █          trabalho nosso? Acesse https://elytronsecurity.com/ e conte que veio por meio deste artigo            █ █
 █ ▒          :)                                                                                                    ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          Mua ha ha ha ha ha                                                                                    ▒ █
 █ █                                                                                                                █ █
 █ ▒                     /=;\                                                                                       ▒ █
 █▒▒                  ,/'    ;                                                                                    ¡ ▒▒█
 █ ▒                 //',''.,|                                                                                   ▄█,▒ █
 █ █               /''      ||                                                                                   °▀▀█ █
 █▒▒             /'|  *   * / `.                                                                                    ▒▒█
 █ ▒            ||  '-/\,..'   )                                                                                    ▒ █
 █ █             \   \--,<     )                                                                                    █ █
 █ ▒              `\._\p/    /'                                                                                     ▒ █
 █▒▒                  `---/''                                                                                       ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █                                                                                                                █ █
 █ ▒          Apêndice A                                                                                            ▒ █
 █▒▒                                                                                                                ▒▒█
 █ ▒          metadata:                                                                                             ▒ █
 █ █              language: v2-beta                                                                                 █ █
 █ ▒              name: "Firebase api key detected"                                                                 ▒ █
 █▒▒ ¡            description: "Scans responses to detect leaked Google API keys starting with 'AIzaSy'             ▒▒█
 █ ▒,█▄       and 35 to 40 characters."                                                                             ▒ █
 █ █▀▀°           tags: "passive"                                                                                   █ █
 █▒▒              author: "@vrechson"                                                                               ▒▒█
 █ ▒                                                                                                                ▒ █
 █ █          given response then                                                                                   █ █
 █ ▒              if {latest.response} matches "[\"'`]?AIzaSy[0-9A-Za-z_-]{29,34}" then                             ▒ █
 █▒▒                  report issue:                                                                                 ▒▒█
 █ ▒                      severity: high                                                                            ▒ █
 █ █                      confidence: firm                                                                          █ █
 █ ▒                      detail: "Leaked Google API Key detected."                                                 ▒ █
 █▒▒                      remediation: "Remove or secure the API key. Avoid embedding keys in client-side           ▒▒█
 █ ▒          code."                                                                                                ▒ █
 █ █              end if                                                                                            █ █
 █ ▒                                                                                                                ▒ █
 █▒▒                                                                                                                ▒▒█
 █▒▒▒▒▒ ░░                                                                                                    ▒▒▒▒▒▒▒▒█
 █ ▒                                                                                                                ▓▄█
 █ █                                    T R A M O I A   ·   Z I N E   ·  2 0 2 6                                 gld ██
  ▀▄▄▄▄                                                                                                          ▒▒▄▄▀