Ошибка в коде Microsoft открыла злоумышленникам доступ к вашим файлам: как это произошло
- Категория: Security
- Дата: 6 августа 2025 г. в 16:45
- Просмотров: 42
В мае 2025 года Microsoft представила NLWeb ("Веб на естественном языке") на своей конференции Build 2025. Этот проект был призван стать основой для взаимодействия AI-агентов с веб-сайтами, открывая новую эру "агентного веба", где искусственный интеллект мог бы напрямую взаимодействовать с онлайн-сервисами, такими как Shopify и TripAdvisor, выполняя сложные задачи.
Однако, как выяснилось, в этой амбициозной разработке таилась серьезная уязвимость.
Исследователь безопасности Аонан Гуань вместе с Лей Вангом обнаружили брешь в системе безопасности NLWeb, которая позволяла злоумышленникам обходить защиту и получать доступ к конфиденциальным файлам на вашем компьютере. Как такое стало возможным?
Гуань изучал репозиторий NLWeb на GitHub и обратил внимание на файл webserver/static_file_handler.py
. Именно в этом файле содержался код, который, как оказалось, был уязвим для атак.
# Уязвимый фрагмент кода
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', ''),
]
# Далее в коде...
full_path = os.path.join(root, safe_path)
Первая строка кода может показаться безобидной, но именно она стала причиной проблемы. Функция os.path.normpath()
должна была нормализовать путь к файлу, чтобы сделать его безопасным. По идее, она должна была удалять лишние разделители и ссылки на родительские каталоги.
Например, путь A//B/./C/../D
должен был быть преобразован в A/B/D
. Однако, как обнаружил Гуань, эта функция не блокировала возможность "выбраться" из веб-каталога с помощью последовательности ../
.
Чтобы проверить свою теорию, Гуань создал локальный сервер и попытался получить доступ к файлу /etc/passwd
с помощью команды curl "http://localhost:8000/static/..%2f..%2f..%2fetc/passwd"
. К его удивлению, сервер без проблем вернул содержимое этого файла.
Изображение: Aonan Guan
/etc/passwd
– это база данных учетных записей пользователей в UNIX-системах (Linux, macOS). В ней хранятся имена пользователей, их идентификаторы и другая важная системная информация. Получение доступа к этому файлу – серьезная угроза безопасности.
Изображение: Aonan Guan
Но это было еще не все. Гуань также смог получить доступ к файлам исходного кода приложения, включая файл .env
, содержащий секретные ключи API. Для этого он использовал команду curl "http://localhost:8000/static/..%2f..%2f..%2fUsers//NLWeb/code/.env"
.
Получается, что код NLWeb не смог правильно проверить вводимые пользователем данные и убедиться, что запрошенный файл находится внутри разрешенного веб-каталога.
Как Microsoft исправила ошибку
Гуань сообщил об уязвимости 28 мая. Microsoft оперативно отреагировала на сообщение и выпустила исправление всего через два дня.
Исправление заключалось в следующем:
- Проверка наличия
..
в пути к файлу, чтобы заблокировать основные попытки обхода каталогов. - Проверка расширения файла. Доступ разрешен только к файлам с расширениями
.html
,.htm
,.css
,.js
,.png
,.jpg
,.jpeg
,.gif
,.svg
,.ico
,.json
,.txt
или.xml
. - Самое главное: проверка, что полный путь к запрошенному файлу находится в одном из разрешенных корневых каталогов. Это исключает возможность выхода за пределы этих каталогов.
Важность своевременного обновления
Гуань настоятельно рекомендует немедленно обновить NLWeb. Он подчеркивает, что этот инцидент показывает, как "агентный веб" создает новые угрозы безопасности. Интерпретация естественного языка от пользователей может привести к непреднамеренным вредоносным путям к файлам или системным командам, если не соблюдать предельную осторожность.
Мнение редакции MSReview: Данный инцидент подчеркивает важность тщательной проверки кода и соблюдения лучших практик безопасности, особенно при разработке систем, использующих искусственный интеллект и обрабатывающих пользовательский ввод. Разработчикам следует быть особенно бдительными в отношении потенциальных уязвимостей, связанных с обходом пути, и принимать меры для их предотвращения.
- Комментарии