
Language Sloth Sloth Bot 1.0 é vulnerável a Directory Traversal nas funções gif() e png(). As funções constroem caminhos de arquivo usando entrada do usuário não sanitizada para o parâmetro 'name', permitindo que atacantes referenciem arquivos fora dos diretórios de recursos pretendidos.
O bot do Discord Language Sloth é vulnerável a Directory Traversal nas funções gif() e png(). As funções constroem caminhos de arquivo usando entrada do usuário não sanitizada para o parâmetro 'name', permitindo que atacantes referenciem arquivos fora dos diretórios de recursos pretendidos.
As funções "gif" e "png" no arquivo files.py são vulneráveis a directory traversal, pois usam "open" para recuperar arquivos localmente do servidor que hospeda o bot. Os payloads abaixo permitem que qualquer usuário no Discord recupere arquivos ".gif" e ".png" hospedados em qualquer lugar do servidor que está hospedando o bot.
async def gif(self, ctx, name: str = None):
'''
(ADM) Sends a gif from the bot's gif folder.
:param name: The name of the gif file.
'''
await ctx.message.delete()
try:
with open(f'./gif/{name}.gif', 'rb') as pic:
await ctx.send(file=discord.File(pic))
except FileNotFoundError:
return await ctx.send("**File not found!**")
async def png(self, ctx, name: str = None):
'''
(ADM) Sends a png from the bot's png folder.
:param name: The name of the png file.
'''
await ctx.message.delete()
try:
await ctx.send(file=discord.File(f'./png/{name}.png'))
except FileNotFoundError:
return await ctx.send("**File not found!**")
O parâmetro name é interpolado diretamente no caminho do arquivo sem validação ou sanitização:
f'./gif/{name}.gif'
f'./png/{name}.png'
Exemplos de payloads:
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename

A imagem acima mostra a extração de uma imagem localizada em C:\Windows\cat.gif