Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deserialization + (Metaprogramming || DuckTypin...

Deserialization + (Metaprogramming || DuckTyping) // Vulnerabilidades no mundo Ruby

Carlos Eduardo L. Lopes

June 07, 2014
Tweet

More Decks by Carlos Eduardo L. Lopes

Other Decks in Programming

Transcript

  1. Sumário û  O que aconteceu? û  Como os parser YAML

    e JSON funcionam û  Porque as vulnerabilidades são tão ruins û  Como elas causam dano û  Como podemos evitar os danos û  O que mais podemos fazer? û  Ferramentas que podemos usar
  2. O que aconteceu? û  A ML do grupo de segurança

    do RoR foi atualizada û  Vulnerabilidades de parameters parsing û  CVE-2013-0156 û  CVE-2013-0269 û  E outras variações (mas com o mesmo princípio) û  Ok, mas eu estou seguro se não estiver usando Rails?
  3. û  Você pode instanciar qualquer classe no processo û  Você

    pode disparar o método #[]= û  Você pode brincar com metaprogramação û  E... Porque isto é tão ruim?
  4. “More than 240,000 websites that use Ruby on Rails Web

    applications are at risk of being exploited by attackers. Including Basecamp, Github, Hulu, Pitchfork, Scribd and Twitter.” Porque isto é tão ruim? Fonte: http://www.informationweek.com/security/vulnerabilities/critical-ruby-on-rails-issue-threatens-2/240145891
  5. “It will work 100% of the time.” Porque isto é

    tão ruim? Fonte: http://arstechnica.com/security/2013/01/extremely-crtical-ruby-on-rails-bug-threatens-more-than-200000-sites/
  6. Como nós podemos evitar isso? û  Não confie e nem

    leia dados YAML 'desconhecidos', ou... û  Quando não estiver usando Rails û  Use a gem safe_yaml û  Quando estiver usando RoR û  Use a versão >= 3.2.11, ou... û  Desabilite o XML parser (porque não fez isso antes?), ou... û  Desabilite o YAML parser û  Rails 4 não virá com o XML parser out of the box!
  7. Porque isto é tão ruim? û  Você pode criar objetos

    falsos (como mocks) û  Você pode simular comportamentos û  Você pode brincar com DuckTyping
  8. Porque isto é tão ruim? û  Você pode criar objetos

    falsos (como mocks) û  Você pode simular comportamentos û  Você pode brincar com DuckTyping
  9. Como podemos evitar isso? û  Parseie dados JSON com a

    opção :create_additions => false û  A gem json versão >= 1.7.7 está fazendo isso por default û  A gem multi_json gem sempre fez isso û  E eu não sei sobre as outras engines :(
  10. O que mais podemos fazer? û  Nunca confiar em dados

    passados pelo usuário û  Não rodar nossas aplicações com usuários privilegiados û  Estar sempre ligado no que acontece û  Sempre usar as últimas versões estáveis (leia seguras)
  11. Ferramentas que podemos usar û  Brakeman – Rails Security Scanner

    û  Code Climate Security Monitor (baseado no Brakeman) û  Gemcanary (atualmente em beta) û  bundler-audit, holepicker e outras gems