Про интернет

Аккуратный Go-сервис на net/http с единственной ручкой /time. Обновляем одну библиотеку через go get, не трогая свой код. После рестарта в сервисе появляется ручка /__injected, которая отдаёт строки из памяти процесса. Мы её не регистрировали — а пакет, который это сделал, формально даже не используется.

Разбираю шаг за шагом, как такое возможно: модель зависимостей Go и коварство //indirect, тихий вход через init(), сканирование кучи и unsafe. Pointer для поиска ServeMux в работающем сервере. И, конечно, как от этого защищаться — от аудита зависимостей до seccomp и read-only ФС.

Весь код — в репозитории, «вредонос» написан в учебных целях. Запускать только в песочнице.

Разобрать «вредоноса»

Источник: nullptrdereference

Перейти на сайт

Другие материалы на сайте b.Z - Записки о гаджетах, людях и музыке