
Как незаметная indirect-зависимость в Go дописала ручку в ваш HTTP-сервер
nullptrdereference 14 минут назад Как незаметная indirect-зависимость в Go дописала ручку в ваш HTTP-сервер Средний 13 мин 609 Go * Информационная безопасность * Обзор Из песочницы Как незаметная indirect-зависимость в...
Anthropic — What company has the best second artificial intelligence model at the end of June?
Значимый прорыв формирует отрасль ИИ: nullptrdereference 14 минут назад Как незаметная indirect-зависимость в Go дописала ручку в ваш HTTP-сервер Средний 13 мин 609 Go * Информационная безопасность * Обзор Из песочницы Как незаметная indirect-зависимость в Go дописала ручку в ваш HTTP-серверВсе примеры из статьи лежат в репозитории github. com/korableg/init-injection-example. Код «вредоноса» написан в учебных целях — чтобы показать класс проблемы, а не дать готовый инструмент.
Запускайте только в песочнице. История простая: у нас есть аккуратный сервис на net/http с единственной ручкой /time. Мы обновляем одну библиотеку через go get, ничего не меняя в своём коде.
Технические детали
После рестарта в сервисе появляется ручка /__injected, которая отдаёт строки из памяти процесса. Мы её не регистрировали. Более того — пакет, который её зарегистрировал, формально в сервисе не используется.
Дальше — разбор, как такое вообще возможно, шаг за шагом: от модели зависимостей Go и функции init до сканирования кучи и unsafe. И, конечно, как от этого защищаться. Как Go видит зависимостиЧтобы понять атаку, нужно держать в голове три факта о модульной системе Go.
Если вы уверенно читаете go. mod — можно пролистать до части 2. Модуль начинается с go mod initgo mod init github.
Отраслевые последствия
com/korableg/init-injection-example Команда создаёт в корне go. Путь модуля бывает двух видов:для библиотеки — полный импортируемый путь (github. com/org/lib), по которому её будут тянуть другие;для сервиса — может быть просто уникальным идентификатором, наружу его никто не импортирует.
Если сервис должен экспортировать пакеты (например, сгенерированные protobuf-контракты), под них заводят отдельный external-модуль с полным именем — его и импортируют соседи. Один способ импорта на всё — go getgo get github. com/igrmk/treemap/v2@v2.
1 go get — универсальный способ затянуть любую зависимость: библиотеку, инструмент, обновление версии. Именно эта команда в нашей истории и станет точкой входа атаки. com/korableg/init-injection-example/lib // 1.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.



