5 июня 2025 года в экосистеме GitHub произошёл инцидент, который затронул тысячи команд разработчиков по всему миру. В течение 105 секунд платформа автоматически отключила доступ к 73 репозиториям Microsoft, расположенным в четырёх организациях: Azure, Azure-Samples, microsoft и MicrosoftDocs. Причиной стала повторная компрометация пакета Durable Task - ключевого механизма для построения долговременных фоновых задач на платформе Azure. Все метки времени отключений попадают в интервал между 16:00:50 и 16:02:35 по всемирному координированному времени. Такая синхронность исключает ручное вмешательство: блокировку выполнила автоматическая система борьбы со злоупотреблениями. GitHub применяет подобную меру только при явных нарушениях условий использования, обычно связанных с вредоносным кодом или утечкой учётных данных.
Описание
Под удар прежде всего попали репозитории, связанные с Azure Functions. Среди них среда выполнения, языковые адаптеры для Node.js, Python, Java, PowerShell, .NET и Go, а также инструменты сборки и контейнерной упаковки. Особенно болезненным оказалось отключение репозитория functions-action, который используется в действиях GitHub (GitHub Actions) для развёртывания функций. Любой пайплайн, ссылавшийся на Azure/functions-action@v1, перестал работать. В организации microsoft были заблокированы все репозитории семейства Durable Task: реализации на .NET, Go, Java, JavaScript, а также драйверы для MSSQL и Netherite. В Azure-Samples пострадали 13 проектов, в основном демонстрационные приложения с искусственным интеллектом и агентами. В число отключённых попали даже репозитории, не связанные напрямую с Azure - например, инструмент для производительности под macOS и драйверы для сетевого оборудования SONiC.
Важно отметить, что это не первый случай компрометации пакета Durable Task. 19 мая злоумышленники загрузили на Python Package Index (PyPI) три вредоносные версии (1.4.1, 1.4.2 и 1.4.3) официального пакета Microsoft, используя похищенные секреты действий GitHub (GitHub Actions). Тогда пакеты были удалены в течение нескольких часов, однако, как выяснилось, нападавшие сохранили доступ к учётным данным. Повторное отключение репозиториев в июне свидетельствует о том, что угроза не была полностью устранена - злоумышленники, удерживавшие контроль над секретами в мае, вероятно, так и не потеряли его.
В обсуждении на форуме Microsoft Learn разработчики сообщили, что их пайплайны непрерывной интеграции сломаны, и потребовали объяснений. Представитель Microsoft сначала предположил, что блокировка связана с нарушением условий использования (вредоносный код, фишинг, нарушение авторских прав или экспортные ограничения), а затем уточнил: речь идёт о "внутренней проблеме управления". Компания рекомендовала временно перейти на альтернативные методы развёртывания - например, интерфейс командной строки Azure (Azure CLI), Azure DevOps или Zip Deploy.
Аналитики связывают инцидент с активностью открытого червя Miasma. В мае нападавшие опубликовали код набора инструментов Mini Shai-Hulud, а в начале июня появилась его модификация Miasma, которая добавила сборщики учётных данных Azure и GCP. Червь создаёт публичные репозитории с похищенными секретами, что и могло спровоцировать автоматическую блокировку со стороны GitHub. Хотя прямое подтверждение этой версии отсутствует (червя обнаружили в экосистеме npm у Red Hat, а не в репозиториях Microsoft), она хорошо объясняет масштаб и скорость реакции платформы.
Последствия инцидента ощутили многие компании: нарушилась работа непрерывной интеграции и доставки. Разработчикам пришлось срочно менять пайплайны и искать обходные пути. Ситуация продемонстрировала уязвимость подхода с использованием плавающих тегов в действиях GitHub (GitHub Actions). Плавающий тег @v1 указывает на версию, которая может меняться, - когда исходный репозиторий исчезает, пайплайн просто перестаёт работать. Фиксация по полному хешу коммита хотя бы гарантирует предсказуемый сбой или успех.
Специалисты рекомендуют в первую очередь прекратить использовать плавающие теги для Azure и всех подобных действий, закрепив версии по SHA коммита. Необходимо немедленно ротировать все учётные данные, которые могли быть скомпрометированы: токены интерфейса командной строки Azure (Azure CLI), управляемые удостоверения (managed identities), а также ключи публикации для PyPI и npm, доступные из рабочих процессов. Рекомендуется также проверить свои организации на предмет подозрительных публичных репозиториев, особенно тех, в названии которых встречается "Miasma: The Spreading Blight", и поискать секреты, записанные в формате JSON на неожиданных аккаунтах. Кроме того, стоит проанализировать скрипты предварительной установки в пакетах - червь Miasma использует вызов Bun к обфусцированному загрузчику _index.js.
Этот инцидент стал одним из крупнейших случаев нарушения цепочки поставок в облачной экосистеме за последнее время. Он показывает, насколько хрупкой может быть зависимость от одного репозитория и как быстро автоматизированные механизмы безопасности способны изменить ландшафт разработки. Компаниям стоит пересмотреть свои практики управления зависимостями, предусмотреть резервные каналы развёртывания и серьёзно отнестись к защите секретов, используемых в пайплайнах непрерывной интеграции. Повторная компрометация одного пакета привела к остановке сборок по всему миру - и это тревожный сигнал для всей отрасли.