
Language Sloth Sloth Bot 1.0 est vulnérable à une traversée de répertoire dans les fonctions `gif()` et `png()`. Les fonctions construisent les chemins de fichiers à partir d'une entrée utilisateur non assainie pour le paramètre 'name', permettant aux attaquants de référencer des fichiers en dehors des répertoires de ressources prévus.
Le bot Discord Language Sloth est vulnérable à une traversée de répertoire dans les fonctions gif() et png(). Les fonctions construisent des chemins de fichiers à partir d'une entrée utilisateur non assainie pour le paramètre 'name', permettant aux attaquants de référencer des fichiers en dehors des répertoires de ressources prévus.
Les fonctions « gif » et « png » du fichier files.py sont vulnérables à une traversée de répertoire car elles utilisent « open » pour récupérer localement des fichiers depuis le serveur hébergeant le bot. Les payloads ci-dessous permettent à n'importe quel utilisateur de Discord de récupérer des fichiers « .gif » et « .png » hébergés n'importe où sur le serveur qui héberge le 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!**")
Le paramètre name est directement interpolé dans le chemin de fichier sans validation ni assainissement :
f'./gif/{name}.gif'
f'./png/{name}.png'
Exemples de payloads :
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename
L'image ci-dessus montre l'extraction d'une image située à C:\Windows\cat.gif