Pergunta

ATUALIZAR : O GWT 2.3 apresenta um melhor mecanismo para combater os ataques do XSRF. Ver http://code.google.com/webtoolkit/doc/latest/devguideSecurityrpcxsrf.html


O mecanismo RPC da GWT faz as seguintes coisas em cada solicitação HTTP -

  1. Define dois cabeçalhos de solicitação personalizados-X-GWT-Permutation e X-Gwt-Module-Base
  2. Define o tipo de conteúdo como texto/x-gwt-rpc; charset = utf-8

A solicitação HTTP é sempre uma postagem e, no lado do servidor, os métodos de Get lançam uma exceção (método não suportado).

Além disso, se esses cabeçalhos não estiverem definidos ou têm o valor errado, o servidor falha no processamento com uma exceção "Possivelmente CSRF?" ou algo para esse efeito.

A pergunta é: isso é suficiente para impedir a CSRF? Existe uma maneira de definir cabeçalhos personalizados e alterar o tipo de conteúdo em um método puro de falsificação de solicitação entre sites?

Foi útil?

Solução

Se este RPC GWT estiver sendo usado por um navegador, será 100% vulnerável ao CSRF. O tipo de conteúdo pode ser definido no HTML <form> elemento. X-GWT-Permutation e X-GWT-Module-Base não estão na lista preta de Flash de cabeçalhos proibidos. Assim, é possível realizar um ataque de CSRF usando flash. O único elemento de cabeçalho em que você pode confiar na proteção do CSRF é o "referente", mas essa nem sempre é a melhor abordagem. Use proteção de CSRF baseada em token sempre que possível.

Aqui estão algumas façanhas que escrevi que devem esclarecer o ataque obscuro que estou descrevendo. Uma exploração flash para isso será como algo como isto eaqui é uma exploração JS/HTML que altera o tipo de conteúdo.

Minha exploração foi escrita para o Flex 3.2 e as regras mudaram no Flex 4 (Flash 10) aqui estão o Últimas regras, a maioria dos cabeçalhos pode ser manipulada apenas para solicitações.

Script flash que usa navigateTo() para CSRF:https://github.com/therook/csrf-request-builder

Outras dicas

O GWT 2.3 apresenta um melhor mecanismo para combater os ataques do XSRF. Ver Proteção GWT RPC XSRF

Eu sei que fiz essa pergunta, mas depois de uma pesquisa de dias (graças a ponteiros de Rook!), Acho que tenho a resposta.

O que o GWT fornece pronta para uso não o protegerá do CSRF. Você tem que tomar medidas documentadas em Segurança para aplicativos GWT ficar seguro.

O GWT RPC define o cabeçalho "Content-Type" para "Text/x-gwt-rpc; charset = utf-8". Embora eu não tenha encontrado uma maneira de definir isso usando formulários HTML, é trivial fazê -lo no flash.

Os cabeçalhos personalizados-X-GWT-Permutation e X-GWT-Module-Base, são um pouco mais complicados. Eles não podem ser definidos usando HTML. Além disso, eles não podes ser definido usando flash, a menos que seu servidor permita especificamente no crossDomain.xml. Ver Flash Player 10 Segurança.

Além disso, quando um arquivo SWF deseja enviar cabeçalhos HTTP personalizados para qualquer outro lugar que não seja seu próprio host de origem, deve haver um arquivo de política no servidor HTTP para o qual a solicitação está sendo enviada. Este arquivo de política deve enumerar o host de origem do arquivo SWF (ou um conjunto maior de hosts) como autorizado a enviar cabeçalhos de solicitação personalizados para esse host.

Agora, o RPC da GWT vem em dois sabores. Existe o antigo formato de serialização personalizada RPC e o novo de-RPC baseado em JSON. AFAICT, o código do cliente sempre define esses cabeçalhos de solicitação. O RPC de estilo antigo agora não aplica esses cabeçalhos no lado do servidor e, portanto, é possível um ataque de CSRF. O novo estilo de-RPC aplica esses cabeçalhos e, portanto, pode ou não ser possível atacá-los.

No geral, eu diria que se você se preocupar com a segurança, envie fortes tokens CSRF em seu pedido e não Confie no GWT para evitá -lo para você.

Não tenho certeza, se houver uma maneira fácil (eu estaria extremamente interessado em descobrir isso também!), Mas pelo menos parece haver algumas maneiras avançadas de alcançar solicitações arbitrárias de sites cruzados com cabeçalhos arbitrários: http://www.springerlink.com/content/h65wj72526715701/ Não comprei o jornal, mas o abstrato e a introdução parecem muito interessantes.

Talvez alguém aqui já leia a versão completa do artigo e possa expandir um pouco?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top