Когда зависимость становится риском

Автор: Алексей Смирнов · Podlodka Podcast #448

Уводим «Хвост инженера» в сторону безопасности. Этот выпуск Podlodka — о том, как уязвимости приходят в проект через обычные зависимости и наши привычки.

Алексей Смирнов основал CodeScoring — платформу для анализа open source зависимостей. Разбирает то, что обычно выпадает из разговоров о безопасном коде: угрозы, которые приходят не из вашего репозитория.

Уязвимость может прийти из библиотеки, которую вы не трогали три года, из инструмента сборки, из GitHub Actions. Ответственность разработчика распространяется на весь граф зависимостей — не только на то, что вышло из-под его рук.

Кому смотреть: тем, кто подключает зависимости не задумываясь и считает, что безопасность — это про свой код, а не чужой.

Из этого можно взять в работу: посмотри, что происходит с зависимостями, когда меняется мейнтейнер. XZ Utils показал, что именно здесь и нужно смотреть в первую очередь.

Что такое Supply Chain Attack

Атака на цепочку поставки — это компрометация не вашего кода, а чего-то, от чего он зависит. Злоумышленник не ломает ваш сервер — он ломает инструмент или библиотеку, которыми вы пользуетесь. Самый наглядный пример из выпуска — бэкдор в XZ Utils (CVE-2024-3094): атакующий под псевдонимом «Jia Tan» два года контрибьютил в проект, получил права мейнтейнера и внедрил бэкдор не в git-историю, а в tarball-релизы. Обнаружили случайно — по аномалии CPU при SSH.

Основные векторы атак

Dependency confusion — публикация в публичный реестр пакета с тем же именем, что у внутреннего. Менеджер пакетов выберет «новую» публичную версию.

Тайпсквоттинг — reqests вместо requests. Опечатка при установке делает своё дело.

Компрометация мейнтейнера — захват аккаунта или социальная инженерия, как в случае XZ.

Вредоносные обновления — легитимный пакет обновляется уже с новым хозяином (история с event-stream в npm).

Атаки через CI/CD — компрометация GitHub Actions, образов Docker Hub, артефактов сборки.

Как защищаться

SCA (Software Composition Analysis) — автоматический анализ зависимостей на CVE, встроенный в CI, а не запускаемый раз в квартал. Инструменты: Snyk, Dependabot, CodeScoring.

SLSA (Supply-chain Levels for Software Artifacts) — фреймворк от Google с четырьмя уровнями доверия к сборочной цепочке: воспроизводимые сборки, подписанные артефакты, аудируемый provenance.

SBOM (Software Bill of Materials) — машиночитаемый реестр всех зависимостей. В США уже стал регуляторным требованием.

Pinning + хеши — фиксировать не диапазон версий, а конкретный integrity hash.

Про AI-генерированный код

LLM-модели обучались на всём GitHub — включая уязвимый код. Veracode зафиксировал: ассистенты стабильно воспроизводят известные классы уязвимостей. DevSecOps-пайплайн должен покрывать и этот слой.

🎧 Страница выпуска · Spotify