
Language Sloth Sloth Bot 1.0 es vulnerable a Directory Traversal en las funciones gif() y png(). Las funciones construyen rutas de archivo utilizando entrada de usuario sin sanitizar para el parámetro 'name', lo que permite a los atacantes referenciar archivos fuera de los directorios de recursos previstos.
El bot de Discord Language Sloth es vulnerable a Directory Traversal en las funciones gif() y png(). Las funciones construyen rutas de archivo utilizando entrada de usuario sin saneamiento para el parámetro 'name', lo que permite a los atacantes hacer referencia a archivos fuera de los directorios de recursos previstos.
Las funciones "gif" y "png" del archivo files.py son vulnerables a directory traversal, ya que usan "open" para recuperar archivos localmente desde el servidor que aloja al bot. Los payloads siguientes permiten a cualquier usuario de Discord recuperar archivos ".gif" y ".png" alojados en cualquier parte del servidor que aloja al 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!**")
El parámetro name se interpola directamente en la ruta de archivo sin validación ni saneamiento:
f'./gif/{name}.gif'
f'./png/{name}.png'
Ejemplos de payloads:
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename
La imagen anterior muestra la extracción de una imagen ubicada en C:\Windows\cat.gif