TGViewer
Zen of Python Zen of Python @zen_of_python · 18.9K subscribers
Post #4820 2.95K
История недели: линтер ruff в одиночку остановил supply-chain-атаку на популярный проект. 8 июня злоумышленник взломал аккаунт сооснователя GPT-Pilot (ИИ-агент для разработки, 33,7 тысячи звёзд на GitHub) и форс-пушнул прямо в main 758 КБ обфусцированного JavaScript-стилера из семейства Shai-Hulud — того самого, что осенью прокатилось по npm.

Дальше произошло прекрасное. CI проекта дважды завернула вредоносный коммит:

🔘сначала ruff format --check споткнулся о нарушение форматирования в _hooks.py;
🔘потом ruff check нашёл E402 (импорт не в начале файла) и I001 (несортированные импорты) в __init__.py.

Пайплайн красный, релиз не собрался, стилер до пользователей не доехал. Атакующий получил полный доступ на запись в репозиторий и споткнулся о проверку сортировки импортов.

Разбор инцидента опубликовала StepSecurity, и вывод из него шире смешного заголовка. Строгий линтинг в CI — это не только про красоту кода. Вредоносные инъекции почти всегда выглядят чужеродно: обфусцированные блобы, импорты посреди файла, нетипичное форматирование. Линтер с жёсткими правилами превращается в дешёвый детектор аномалий, который не обойти, не понимая кодстайл проекта.

Так что когда в следующий раз будете ворчать на красный пайплайн из-за несортированных импортов — вспомните, что ровно эта проверка спасла проект на 33 тысячи звёзд.

@zen_of_python
  • ✍ 11
  • 👍 8
  • 😁 4
  • 👏 2
More from @zen_of_python
  1. Sep 20, 2026Как collections.deque хранит элементы блоками У deque два конца, поэтому легко представить…
  2. Sep 20, 2026Что ускоряет django-msgspec в Django и где он расходится с json django-msgspec заменяет ко…
  3. Sep 20, 2026Почему миллион чисел в Python занимает 35 МБ Список из миллиона целых, которые помещаются…
  4. Sep 19, 2026Как перевести Python-сервер MCP с FastMCP на SDK 2.x Свежая установка зависимостей сломала…
  5. Sep 19, 2026Как кэшировать методы чужого Python-клиента Если библиотечный клиент нельзя менять, его ме…
  6. Sep 19, 2026Где заканчивается ускорение NumPy и что выбрать дальше Векторизация выполняет цикл низкоур…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →