В мае этого года, на конференции Build 2025, Microsoft представила проект NLWeb, призванный стать инструментом взаимодействия агентов искусственного интеллекта с веб-сайтами. Исследователи безопасности нашли в нём серьёзную уязвимость.
Microsoft позиционирует проект как основу для «агентской сети» — будущего, в котором агенты искусственного интеллекта выполняют сложные задачи, напрямую взаимодействуя с онлайн-сервисами.
Анань Гуань, исследователь в области безопасности, и Лэй Ван задокументировали уязвимость обхода пути во фреймворке с открытым исходным кодом. По словам Гуаня, они просматривали репозиторий NLWeb на GitHub, когда их внимание привлек определённый файл: webserver/static_file_handler.py.
# The vulnerable code snippet safe_path = os.path.normpath(path.lstrip(‘/’)) possible_roots = [ APP_ROOT, os.path.join(APP_ROOT, ‘site’, ‘wwwroot’), ‘/home/site/wwwroot’, os.environ.get(‘HOME’, »), ] # Later in the code… full_path = os.path.join(root, safe_path)
Если взглянуть на первую строку кода, то можно заметить вполне безобидную на вид строку. Согласно официальной документации Python, функция os.path.normpath() нормализует путь, удаляя лишние разделители и ссылки верхнего уровня.
В Windows она преобразует прямые косые черты (/) в обратные косые черты (). Например, путь типа A//B/./C/../D будет нормализован до A/B/D, но, как отмечает Гуань, у этой функции есть неприятный побочный эффект. Фактически, она не мешает пользователю «выйти» из заданного веб-каталога с помощью последовательностей ../.
Гуань подтвердил свои подозрения, настроив локальный сервер, прослушивающий адрес 0.0.0.0:8000, стандартную тестовую конфигурацию. Когда он выполнил curl «http://localhost:8000/static/..%2f..%2f..%2fetc/passwd», сервер успешно вернул содержимое файла /etc/passwd. /etc/passwd — это база данных учётных записей пользователей в системах UNIX, таких как Linux и macOS, где имена сопоставляются с идентификаторами и другой системной информацией. Исследователь также мог получить доступ к файлам в исходном коде приложения, включая файл .env проекта, который содержит секретные данные, такие как ключи API, выполнив команду curl «http://localhost:8000/static/..%2f..%2f..%2fUsers//NLWeb/code/.env».
Гуань сообщил об уязвимости 28 мая. Microsoft подтвердила наличие сообщения в тот же день и выпустила исправление два дня спустя. Оно заключалось в проверке на наличие .. в необработанном пути для блокировки попыток обхода базовых каталогов. После этого инструмент проверяет, имеет ли запрошенный файл одно из разрешённых расширений: .html, .htm, .css, .js, .png, .jpg, .jpeg, .gif, .svg, .ico, .json, .txt или .xml.
Наконец, он определяет полный абсолютный путь к запрошенному файлу и подтверждает, что тот находится в одном из разрешённых корневых каталогов, предотвращая любые попытки утечки.
Гуань рекомендует немедленно обновить экземпляр NLWeb и утверждает, что этот инцидент демонстрирует, как агентская сеть создаёт новую поверхность атаки, поскольку интерпретация естественного языка пользователей может непреднамеренно трансформироваться во вредоносные пути к файлам или системные команды, если не соблюдать крайнюю осторожность.
Источник: habr.com