2 pontos por GN⁺ 2024-01-27 | 1 comentários | Compartilhar no WhatsApp

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 srcset para 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⁺:

  1. 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.
  2. 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.
  3. 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

 
GN⁺ 2024-01-27
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

    • Fiz um degree apprenticeship em uma empresa FAANG e tive a sorte de ser efetivado lá. Varia muito de empresa para empresa, mas, olhando apenas para as perspectivas imediatas de emprego, acho que um programa de aprendizagem em uma empresa conhecida ajuda muito mais do que uma universidade, exceto Oxbridge
      Se quiser conversar mais, pode entrar em contato; meu e-mail está na descrição do perfil
    • Meu ReMarkable vai agradecer. Você está mandando bem, continue assim
      E, se for para TI, recomendo muito aprender também negociação de contratos e finanças
    • Quanto tempo levou para conseguir o XSS?
    • Vou tentar uma indicação para a Meta. Você pode enviar currículo/e-mail etc. para tehlike gmail com?
  • 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

    • Por que “o único método possível”? Dá para imaginar várias formas de detectar trapaça
  • 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

    • Minha ex-esposa gerenciou a equipe de segurança do MySpace mais ou menos de 2006 a 2008. A parte realmente intensa era ela entrar diretamente nos fóruns de hackers do MySpace para ver como o trabalho do dia estava andando
      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
    • Meu primeiro pensamento foi algo como “é bom ver a garotada fazendo esse tipo de coisa hoje”, mas aí calculei a idade e foi um baque psicológico
    • Espera, essa pessoa tem menos de 20 anos
  • 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

    • Não entendi bem. “Outra pessoa faz meus lances” quer dizer que ela substitui o seu lance pelo dela na partida? Ou que ela replica os lances da sua partida na partida dela? Ou é outro significado?
    • Como você sabe que eles estão fazendo os seus lances?
    • “Meus lances”, o que exatamente você quer dizer?
  • 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ável
    O 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

    • Pelo que o autor menciona de passagem no texto, ele nasceu depois de 2005, então é ainda mais impressionante considerando que é muito jovem
    • O primeiro exploit, que adicionava visitantes do perfil como amigos, era pelo menos bem simples, e o título também é um trocadilho. Mas o caminho até o XSS completo ficou muito mais complexo depois
  • 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 tentar alert\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

    • Pela minha experiência, normalmente você encontra depois de se deparar por acaso com algo estranho. A parte realmente difícil é tornar essa falha explorável de fato, e neste caso o alvo foi o editor de texto
  • A parte “essa funcionalidade me lembrou o worm do MySpace lá por 2005; eu nem tinha nascido naquela época!” imediatamente me fez sentir velho

    • Não se preocupe demais. Fica pior
      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