tg-me.com/golang_books/1009
Last Update:
🔐 Непредвиденные уязвимости в парсерах Go
Go-разработчики нередко упускают из виду, как стандартные JSON / XML / YAML-парсеры могут быть использованы злоумышленниками, что приводит к обходу аутентификации и утечке данных.
1. Опасные теги при (un)marshal
* Поля без json:"-"
участвуют в Unmarshal.
* Неверные теги:
* json:"-,omitempty"
— парсер ждёт ключ "-"
, поле остаётся доступным.
* json:"omitempty"
— имя поля становится "omitempty"
, модификатор не работает.
Решение: использовать json:"-"
и Semgrep-правила: trailofbits.go.unmarshal-tag-is-dash
и trailofbits.go.unmarshal-tag-is-omitempty
.
2. Несогласованность парсеров
* Дубликаты ключей: Go берёт последнее значение, другие парсеры — первое или ошибку.
* Регистронезависимый поиск: {"ACTION":"X"}
читается как Action
только в Go.
* Unicode-подмена имён (`aKtionſ`) проходит незамеченной.
3. Путаница форматов
* XML-парсер Go игнорирует мусор до/после документа → JSON-внедрение.
* YAML-парсер принимает JSON как валидный YAML.
* Пример CVE-2020-16250 (Hashicorp Vault): JSON в XML-парсер → обход auth.
Рекомендации
* Жёсткий режим:
* JSON — decoder.DisallowUnknownFields()
* YAML — KnownFields(true)
* Свой строгий парсер с проверкой дубликатов и case-collisions.
* Единый парсер и настройки во всех сервисах.
* Следить за безопасными дефолтами JSON v2 в Go.
* Использовать Semgrep для поиска рисков.
Ключевые выводы
1. Включить строгий парсинг.
2. Синхронизировать настройки во всех микросервисах.
3. Переходить на JSON v2, когда он стабилизируется.
4. Периодически запускать статический анализ (Semgrep).
Go-парсеры удобны, но при работе с недоверенными данными необходимы дополнительные меры.
📌 Читать
BY Golang Books

Share with your friend now:
tg-me.com/golang_books/1009