Rafael Fidelis

I write about programming and random things

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

Variáveis Com CSS No Webkit

| Comments

Essa novidade não vai parecer tão tentadora para quem já está acostumado a utilizar CSS Preprocessors como o LESS ou SASS entre outros. O Webkit que é uma das mais poderosas e melhores ’layout engines’, e que está presente em vários navegadores em diversos dispostivos , como por exemplo o Chrome e Safari, e nos navegadores do iOS e Android, está implementando suporte nativo para variáveis no CSS, e provavelmente os demais ‘layouts engine’ como o Gecko(Firefox) e Presto(Opera) também deve implementar algo do tipo rapidamente.

Sintaxe

A sintaxe ainda não é tão bonita e prática como a do LESS ou SASS, porém é bem semântica , e mantêm o padrão da sintaxe do CSS. Abaixo um exemplo de declaração de 2 variáveis , color e border-color :

1
2
3
4
5
/* Todas as variáveis definidas em :root são globais */
:root {
  var-color: #333;
  var-border-color: #fafafa;
}

Agora para obter os valor dessas variáveis, utiliza-se o método var() passando o nome da variável, ou então inserindo o prefixo $(cifrão), como se fosse uma chamada a uma variável no PHP ou uma variável global em Ruby, por exemplo:

1
2
3
4
5
.box {
  background-color: whiteSmoke;
  color: var(color);
  border: 1px solid $border-color; 
}

A recomendação da w3c para utilização de variáveis, é inserindo o prefixo $ antes do nome da variável, a notação var(variavel) é recomendada somente para casos em que existem variáveis não definadas , e então possam receber valores padrões, a sintaxe nesse caso seria:

1
2
3
4
.box {
  /* se a variável backColor não tiver sido instanciada, ou for invalida, recebe o valor #ddd */
  background-color: var(backColor, '#ddd');
}

Webkit

O Webkit utiliza um vendor prefix para a declaração e acesso as variáveis, como é demonstrado abaixo:

1
2
3
4
5
6
:root {
  -webkit-var-color: #333;
}
.box {
  color: -webkit-var(color);
}

Apesar do LESS e/ou SASS atenderem a todas(todas!) as minhas necessidades quando o assunto são folhas de estilos, creio que essa nova implementação será muito bem vinda!
Você pode conferir mais exemplos de utilização das CSS Variables no Test Suite do Webkit.
Para mais informações, você também pode visitar a especificação da W3C , nessa página você tem acesso a informação sobre escopo de variaveis, entre outros.

Fontes:
http://www.phpied.com/css-variables/
http://www.red-team-design.com/css-variables