Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[JS EXPERIENCE 2018] Segurança para Desenvolvedores JavaScript - Alan Cezar Araújo da Silva, OLX Brasil

85 views

Published on

Segurança para Desenvolvedores JavaScript - Alan Cezar Araújo da Silva, OLX Brasil

[JS EXPERIENCE 2018] - 5 de julho de 2018
São Paulo/SP

Published in: Technology
  • Be the first to comment

  • Be the first to like this

[JS EXPERIENCE 2018] Segurança para Desenvolvedores JavaScript - Alan Cezar Araújo da Silva, OLX Brasil

  1. 1. Segurança Para Desenvolvedores Web Alan Cezar
  2. 2. VETORES DE ATAQUE muitas vezes são necessários diversas vulnerabilidades para causar danos graves ou permanentes
  3. 3. mas a facilidade de alguns é assustador
  4. 4. clickjacking
  5. 5. CLICKJACKING exemplo O atacante coloca sua url de login dentro do iframe em uma url similar usuário senha login clickjacking
  6. 6. CLICKJACKING exemplo Os campos de input do login são sobrepostos por campos falsos para a captura dos dados usuário senha login login clickjacking
  7. 7. CLICKJACKING exemplo O usuário digita seus dados sensíveis como usuário e senha usuário senha login gandalf.the.white •••••••••••••• login clickjacking
  8. 8. CLICKJACKING exemplo E sem perceber é redirecionado para o site real após um erro simulado usuário senha login clickjacking
  9. 9. X-Frame-Options: DENY Content-Security-Policy: frame-ancestors 'none' Ninguém pode utilizar a sua página em um iframe clickjacking
  10. 10. X-Frame-Options: SAMEORIGIN Content-Security-Policy: frame-ancestors 'self' Somente páginas do mesmo domínio podem utilizar a sua página em um iframe clickjacking
  11. 11. X-Frame-Options: ALLOW-FROM https://example.com Content-Security-Policy: frame-ancestors 'https://example.com' Somente este domínio pode utilizar a sua página em um iframe clickjacking
  12. 12. regex
  13. 13. const regex = /^(A+)*B/; regex
  14. 14. const regex = /^(A+)*B/; o matching deve iniciar no começo da string regex
  15. 15. const regex = /^(A+)*B/; grupo de captura com o primeiro padrão de caracteres ocorrendo uma ou mais vezes regex
  16. 16. const regex = /^(A+)*B/; espera que seja encontrado um caractere B regex
  17. 17. /^(A+)*B/.test('AAAC') regex
  18. 18. /^(A+)*B/.test('AAAC') no início da string a expressão A+ com ^ espera encontrar um caractere A ^A regex
  19. 19. /^(A+)*B/.test('AAAC') a expressão A+ se repete encontrando o próximo caractere A ^A A+ regex
  20. 20. /^(A+)*B/.test('AAAC') a expressão A+ se repete encontrando o próximo caractere A ^A A+ A+ regex
  21. 21. /^(A+)*B/.test('AAAC') ^A A+ A+ a expressão A+ vai falhar ao tentar dar match no caractere C A+ regex
  22. 22. /^(A+)*B/.test('AAAC') ^A A+ A+ a expressão * tenta repetir o A+ mas não há mais matches *A+ regex
  23. 23. /^(A+)*B/.test('AAAC') ^A A+ A+ A+ a expressão B falha ao tentar dar match no caractere C B* regex
  24. 24. /^(A+)*B/.test('AAAC') ^A A+ A+ A+ nesse momento a engine volta para o grupo anterior B* regex
  25. 25. /^(A+)*B/.test('AAAC') ^A A+ A+ A+ mas exclui o último caractere antes de refazer todos os passos B* regex
  26. 26. com quantos caracteres se afunda uma canoa?
  27. 27. regex 1 7 2 14 3 28 4 56 5 112 10 3.584 100 4.436.777.100.798.802.905.238.461.218.816
  28. 28. cuidado com o uso de quantificadores ou evite usar regex regex
  29. 29. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  30. 30. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  31. 31. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  32. 32. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  33. 33. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  34. 34. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  35. 35. const vm = require('vm'); const sandbox = { result: null, value: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC' }; const context = vm.createContext(sandbox); const script = new vm.Script(`result = /^(A+)*B/.test(value);`); try{ script.runInContext(context, { timeout: '1000' }); } catch(e){ console.log('ReDos occurred'); } console.log(sandbox);
  36. 36. O importante é o que importa, sacou? existem pessoas estudando essas vulnerabilidades e procurando janelas no seu site
  37. 37. se você não se cuidar, alguém vai entrar pela sua janela
  38. 38. FERRAMENTASferramentas
  39. 39. HELMET https://helmetjs.github.io/
  40. 40. audit https://docs.npmjs.com/getting-started/running-a-security-audit
  41. 41. https://www.owasp.org
  42. 42. dúvidas?

×