PyPI запретила загружать файлы в релизы старше 14 дней
PyPI (Python Package Index, официальный репозиторий пакетов для языка Python) ввёл ограничение: в релизы пакетов старше 14 дней больше нельзя загружать новые файлы. Об этом написал Сет Ларсон в блоге PyPI, цитату привёл в своём linkblog Саймон Уиллисон 23 июля 2026 года.
По словам Ларсона, ограничение введено, чтобы защитить старые и давно стабильные релизы от отравления в случае компрометации токенов публикации или CI/CD-процессов (workflow) конкретного проекта на PyPI. Логика такая: если атакующий завладел учётными данными для публикации, раньше он теоретически мог незаметно подложить вредоносный файл в старый, уже проверенный временем релиз, которым продолжают пользоваться миллионы разработчиков, не подозревая, что его тихо изменили. Теперь для релизов старше двух недель такая подмена технически невозможна.
Ларсон уточняет: сама команда PyPI пока не фиксировала случаев подобной атаки на практике. Но, по его словам, единственная причина, почему этого не происходило, атакующие просто не знали, что такая возможность вообще существует, а не отсутствие технической дыры. То есть риск был реальным ещё до того, как его закрыли.
Ключевые факты
- PyPI (репозиторий пакетов Python) больше не принимает новые файлы в релизы, которым больше 14 дней
- Цель, не дать отравить старые стабильные релизы при компрометации токенов публикации или workflow проекта
- По словам Сета Ларсона (блог PyPI), подтверждённых случаев такой атаки зафиксировано не было
- Единственная причина отсутствия атак, атакующие не знали о возможности, а не отсутствие технической дыры
- Свежие релизы (младше 14 дней) под ограничение не попадают
Почему это важно
Атаки на цепочку поставок через пакетные репозитории (supply chain attacks), один из самых опасных векторов в экосистеме открытого кода: скомпрометировав всего один пакет, атакующий получает доступ ко всем проектам, которые его используют. Особую опасность представляют именно старые, давно стабильные релизы, их код почти никто не перепроверяет заново, а зависимость от них массовая. Новое правило PyPI закрывает конкретную лазейку: даже если токен публикации проекта украден, подложить вредоносный файл в уже вышедший больше двух недель назад релиз теперь нельзя.
Кому это важно
В первую очередь, мейнтейнерам пакетов на PyPI и всем, кто отвечает за безопасность токенов публикации и CI/CD-процессов их проектов. Во вторую, разработчикам и компаниям, чьи Python-проекты и продакшен-инфраструктура тянут зависимости из PyPI: для них это правило снижает вероятность того, что давно установленный и проверенный пакет внезапно окажется отравлен.
Как это применить
Для мейнтейнеров практический эффект прямой: если файлы релиза старше 14 дней нужно поменять или дополнить, сделать это загрузкой в существующий релиз больше не получится, потребуется выпускать новую версию пакета. Это дополнительный стимул относиться к токенам публикации и настройкам CI/CD как к критичной части безопасности проекта, поскольку именно их компрометация и была тем сценарием атаки, от которого защищается новое правило.
Можно ли доверять
Источник, прямая цитата из официального блога PyPI за авторством Сета Ларсона, приведённая в известном linkblog Саймона Уиллисона. Заявление официальное и специфичное (конкретный механизм защиты, конкретный срок), явных признаков недостоверности нет. Ограничение, узкая тема экосистемы Python, но подана из первых рук, без домыслов и посредников.
Риски и подводные камни
Правило защищает только релизы старше двух недель: свежие релизы (моложе 14 дней) под него не подпадают, и если токен публикации скомпрометирован в первые две недели после выхода релиза, вредоносные файлы в него всё ещё можно добавить. Сам Ларсон подчёркивает: подтверждённых случаев атаки на старые релизы команда PyPI не фиксировала, но единственная причина этого, атакующие не знали о возможности, а не отсутствие технической дыры, то есть риск был реальным ещё до введения ограничения.
«Индекс пакетов Python (PyPI) больше не принимает новые файлы для релизов старше 14 дней. Это ограничение введено, чтобы старые и давно стабильные релизы нельзя было отравить в случае компрометации токенов публикации или workflow проектов PyPI. Насколько нам известно, это ещё не было использовано злоумышленниками, но единственная причина этого, атакующие не знали, что такая возможность существует, а не отсутствие технической дыры.»
— Сет Ларсон, блог PyPI