22 марта 2016 года инженер-программист Азер Кочулу удалил left-pad
пакет, который он опубликовал в npm ( менеджер пакетов JavaScript ). Кочулу удалил пакет после спора с Kik Messenger , в котором компания принудительно взяла под контроль имя пакета . В результате тысячи программных проектов, которые использовались в качестве зависимости , включая транскомпилятор Babel и веб-фреймворк React , не могли быть собраны или установлены. Это вызвало широкомасштабные сбои, поскольку технологические корпорации малого и большого размера, включая Meta Platforms , PayPal , Netflix и Spotify , использовали в своих программных продуктах. kik
left-pad
left-pad
Через несколько часов после удаления пакета из npm компания, стоящая за платформой, npm, Inc , вручную восстановила пакет. Позже npm отключил возможность удаления пакета, если с даты его публикации прошло более 24 часов и от него зависит по крайней мере один другой проект. Инцидент привлек широкое внимание СМИ и вызвал реакцию людей в индустрии программного обеспечения . Удаление left-pad
вызвало дискуссию о преднамеренном самосаботаже программного обеспечения для содействия социальной справедливости и привлекло внимание к повышенной вероятности атак на цепочку поставок в модульном программировании .
left-pad
был бесплатным и открытым исходным кодом JavaScript- пакета, опубликованного Азером Кочулу, независимым инженером-программистом из Окленда, Калифорния. [1] Пакет многократно добавляет символы в начало строки с помощью цикла . [1] left-pad
был охарактеризован как чрезвычайно простой, состоящий всего из 11 строк кода (без учета пустых строк) в окончательной версии, созданной Кочулу. [2] [3]
Koçulu опубликовал left-pad
на npm , менеджере пакетов по умолчанию для Node.js , среды выполнения JavaScript . [4] [2] Несмотря на свою относительную неизвестность, left-pad
он активно использовался; пакет использовался в качестве зависимости тысячами других программных проектов и достиг более 15 миллионов загрузок до его удаления. [5] [6] Некоторые из проектов, которые требовались left-pad
для работы, были критически важны для экосистемы JavaScript в то время. К ним относятся Babel , транскомпилятор , который обеспечивает обратную совместимость кода JavaScript, Webpack , система объединения модулей, а также React и React Native , которые являются фреймворками, широко используемыми для разработки веб-сайтов и мобильных приложений соответственно. [7] [8] [1]
В дополнение к left-pad
, Кочулу также владел kik
npm, инструментом, который позволял разработчикам настраивать шаблоны для своих проектов. [1] 11 марта 2016 года Kik Interactive, канадская компания, владеющая платформой обмена мгновенными сообщениями Kik Messenger , связалась с Кочулу, попросив его отказаться от контроля над kik
пакетом из-за права собственности компании на торговую марку «Kik» . [9] Часть переписки включала следующее сообщение от Kik:
Мы не хотим быть придурками по поводу [
kik
пакета], но это зарегистрированная торговая марка в большинстве стран мира, и если вы действительно выпустите проект с открытым исходным кодом под названием kik, наши юристы по товарным знакам будут ломиться в вашу дверь и закрывать ваши аккаунты и тому подобное — и у нас не будет выбора, кроме как сделать все это, потому что вам нужно защищать товарные знаки, иначе вы их потеряете. Разве мы не можем прийти к какому-то компромиссу, чтобы заставить вас изменить название, не привлекая юристов? Есть ли что-то, что мы могли бы сделать для вас в качестве компенсации, чтобы заставить вас изменить название? [3]
Вскоре после этого Кочулу ответил, отказавшись менять название своего проекта, заявив:
Ха-ха, ты на самом деле ведешь себя как придурок. Так что иди на хуй. Не пиши мне в ответ. [3]
Кочулу также запросил 30 000 долларов США в качестве компенсации «за хлопоты, связанные с отказом от моего любимого проекта ради [ sic ] кучки корпоративных придурков». [1] 18 марта 2016 года Айзек З. Шлютер, генеральный директор npm, Inc., написал Kik Interactive и Кочулу, заявив, что право собственности на kik
пакет будет вручную передано Kik Interactive. [1]
После того, как Кочулу выразил свое разочарование решением npm, Inc. и заявил, что он больше не желает быть частью платформы, Шлютер дал ему команду удалить все 273 зарегистрированных им модуля. [9] Кочулу выполнил команду 22 марта 2016 года, удалив все ранее выпущенные им пакеты. [1] left-pad
был одним из пакетов, который был «неопубликован», что сделало его более недоступным для общественности на npm. [5] Программный left-pad
проект и его содержимое остались доступны на GitHub . [9]
Пользователи, пытающиеся собрать или установить любой проект JavaScript, который использовался left-pad
как зависимость (включая такие зависимости, как Babel или Webpack), получали ошибку 404 , которая приводила к сбою процесса. [1] Известные корпорации, занимающиеся разработкой программного обеспечения, использовали этот пакет, включая Meta Platforms , PayPal , Netflix и Spotify . [8] Разработчики Kik Interactive сами столкнулись с проблемами сборки в результате удаления пакета. [1]
Через час после удаления пакетов Кочулу опубликовал пост на Medium («Я только что освободил свои модули»), объяснив, что он отменил публикацию своих программных проектов из npm в знак протеста против корпоративных интересов в отношении свободного и открытого программного обеспечения. [1]
Вскоре после удаления другие разработчики программного обеспечения начали публиковать поток жалоб, реакций и обходных путей в системе отслеживания проблем Git проекта . [7] [1]
Поддерживающие проекты с открытым исходным кодом, включая Babel, выпустили исправления для удаления зависимостей, которые Кочулу не опубликовал. [7] Несколько других названий пакетов Кочулу были быстро заняты вновь опубликованными пакетами. [3] Например, другой разработчик воссоздал left-pad
пакет, но выпустил его как версию 1.0.0. С тех пор как Кочулу опубликовал свой как версию 0.0.3, пользователи продолжали сталкиваться с проблемами. [3]
Примерно через два часа после удаления исходного left-pad
пакета npm вручную «отменил публикацию» исходной версии 0.0.3, восстановив резервную копию. [1] Лори Восс, главный технический директор npm, написала, что компания «выбрала потребности многих», несмотря на внутренние разногласия относительно того, было ли это действие «правильным решением». [10]
npm изменил свою политику удаления опубликованных пакетов, чтобы предотвратить удаление, если с даты выпуска прошло более 24 часов и по крайней мере один другой проект требует его в качестве зависимости. [11] От имени npm менеджер сообщества Эшли Уильямс извинился за сбой, вызванный инцидентом, заявив, что платформа «[не] смогла защитить сообщество». [11] Kik Interactive также извинилась за инцидент, а руководитель отдела обмена сообщениями компании Майк Робертс опубликовал цепочку писем с Кочулу на Medium и охарактеризовал его взаимодействие как «вежливую просьбу». [8] Робертс написал, что изначально они обратились к Кочулу, потому что хотели опубликовать пакет с открытым исходным кодом на npm под именем, которое использовал Кочулу. [5] Кочулу заявил, что сожалеет о том, что помешал работе других, но он считает, что сделал это «на благо сообщества в [ sic ] долгосрочной перспективе». [2]
Инцидент вызвал неоднозначную реакцию пользователей Twitter , GitHub , Reddit и Hacker News , многие из которых утверждали, что он на короткое время «сломал Интернет». [2] [8] [9] [1] Многие прокомментировали культуру разработки JavaScript, характерную для « быстрых и ломающих вещи », непредсказуемую природу программного обеспечения с открытым исходным кодом и предполагаемую чрезмерную зависимость от модульного программирования . [2] [8] [3] Пользователи также выразили разочарование решением npm принудительно передать пакет Koçulu компании Kik Interactive из-за юридической угрозы. [1]
Инцидент показал, как нарушение пакета npm может привести к атаке на цепочку поставок . В дополнение к широко разрекламированному left-pad
инциденту, несколько лиц немедленно похитили другие пакеты Koçulu с неизвестным кодом после их удаления. [7] npm выпустил новую политику для предотвращения злонамеренных поглощений в подобных спорах, [3] но left-pad
инцидент по-прежнему приводится в качестве примера чрезмерной зависимости от внешних участников, что приводит к увеличению поверхности атаки на программные продукты. [12] Намеренный самосаботаж Koçulu с целью left-pad
привлечения внимания к социальной проблеме также был описан как предшественник случаев публикации протестного ПО на таких платформах, как npm. [6]