Descoberta de XSS no Chess.com
- Enquanto curtia xadrez como hobby e brincava com tecnologia, encontrei uma vulnerabilidade de XSS no Chess.com.
- O Chess.com é o maior site de xadrez da internet, com mais de 100 milhões de membros.
Visão geral
- No começo de 2023, comecei a passar bastante tempo no Chess.com.
- Convidei um amigo para se cadastrar no site e viramos amigos imediatamente usando o recurso de amizade.
- Fiquei curioso se seria possível automatizar a adição de amigos de forma parecida com o worm do MySpace.
- Criei uma nova conta e, ao verificar a aba de rede nas ferramentas de desenvolvedor, encontrei a URL de adição automática de amigos.
Meio-jogo
- Tentei explorar XSS usando o editor de texto rico TinyMCE.
- Usei o proxy do Burp para inserir código HTML diretamente na descrição de "About".
- Verifiquei a configuração do TinyMCE e criei um payload de XSS usando a propriedade de estilo
background-image. - Testei vários símbolos e descobri como executar o XSS.
- No fim, desenvolvi uma forma de extrair cookies e objetos JavaScript.
Final
- Trabalhei para executar o XSS por completo.
- Descobri um novo método usando o atributo
srcsetpara permitir uma sintaxe JS mais ampla. - Usei codificação Base64 para executar diretamente o payload de XSS.
- O impacto era grande porque o editor TinyMCE era usado em todo o site.
Análise
- A causa raiz da vulnerabilidade é o recurso de reenvio de imagens.
- Era possível contornar a verificação de hospedagem de imagens incluindo o nome de domínio do Chess.com.
- O editor de texto rico permitia vários elementos HTML, o que o tornava favorável para alcançar XSS.
- O TinyMCE estava atualizado, mas faltava sanitização do HTML final.
- O Chess.com deveria aplicar sanitização ao HTML final exibido aos usuários.
Opinião do GN⁺:
- Este post de blog explica de forma interessante o processo de descobrir e relatar uma vulnerabilidade de segurança que pode surgir em uma grande plataforma online como o Chess.com.
- Vulnerabilidades de XSS podem representar uma ameaça grave à segurança de um site, e encontrar e corrigir essas falhas é muito importante para proteger a privacidade dos usuários.
- O texto destaca, para desenvolvedores de software e profissionais de segurança, a importância de reconhecer vulnerabilidades em componentes de aplicações web, como editores de texto rico, e de preveni-las.
1 comentários
Comentários do Hacker News
Sou o OP. Muito obrigado pelos comentários positivos. Para dar um pouco de contexto, sou um estudante de 17 anos no Reino Unido me preparando para os A-Levels, e ainda estou considerando para qual universidade ir e opções de degree apprenticeship
Meu perfil no GitHub pode ser visto aqui -> https://github.com/Jayy001
Sou um dos membros centrais da HashPals, criei o Search-That-Hash e também sou mantenedor de um repositório open source de software gratuito para tablets ReMarkable
Se quiser conversar mais, pode entrar em contato; meu e-mail está na descrição do perfil
E, se for para TI, recomendo muito aprender também negociação de contratos e finanças
Na época em que minha experiência na internet se resumia a perder sempre no Chess.com como “bibliotecário voluntário”, eu costumava injetar caracteres escapados de forma estranha, tags de fechamento, strings de controle comuns e até objetos OLE em partidas ao vivo do Chess.com
O fundador, Eric, pediu educadamente uma auditoria mais formal, mas recusei porque não queria revelar que eu era um script kiddie de 11 anos. Em vez disso, expliquei as expressões regulares necessárias para censurar salas de chat e tratamos juntos de um problema maior: como detectar trapaça em um ambiente assíncrono
Depois de pensar bastante, eu disse que o único método possível seria comparar todos os lances de alto valor importantes para a partida com os melhores lances conhecidos por engines e usar inferência estatística para distinguir humanos habilidosos de trapaceiros
Claro que, na época, essa abordagem era absurdamente inviável, e essa foi a conclusão. Ainda assim, ficou como uma lembrança bem legal da internet: uma criança recém-saída do ensino fundamental discutindo um tema tão sutil com um webmaster de verdade
A parte “essa funcionalidade me lembrou o worm do MySpace lá por 2005; eu nem tinha nascido naquela época!” me fez sentir, todos os dias, que estou envelhecendo
A insistência em permitir que usuários colocassem HTML no site era um problema enorme. Hoje em dia, você analisaria corretamente a entrada HTML e removeria atributos e tags proibidos, mas na época isso era tratado com insanidade de regex
Não sei se tem relação, mas já vi pessoalmente, e até gravei, outra pessoa fazendo meus lances por mim em uma partida do Chess.com. Também houve vezes em que uma partida em andamento aparecia para mim e eu conseguia fazer um lance em uma situação em que, originalmente, eu não deveria poder
Pesquisando no Google, há bastantes threads relacionadas. Não sei se o Chess.com corrigiu isso nos últimos meses, mas, quando tentei reportar, eles não quiseram ouvir
Todas essas partidas aconteceram enquanto eu não estava logado no site. Nunca passei por isso enquanto estava logado, mas xadrez não faz bem para minha pressão, então não jogo com frequência
Pelo título, achei que seria algo muito mais básico, mas na prática ele criou um exploit que atravessava várias etapas de validação de entrada com contornos inteligentes. Até configurou um subdomínio para parecer o domínio principal
Eu não esperava que isso funcionasse, e isso por si só foi interessante. Considerando o quanto é complexo analisar domínios com regex, parece algo fácil de deixar passar. Ou talvez fosse simplesmente uma checagem de
'...'dentro de uma variávelO autor conhece bem a área. É impressionante pensar em quanto tempo ele deve ter se aprofundado para chegar a esse nível de habilidade. Parece que terá uma carreira bem interessante
Bom texto, OP. Espero que sua jornada no hacking continue bem. Caso ainda não saiba, quando parênteses são filtrados ou codificados em payloads como
alert(1), você pode usar crases e tentaralert\1``Se quiser elevar seu JavaScript injection a outro nível, a cheat sheet de XSS do Brute Logic e o Javascript for Hackers do Gareth Heyes são bons recursos. Algumas pessoas subestimam cross-site scripting, mas ele ainda é muito poderoso e difundido. Especialmente quando, como plugin-baby apontou, os cookies de sessão não têm HttpOnly
Muito legal. Gosto de ler análises de bug bounty, especialmente textos sobre XSS. Eles sempre parecem fáceis de encontrar, mas isso é só viés de confirmação; na prática, eu provavelmente não vejo todo o tempo gasto em testes sem resultado e caminhos paralelos
A parte “essa funcionalidade me lembrou o worm do MySpace lá por 2005; eu nem tinha nascido naquela época!” imediatamente me fez sentir velho
O que eu queria perguntar ao OP sobre esse caso é como ele ficou sabendo disso. Foi pelo Darknet Diaries ou por outro caminho?
Achei engraçada a parte em que ele chama o editor de rich text de “Santo Graal”. O Chess.com é um site grande, mas sempre que vejo um editor desses ou recursos exageradamente vistosos em fóruns antigos, fico pensando se o site não está cheio de brechas. De qualquer forma, excelente texto
A parte “durante o relatório e a revisão do bug bounty, quando tentei reproduzir de novo, os desenvolvedores tentaram implementar um bloqueio e apareceu a seguinte mensagem de erro…” parece bem distante do propósito de um programa de bug bounty