to_abs_path в scripts/iib/tool.py нормализовал запрошенный путь с помощью os.path.normpath, который сворачивает точечные сегменты, но не разрешает символические ссылки. Таким образом, символическая ссылка, размещенная внутри сканируемого каталога, удовлетворяет сравнению содержания, выполняемому is_path_trusted в scripts/iib/api.py, указывая за пределы этого каталога, а FileResponse следует по ссылке при передаче ответа, поэтому ссылка, созданная в каталоге изображений и нацеленная на файл, такой как /etc/passwd, раскрывает этот файл. Применимость проверки зависит от get_enable_access_control в scripts/iib/tool.py: она возвращает true, если для IIB_ACCESS_CONTROL установлено значение Enable, false, если установлено значение Disable, и в противном случае — true, когда веб-интерфейс Stable Diffusion хоста был запущен с помощью Share, ngrok, Listen или server_name, возвращаясь к false.
Поэтому ограничение активно в сетевых развертываниях WebUI, которые на него полагаются, в то время как автономный запуск без такой опции обслуживает каждый читаемый файл независимо от этого недостатка. Исправление разрешает путь с помощью os.path.realpath.
Показать оригинальное описание (EN)
to_abs_path in scripts/iib/tool.py normalised the requested path with os.path.normpath, which collapses dot segments but does not resolve symbolic links. A symlink placed inside a scanned directory therefore satisfies the containment comparison performed by is_path_trusted in scripts/iib/api.py while pointing outside that directory, and FileResponse follows the link when serving the response, so a link created in an image directory and targeting a file such as /etc/passwd discloses that file. Whether the check applies depends on get_enable_access_control in scripts/iib/tool.py: it returns true when IIB_ACCESS_CONTROL is set to enable, false when set to disable, and otherwise true when the host Stable Diffusion WebUI was started with share, ngrok, listen or server_name, falling back to false. Confinement is therefore active in the network-exposed WebUI deployments that rely on it, while a standalone run with no such option serves every readable file regardless of this flaw. The fix resolves the path with os.path.realpath.
Характеристики атаки
Последствия
Строка CVSS v4.0