danielangelo1 / semaninha-lastfm

Site que gera uma colagem com os albuns mais ouvidos em determinado periodo de tempo no LAST FM
https://semaninha.net
4 stars 0 forks source link

Vulnerabilidades encontradas #1

Closed pedrokpp closed 10 months ago

pedrokpp commented 12 months ago

salve, tranquilo?

mano, acho que você nem espera isso mas eu uso esse site com alguns amigos e por isso eu resolvi dar uma olhada, mas resumindo: nada grave porém é interessante vc resolver por boas práticas mesmo

cara, tua key da api tá completamente exposta, isso nunca se faz. se alguem mal intencionado quiser abusar dessa key é muito fácil e ainda por cima se tiver algum método de pagamento para uso da key vc vai acabar pagando.

outra vulnerabilidade é uma conhecida como HTTP Parameter Pollution que acontece ao vc definir a url a ser requisitada:

  let url = `https://ws.audioscrobbler.com/2.0/?method=${apiMethod}&user=${userInput}&period=${timeRange}&api_key=${API_KEY}&format=json`;

nessa url primeiro que vaza a tua key, segundo que ali onde tá userInput eu consigo colocar qualquer outro parametro na requisição, o que pode acarretar em várias outras funcionalidades e principalmente acesso a suas próprias informações devido a métodos disponíveis da api do próprio lastfm

um exemplo de userInput que funciona normalmente é, por exemplo: kp&method=user.getTopArtists

image

pra vc resolver essas coisas é bem simples. vc deve tratar o input do usuário e idealmente fazer a página ser carregada no servidor (SSR - server-side rendering) para que a requisição seja feita server-side evitando a exposição da key

se tiver dificuldade posso fazer alguns PRs depois ou vc pode responder aqui msm

danielangelo1 commented 11 months ago

Salve pedro tudo bom??

po fico feliz demais que vc e seus amigos estão usando o site :) e realmente eu nao esperava alguem abrir uma issue aqui kkkkkkk.

O problema da exposição da API Key eu já estava ciente, agora o segundo eu não conhecia, muito obrigado por me informar sobre, inclusive com link explicando. Eu tentei esconder a api key utilizando dotenv do node mas por algum motivo não está dando certo.

E sobre o SSR eu teria obrigatoriamente que utilizar o Next??

pedrokpp commented 11 months ago

não funcionou com o dotenv pq esse site é estático e a vercel só hoestea estaticamente os arquivos e pro dotenv funcionar precisa ter o .env lá na host

o SSR é muito provavelmente configurável quando vc faz o deploy na vercel, não tenho certeza mas consigo fuçar depois se vc n conseguir

pedrokpp commented 11 months ago

e não coloca o .env na host que é exposto tbm kkkkk ou coloca pra vercel n expor o arquivo

pedrokpp commented 11 months ago

acabei de achar, realmente se vc quiser implementar SSR só com frameworks

pedrokpp commented 11 months ago

nesse caso, tem como vc definir variáveis de ambiente

pedrokpp commented 11 months ago

e usar process.env.API_KEY por exemplo