Найдена критическая уязвимость в стандартной библиотеке Go (Golang): угроза для миллионов серверов
Сообщество разработчиков на Go (Golang) всколыхнула новость об обнаружении критической уязвимости в стандартной библиотеке net/http. Уязвимость, получившая идентификатор CVE-2023-XXXX (заменено для примера), затрагивает обработку HTTP-запросов и может привести к серьезным последствиям — от обхода политик безопасности до полного компрометации серверов.
Проблема относится к классу атак типа HTTP Request Smuggling («контрабанда запросов»). Она возникает из-за некорректной обработки заголовков Transfer-Encoding и Content-Length в парсере HTTP-запросов Go. Злоумышленник может отправить специально сформированный запрос, который будет интерпретирован сервером Go иначе, чем прокси-сервером или балансировщиком нагрузки, стоящим перед ним.
В чем заключается опасность?
Используя данную уязвимость, атакующий может:
- Обходить авторизацию и аутентификацию — внедрять вредоносные запросы, которые сервер обработает как легитимные действия от имени другого пользователя.
- Перехватывать сессионные данные — «отравлять» кэш прокси-серверов и получать доступ к закрытым ресурсам.
- Проводить XSS-атаки — внедрять скрипты в ответы сервера, которые будет выполнять браузер жертвы.
- Достичь отказа в обслуживании (DoS) — отправлять запросы, которые приводят к зависанию или аварийному завершению работы приложения.
Особую опасность уязвимости придает тот факт, что net/http — это стандартная библиотека, используемая подавляющим большинством Go-проектов, от простых API до крупных микросервисных архитектур. По оценкам экспертов, под угрозой находятся миллионы серверов по всему миру.
Кто подвержен риску?
Уязвимость затрагивает все версии Go до 1.20.6 и 1.21.0. В зоне риска находятся:
- Веб-серверы и API, написанные на Go без использования обратного прокси.
- Приложения, использующие встроенные возможности
net/httpдля обработки запросов. - Серверы, работающие за балансировщиками нагрузки или WAF, которые могут по-разному парсить заголовки.
Как защититься?
Разработчики языка Go оперативно выпустили патч. Для защиты вашего проекта необходимо немедленно предпринять следующие шаги:
- Обновить Go до версии 1.20.6 или 1.21.0 (в зависимости от вашей мажорной ветки).
- Пересобрать все бинарные файлы с новой версией компилятора.
- Проверить зависимости — если вы используете сторонние библиотеки, обертки над
net/http, убедитесь, что они также обновлены и совместимы. - Внедрить WAF (Web Application Firewall) как дополнительный уровень защиты, способный фильтровать подозрительные запросы.
Команда PythonLib настоятельно рекомендует всем Go-разработчикам не откладывать обновление. Уязвимость является крити