- BrainTools - https://www.braintools.ru -

Уязвимость в коде Microsoft NLWeb позволяла получать доступ к файлам на удалённом компьютере

В мае этого года, на конференции Build 2025, Microsoft представила проект NLWeb, призванный стать инструментом взаимодействия агентов искусственного интеллекта [1] с веб-сайтами. Исследователи безопасности нашли [2] в нём серьёзную уязвимость.

Уязвимость в коде Microsoft NLWeb позволяла получать доступ к файлам на удалённом компьютере - 1

Microsoft позиционирует проект как основу для «агентской сети» — будущего, в котором агенты искусственного интеллекта выполняют сложные задачи, напрямую взаимодействуя с онлайн-сервисами.

Анань Гуань, исследователь в области безопасности, и Лэй Ван задокументировали [3] уязвимость обхода пути во фреймворке с открытым исходным кодом. По словам Гуаня, они просматривали репозиторий NLWeb на GitHub, когда их внимание [4] привлек определённый файл: 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 и утверждает, что этот инцидент демонстрирует, как агентская сеть создаёт новую поверхность атаки, поскольку интерпретация естественного языка пользователей может непреднамеренно трансформироваться во вредоносные пути к файлам или системные команды, если не соблюдать крайнюю осторожность.

Автор: maybe_elf

Источник [5]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/18220

URLs in this post:

[1] интеллекта: http://www.braintools.ru/article/7605

[2] нашли: https://www.theverge.com/news/719617/microsoft-nlweb-security-flaw-agentic-web

[3] задокументировали: https://medium.com/@guanaonan/three-dots-to-root-how-i-found-a-path-traversal-in-microsofts-agentic-web-nlweb-4e8d8f483327

[4] внимание: http://www.braintools.ru/article/7595

[5] Источник: https://habr.com/ru/news/936188/?utm_source=habrahabr&utm_medium=rss&utm_campaign=936188

www.BrainTools.ru

Rambler's Top100