CVE-2026-59168: неограниченная рекурсия в JSON- и XML-ридерах Dasel приводит к необратимому stack-overflow DoS
В библиотеке и CLI-инструменте Dasel обнаружена уязвимость CVE-2026-59168 с оценкой CVSS 6.2 (MEDIUM). При обработке глубоко вложенных JSON- или XML-данных ридеры уходят в неограниченную рекурсию, что вызывает необратимое переполнение стека и аварийное завершение всего процесса. Уязвимы версии с 3.0.0 по 3.11.1, исправление доступно в 3.11.1.
Подробности
Уязвимость затрагивает Dasel в версиях с 3.0.0 до 3.11.1 включительно. Причиной является отсутствие контроля глубины вложенности при рекурсивном разборе данных. В файлеparsing/json/json_reader.go функции decodeValue, decodeObject и decodeArray, а также функция parseElement в parsing/xml/reader.go выполняют по одному рекурсивному вызову на каждый уровень вложенности входных данных, не ограничивая её.
Если злоумышленник передаёт глубоко вложенные JSON- или XML-данные, каждый уровень вложенности добавляет новый кадр в стек goroutine Go. Когда глубина становится достаточно большой, стек исчерпывается, и среда выполнения Go инициирует неустранимую фатальную ошибку (fatal error: stack overflow), которая завершает весь процесс. Ключевая опасность заключается в том, что такая ошибка не может быть перехвачена через defer или recover — она приводит к немедленному аварийному завершению приложения, а не к обычной панике, которую можно обработать.
Атака возможна через несколько векторов: вызов parsing.Format(...).NewReader(...).Read(data) в библиотеке, использование интерфейса командной строки Dasel, а также функцию-селектор parse. Во всех случаях управляемые злоумышленником входные данные могут содержать произвольно глубокую вложенность.
Важно отметить, что существующий лимит размера XML-входа не предотвращает исчерпание глубины: даже небольшой по объёму документ с большим числом уровней вложенности способен вызвать переполнение стека. Это делает уязвимость особенно коварной — защита по размеру данных здесь не работает.
Стоит подчеркнуть, что это уязвимость отказа в обслуживании (DoS), а не удалённое выполнение кода: последствия ограничиваются аварийным завершением процесса. Однако в сценариях, где Dasel используется как библиотека в постоянно работающих сервисах или как часть конвейеров обработки данных, подобный сбой может приводить к недоступности сервиса и нарушению бизнес-процессов.
Что делать
Основная и наиболее надёжная рекомендация — обновить Dasel до версии 3.11.1 или более поздней, в которой проблема устранена. Обновление следует провести как для использования в качестве CLI-инструмента, так и для всех зависимостей, включающих Dasel как библиотеку. Если обновление невозможно в краткосрочной перспективе, следует рассмотреть компенсирующие меры. Поскольку встроенного ограничения глубины в уязвимых версиях нет, необходимо ограничить поступление недоверенных JSON- или XML-данных на вход Dasel на уровне приложения: например, проводить предварительную валидацию вложенности во входных данных сторонними средствами, отклоняя документы с подозрительно большой глубиной. Также целесообразно минимизировать привилегии процессов, использующих Dasel, и обеспечить их автоматический перезапуск, чтобы аварийное завершение не приводило к длительному простою. Для сервисов, принимающих данные извне, рекомендуется ограничить доступ к функциональности разбора Dasel только доверенными источниками до момента обновления.Итог
CVE-2026-59168 — уязвимость отказа в обслуживании в Dasel версий 3.0.0–3.11.1, вызванная неограниченной рекурсией при разборе JSON и XML. Эксплуатация приводит к необратимому переполнению стека и аварийному завершению процесса, причём стандартные механизмы обработки ошибок Go не позволяют перехватить сбой. Исправление доступно в версии 3.11.1; до обновления следует ограничить обработку недоверенных данных и предусмотреть устойчивость сервисов к аварийным завершениям.Источник: CVE Project (cvelistV5)
