Rafael Fidelis

I write about programming and random things

Exploitando E Tomando Controle Total De Uma Aplicação Node.js + MongoDB

| Comments

NodeJS + MongoDB Créditos da imagem: Microsiv

Introdução

Eta nóis! As falhas de seguranças em aplicações web brasileiras não param de aparecer, no ultimo post eu contei um pouco sobre uma falha de segurança em um uma fintech que permitia o roubo de contratos bancários dos usuários da plataforma. A minha impressão é que a maioria das startups brasileiras não tem nenhuma maturidade para proteger os dados dos seus usuários e também das empresas que utilizam os seus serviços.

O que mais me impressiona é que a maioria dessas falhas são TÃO básicas que chegam a me dar vontade de chorar, como é possível que empresas que receberam milhões em investimento sejam tão amadoras quando se fala da proteção dos dados e informações dos seus usuários?

Nesse post eu vou mostrar como tomei controle total da área administrativa de QUALQUER cliente dessa aplicação - sendo assim possível obter informações privilegiadas e sigilosas de grandes empresas brasileiras e internacionais - e também como um endpoint permitia que qualquer pessoa baixasse TODOS os usuários(cerca de 115 mil) do site em menos de 1 minuto.

Eu separei esse post em 2 partes: Na primeira parte não tem nada de técnico: eu busco explicar o quão danosa essas falhas podem ser e discuto um pouco o porque das empresas brasileiras serem tão negligentes com os nossos dados.
Em seguida discuto os detalhes técnicos para que outros desenvolvedores/CTOs/CEOs/qualquer pessoa interessada possam ter noção de como um ataque desse é simples na prática, e como isso poderia ser evitado.

OBS: As escolhas de banco de dados e linguagem de aplicações não querem dizer absolutamente nada do ponto de vista de segurança, a treta aqui não está no Node(JS) e também não está no MongoDB(NoSQL), o erro é humano e de arquitetura de software.
OBS 2: Então beleza, segura esse hate ai de JS e/ou Mongo - quem nunca??? - e simbora nessa?!



Roubando Contratos Bancários De Uma Fintech Brasileira

| Comments

Introdução

Já falei aqui nesse blog de algumas vunerabilidades de segurança encontrada em aplicações web, entre elas: Como eu usei o cartão de crédito do CEO do Trampos.co que explorava uma falha de níveis de permissões, e outra brecha no maior ecommerce de petshop do Brasil que permitia que usuários roubassem toda a base de usuários do site.

Dessa vez eu não vou revelar qual é a startup pois a criticidade da falha não me permite fazer isso, porém vou te contar como explorei mais uma brecha e consegui acesso a Contratos bancários emitidos por um banco brasileiro com VÁRIOS dados pessoais de boa parcela dos usuários dessa plataforma.

Essa falha não explora nenhum endpoint da aplicação(não passa nem pelos servidores da startup), também não explora níveis de acesso da aplicação ou XSS ou CSRF via browser, ou algo do tipo, essa brecha de segurança creio que se encaixa mais na categoria “Exposição de dados sensíveis”, que faz parte do Top 10 de principais falhas de seguranças de aplicações web segundo a OWASP.

Abaixo um preview de um dos contratos bancarios:

Contrato Bancário Emitido por um banco brasileiro

Essa falha está diretamente ligada a upload de documentos(nesse caso PDF gerado com dados do usuário), portanto se sua aplicação faz esse tipo de processamento(especificamente para o AWS S3, porém não necessariamente), te recomendo investir alguns minutos para ler esse post e em seguida dar uma verificada na sua aplicação pra ter certeza que tá tudo nos conformes ;)

Esse post será mais direto ao assunto e menor, portanto você deve ser capaz de efetuar a leitura com atenção em cerca de 10 minutos, aproveite!

Importante: “Roubando” no título sim é clickbait(xD), e somente isso! Nenhum dado foi roubado, nenhum dado aqui citado foi compartilhado com terceiros.

Ruby Não é Somente Rails, Carai!

| Comments

Tempo médio de leitura: 10 minutos

Keep calm
Créditos da imagem: Keepcalm-o-matic

Ok, minha vontade era de deixar o título desse post como “Porque o Rails não é a melhor opção para a nova versão da web”, mas pra evitar click bait acho mais justo deixar como tá mesmo. Mesmo porque, a ideia desse post não é discredibilizar o Rails, e sim chamar a atenção para outros frameworks do mundo Ruby.
Nesse post eu quero focar em algo muito sério do meu ponto de vista:

