
Language Sloth Sloth Bot 1.0 уязвим к обходу пути в функциях gif() и png(). Функции создают пути к файлам, используя несанитизированный пользовательский ввод для параметра 'name', что позволяет атакующим ссылаться на файлы за пределами предполагаемых каталогов ресурсов.
Discord-бот Language Sloth уязвим к обходу каталогов (Directory Traversal) в функциях gif() и png(). Функции формируют пути к файлам, используя непроверенные пользовательские данные для параметра 'name', что позволяет злоумышленникам ссылаться на файлы за пределами предназначенных каталогов ресурсов.
Функции "gif" и "png" в файле files.py уязвимы к обходу каталогов, так как используют "open" для локального получения файлов с сервера, на котором работает бот. Приведённые ниже пэйлоады позволяют любому пользователю Discord получить файлы ".gif" и ".png", размещённые в любом месте на сервере, где работает бот.
async def gif(self, ctx, name: str = None):
'''
(ADM) Отправляет gif из папки бота с гифками.
:param name: Имя gif-файла.
'''
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("**Файл не найден!**")
async def png(self, ctx, name: str = None):
'''
(ADM) Отправляет png из папки бота с png.
:param name: Имя png-файла.
'''
await ctx.message.delete()
try:
await ctx.send(file=discord.File(f'./png/{name}.png'))
except FileNotFoundError:
return await ctx.send("**Файл не найден!**")
Параметр name напрямую интерполируется в путь к файлу без проверки или очистки:
f'./gif/{name}.gif'
f'./png/{name}.png'
Примеры пэйлоадов:
z!gif ..\..\..\..\Windows\filename
z!png ..\..\..\..\Windows\filename

На изображении выше показано извлечение изображения, расположенного по пути C:\Windows\cat.gif