
Language Sloth Sloth Bot 1.0 is vulnerable to Directory Traversal in the gif() and png() functions. The functions build file paths using unsanitized user input for the 'name' parameter, allowing attackers to reference files outside the intended resource directories.
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