Porque raios todo mundo acha que só existe vida no mundo Ruby se for com o Rails?

Na realidade, isso é algo que me irrita bastante! Temos uma linguagem linda, robusta, humana, incrível e muito madura nesse estágio, mas tudo que se ouve falar quando se fala de Ruby é somente de Rails, Rails, Rails…

Quando se fala de Ruby essa é a imagem que todos tem, que se você programa Ruby, é porque somente desenvolve com Rails. Ok, isso pode ser verdade para muitos desenvolvedores, talvez a grande maioria, mas não para todos, é onde eu e muitos outros programadores se encontram: Existe vida além do Rails sim!

Como já dito, esse post não foca em te tentar convencer em largar o Rails, e sim em apresentar as alternativas existentes para desenvolvimento web, e também te mostrar que sim, estão utilizando Ruby para outras finalidades além de aplicações web.

Eu adoro programar em Ruby, acho a sintaxe e as características da linguagem muito interessantes, e se você é programador Ruby provavelmente sente um apreço muito grande pela linguagem, porque esse foi o objetivo do Matz ao desenvolver essa linguagem, ele queria fazer os desenvolvedores felizes enquanto escreviam seus programas, e eu tenho certeza absoluta que conseguiu, Ruby é muito prazerosa!

Especificações Funcionais Menos Dolorosas

| Comments

Tempo médio de leitura: 10 minutos

Especificações Créditos da imagem: New York Public Library

Qualquer leitor experiente sabe reconhecer o quão será incrível a leitura de um artigo somente pelo peso do nome do autor.

Como desenvolvedor, ao encontrar a recomendação de posts sobre como escrever especificações funcionais do Joel on Software, eu já esperava uma grande aula de como fazer, e foi justamente o que aconteceu!

Disclaimer: Este post é uma releitura, tradução e resumo de um artigo. Para maiores detalhes técnicos, consulte a série de posts originais.

Se você preferir ler no Medium, clique aqui para acessar o mirror desse post lá.

Chega De Gambeta: Como Validar CNPJ E CPF Corretamente

| Comments


Não sei se é só impressão minha, mas a maioria dos algoritmos e implementações de validação de CPF e CNPJ que eu vejo por ai nas interwebs são extremamente mal feitos! Alias não digo todos, porém os principais resultados no Google, com certeza!, porém um dos excelentes exemplos de implementação desses algoritmos é a gem do fnando.

Eu poderia utilizar essa gem, mas as vezes precisamos reinventar a rodar para aprendermos, reinventar a rodar com motivações didaticas. Nesse caso eu queria entender realmente como funciona o algoritmo de validação de dígitos verificadores de CNPJ e CPF, que é algo bem interessante, à propósito! Dessa forma além de adquirir mais conhecimento, eu também consigo melhorarar a qualidade dos softwares que eu desenvolvo, pois posso entender melhor como as coisas funcionam.

Pergunta: Você sabe pra que servem esses dígitos verificadores dos documentos?(cpf, cnpj, etc)?

My Top #10 Albums for Coding as a Productivity Boss

| Comments

Just want to share my favorites albums when hacking(aka best albums for turning music into code!)
(Click in album cover to open in Youtube)

#1: SBTRKT - SBTRKT (2011)

SBTRKT - SBTRKT (2011)

Of course I will start this list with one debut album, this self-titled album by SBTRKT(pronounced as “Subtract”) is a masterpiece!!!!
A wonderful reunion of great collaborators, most of the songs has Sampa contrib in vocal, when you hear the voice of this guy for the first time, you find yourself addicted to it!
Theres a track called Ready Set Loop, I always read as Read Eval Print Loop(REPL - that kind of interactive shell you have in your programming language, such as irb, node, python, php)




#2: The Glitch Mob - Drink The Sea (2010)

The Glitch Mob - Drink The Sea (2010)

Another excelent and vibrant debut album, this one is almost entirely instrumental, very deep! Very powerful, that kind of sound that makes your head explode, and your hands just start typing without you know why, sooooooooo intense!

Cordel: A Linguagem De Programação Ruby

| Comments

cordel

