{"id":14,"date":"2009-03-03T18:14:29","date_gmt":"2009-03-03T20:14:29","guid":{"rendered":"http:\/\/blog.batori.com.br\/2009\/03\/03\/gmail-esta-vulneravel-a-ataque-de-xsrf\/"},"modified":"2011-09-22T12:13:11","modified_gmt":"2011-09-22T15:13:11","slug":"gmail-esta-vulneravel-a-ataque-de-xsrf","status":"publish","type":"post","link":"http:\/\/www.batori.com.br\/blog\/gmail-esta-vulneravel-a-ataque-de-xsrf\/","title":{"rendered":"Gmail est\u00e1 vulner\u00e1vel a ataque de XSRF"},"content":{"rendered":"<p>O Gmail possui uma vulnerabilidade que permite explorar ataque de XSRF na sua p\u00e1gina de troca de senha. <\/p>\n<p><strong>O que \u00e9 XSRF?<\/strong><\/p>\n<p>XSRF \u00e9 a sigla para Cross Site Request Forgery. Esta t\u00e9cnica pode ser usada de v\u00e1rias formas e a v\u00edtima tem que estar autenticada na aplica\u00e7\u00e3o vulner\u00e1vel. <\/p>\n<p>Quando um usu\u00e1rio se autentica em uma aplica\u00e7\u00e3o web existe uma rela\u00e7\u00e3o de confian\u00e7a entre o usu\u00e1rio e a aplica\u00e7\u00e3o durante o per\u00edodo de tempo em que a sess\u00e3o autenticada permanece ativa. Neste per\u00edodo a aplica\u00e7\u00e3o n\u00e3o solicita uma nova autentica\u00e7\u00e3o (usu\u00e1rio e senha) a cada fun\u00e7\u00e3o que o usu\u00e1rio acessa da aplica\u00e7\u00e3o. Existe aplica\u00e7\u00f5es que solicitam novamente a senha em algumas fun\u00e7\u00f5es cr\u00edticas, como \u00e9 o caso de pagamentos de contas em aplica\u00e7\u00f5es de home banking. Mas a maioria das aplica\u00e7\u00f5es web autenticam o usu\u00e1rio apenas uma vez e confiam nesta autentica\u00e7\u00e3o at\u00e9 o fechamento do navegador ou a sess\u00e3o cair por tempo de inatividade.<\/p>\n<p>Para fazer um ataque de XSRF, o atacante tem que conhecer a aplica\u00e7\u00e3o alvo e identificar a url ou o formul\u00e1rio que realiza a fun\u00e7\u00e3o cr\u00edtica, como por exemplo, aprova\u00e7\u00e3o de processo, enviar mensagem, confirmar uma pendencia importante, etc. O atacante estuda a fun\u00e7\u00e3o cr\u00edtica, identifica o ender\u00e7o das p\u00e1ginas e os par\u00e2metros que s\u00e3o enviados. De posse destas informa\u00e7\u00f5es, o atacante monta um link ou um c\u00f3digo HTML que ir\u00e1 executar a fun\u00e7\u00e3o cr\u00edtica estudada. Por exemplo, pode existir uma aplica\u00e7\u00e3o financeira que quando um usu\u00e1rio leg\u00edtimo aprova um pagamento atrav\u00e9s de um bot\u00e3o, o bot\u00e3o na verdade ativa o endere\u00e7o http:\/\/aplicacao\/aprova_pagamento?id_conta=10. <\/p>\n<p>Conhecendo o endere\u00e7o, os par\u00e2metros e a forma com uma fun\u00e7\u00e3o cr\u00edtica \u00e9 chamada, o atacante tem que fazer a v\u00edtima clicar no link enquanto ela est\u00e1 autenticada na aplica\u00e7\u00e3o. Existem v\u00e1rias formas de se conseguir isso:<\/p>\n<p>* Gravar um script ou html numa aplica\u00e7\u00e3o vulner\u00e1vel a Cross Site Scripting. Quando o usu\u00e1rio autenticado acessar o script ou html gravado ir\u00e1 processar e executar a fun\u00e7\u00e3o da aplica\u00e7\u00e3o sem saber;<br \/>\n* Se aplica\u00e7\u00e3o permitir a edi\u00e7\u00e3o de figuras, o atacante poder\u00e1 incluir uma figura que execute uma url;<br \/>\n* Colocar um link em outra aplica\u00e7\u00e3o e solicitar para um usu\u00e1rio autenticado clicar no link ou acessar uma p\u00e1gina que tenha o script ou o link montado especialmente para o XSRF.<\/p>\n<p>Quando o usu\u00e1rio estiver autenticado na aplica\u00e7\u00e3o e clicar em um link ou acessar um p\u00e1gina que tenha o script ou html com ataque de XSRF ir\u00e1 executar a fun\u00e7\u00e3o at\u00e9 mesmo sem saber. No nosso exemplo a v\u00edtima poder\u00e1 aprovar um pagamento sem inten\u00e7\u00e3o atrav\u00e9s da chamada a url http:\/\/aplicacao\/aprova_pagamento?id_conta=10.<\/p>\n<p><strong>Qual o perigo?<\/strong><\/p>\n<p>Existe um risco muito grande principalmente em aplica\u00e7\u00f5es que usam o conceito web 2.0. Essas aplica\u00e7\u00f5es possuem conte\u00fado montado por usu\u00e1rios, compartilhamento de informa\u00e7\u00f5es e grande interatividade com usu\u00e1rios. Aplica\u00e7\u00f5es corporativas com fun\u00e7\u00f5es cr\u00edticas tamb\u00e9m s\u00e3o alvos deste tipo de ataque. <\/p>\n<p><strong>Como se proteger?<\/strong><\/p>\n<p>Se proteger deste tipo de ataque n\u00e3o \u00e9 tarefa f\u00e1cil. <\/p>\n<p>A aplica\u00e7\u00e3o pode usar controles de token tempor\u00e1rios que ajudam a evitar este tipo de ataque. O token tempor\u00e1rio seria gerado em uma p\u00e1gina anterior e seria validado na p\u00e1gina cr\u00edtica.  O token dificulta, mas n\u00e3o evita 100%. O atacante teria que automatizar o ataque desde o momento da gera\u00e7\u00e3o do token, o que dificulta bastante, mas n\u00e3o \u00e9 garatia total. <\/p>\n<p>Outro controle a ser aplicado \u00e9 o uso de captcha em fun\u00e7\u00f5es cr\u00edticas. Captcha s\u00e3o aquelas figuras que temos que ler e digitar para confirmar alguma p\u00e1gina. O captcha al\u00e9m de dificultar o usa da p\u00e1gina por rob\u00f4s e programas, dificultaria o ataque de XSRF. Mais uma vez apenas dificulta, pois o atacante pode usar recursos de OCR para ler o captcha.<\/p>\n<p>A redigita\u00e7\u00e3o da senha tamb\u00e9m pode ser usado para evitar o XSRF. Al\u00e9m de proteger a aplica\u00e7\u00e3o por descuito do usu\u00e1rio que deixa a sess\u00e3o aberta e se ausenta da frente do computador, a redigita\u00e7\u00e3o da senha evita o XSRF pois n\u00e3o \u00e9 poss\u00edvel automatizar o ataque sem conhecer a senha do usu\u00e1rio. O ponto negativo \u00e9 que se existir a redigita\u00e7\u00e3o da senha em muitas fun\u00e7\u00f5es de uma aplica\u00e7\u00e3o, isto pode torn\u00e1-lo pouco funcional e produtiva para o usu\u00e1rio final.<\/p>\n<p><strong>O Caso do Gmail<\/strong><\/p>\n<p>No caso do Gmail, qualquer usu\u00e1rio que esteja autenticado e executar a url abaixo ir\u00e1 trocar a senha sem passar por captcha ou controle de token.<\/p>\n<p>https:\/\/www.google.com\/accounts\/UpdatePasswd?service=mail&#038;hl=en&#038;group1=OldPasswd&#038;OldPasswd=senha_antiga&#038;Passwd=123&#038;PasswdAgain=123&#038;p=&#038;save=Save<\/p>\n<p>O atacante poderia montar uma p\u00e1gina autenticacao_falsa.html que solicite a senha antiga e troque a senha do Gmail da v\u00edtima. Como o Gmail n\u00e3o implemente nenhum token ou outro tipo de controle entre p\u00e1ginas, se ele estiver autenticado e abrir p\u00e1gina_falsa, a senha poder\u00e1 ser trocada indevidamente.<\/p>\n<p>Refer\u00eancia: http:\/\/seclists.org\/fulldisclosure\/2009\/Mar\/0029.html<\/p>\n<p><a href=http:\/\/blog.batori.com.br\/ricardo-kiyoshi-batori\/>Ricardo Kiyoshi Batori<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Gmail possui uma vulnerabilidade que permite explorar ataque de XSRF na sua p\u00e1gina de troca de senha. O que \u00e9 XSRF? XSRF \u00e9 a sigla para Cross Site Request Forgery. Esta t\u00e9cnica pode ser usada de v\u00e1rias formas e &hellip; <a href=\"http:\/\/www.batori.com.br\/blog\/gmail-esta-vulneravel-a-ataque-de-xsrf\/\">Continue lendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":125,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"_links":{"self":[{"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/posts\/14"}],"collection":[{"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/users\/125"}],"replies":[{"embeddable":true,"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":2,"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions"}],"predecessor-version":[{"id":43,"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/posts\/14\/revisions\/43"}],"wp:attachment":[{"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/media?parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/categories?post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.batori.com.br\/blog\/wp-json\/wp\/v2\/tags?post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}