Estou de passagem pelo Nordeste brasileiro e instantaneamente me encantei com a literatura de cordel! Para quem nunca teve contato com esse gênero literário e não sabe do que se trata, de forma sucinta eu diria que é uma poesia popular usada para expressar acontecimentos, histórias e nossa cultura!.

A História De Uma Falha De Segurança De 16 Milhões De Reais

| Comments

Aqui estou eu novamente, pronto pra revelar para vocês mais uma falha de segurança que eu encontrei em dos produtos/sites mais utilizados do mercado brasileiro. Vamos nessa?

No post anterior (Como eu usei o cartão de crédito do CEO do Trampos.co para pagar minha assinatura premium) eu contei um pouco sobre como descobri uma brecha inocente - porem severamente crítica - nos endpoints da aplicação do trampos.co. Essa falha está relacionada diretamente ao nível de controle de acesso dos usuários e os recursos da aplicação, uma falha MUITO comum em aplicações web.

Dessa vez eu consegui explorar as brechas da aplicação unindo as falhas de Access Control Level(ACL) como descritas no post anterior, porém combinada com uma brecha de segurança conhecida como Sensitive Data Exposure. Nesse momento você já deve estar imaginando que eu consegui acesso a dados privados de usuários sem precisar invadir nada, certo? Certo!

OBS: Esse post vai ser um pouco mais longo, pois gostaria de contextualizar um pouco sobre os danos que poderiam ser causados se um atacante permanecesse explorando essa falha, e também falar um pouco sobre o impacto negativo que a marca poderia sofrer. Desenvolver produtos é muito mais que simplesmente escrever código, é necessário entender que somos também responsáveis pela imagem pública das empresas para qual trabalhamos.



Alvo: Petlove.com.br

Talvez você não conheça a Petlove.com.br (antigo PetSuperMarket), mas eles já estão no mercado de vendas online há mais de 15 anos, e atualmente dizem ser o maior pet shop online do Brasil. Desde sua fundação, a empresa já conta com investimentos da Monashees Capital (BRASILLLLLLLL), Tiger Global e Kaszek Ventures, totalizando 4.8 milhões de dólares(16 milhões de R$) em rodadas de investimentos. (fonte: crunchbase)

Ou seja, os caras são BIG PLAYERS MESMO, veja só as estatísticas do site:

Posição no Brasil: 1,136 (fonte: Alexa)
Faturamento anual(em R$): R$ 10 mi a R$ 25 mi (fonte: 99jobs)
Estastisticas de acesso: (fonte: Similar Web):

Estastisticas de acesso da Petlove.com.br

Conforme você pode verificar na imagem acima, só no mês de abril desse ano o site recebeu incríveis 1 milhão e 300 mil visitas (estimadas), e olha só o up no início desse ano. Ou seja, desde o começo do ano o site recebeu cerca de 7 MILHÕES DE VISITAS, o que pra mim significa: muitos acessos = muitos usuários = alvo em potencial.

OBS: O título desse post faz referência ao valor total investido por fundos na Petlove.com.br até o mês de maio de 2016

Como Eu Usei O Cartão De Crédito Do CEO Do Trampos.co Para Pagar Minha Assinatura Premium

| Comments

Falhas de segurança em aplicações web são muito comuns, existem validações que os desenvolvedores se esquecem de fazer, - e geralmente são validações básicas como controle de nível de acesso - e isso pode gerar grandes problemas no futuro de qualquer produto que esteja acessivel na web.

Essas falhas de segurança podem ser um problema ainda maior quando estão relacionadas a pagamentos com cartões de creditos, já que um atacante pode conseguir efetuar transações nos cartões dos usuários da aplicação, e é sobre isso que eu vou falar hoje.



Alvo: Trampos.co

O trampos.co um site de anuncio de vagas, muito conhecido e utilizado na cidade de São Paulo e Rio de Janeiro, principalmente por agências e startups. O site mantêm a posição 1,416(fonte: Alexa) no rank de sites mais acessados do pais, cerca de 200k de usuários cadastrados (fonte: inspect pelo meu id no sistema) e cerca de 400 cartões de créditos salvos no banco de dados (fonte: meu id de cartão no sistema).

O site também recebe muito trafego, o que o torna um alvo muito interessante.

http://i.imgur.com/jlbamIl.png Fonte: https://www.similarweb.com/website/trampos.co