Автор faker.js и colors.js намеренно сломал свои пакеты

a-qkbxgvgnuqq2f7vilkaccmxc8.jpeg
Рисунок Injustice художника Baysal

Пользователи пакетов faker.js и colors.js, зависимость от которых имеют тысячи проектов, заметили аномалии в работе. В коде пакетов появился бесконечный цикл, который нарушал нормальную работу программ и выводил бессмыленные данные в консоль. Изначальные предположения о компрометации доступа разработчика не подтвердились: эти изменения внёс сам автор. Его более ранние публикации позволяют говорить, что этот саботаж — проявление несогласия с коммерческим использованием его открытых проектов.
Марак Сквайрс — разработчик программного обеспечения и ранний инвестор в Bitcoin из города Нью-Йорк в США. В сентябре 2020 года в жилище 37-летнего Сквайрса в боро Куинс вблизи парка Астория произошёл пожар. Тогда соседи в общении с репортёрами характеризировали его как человека тихого: он мало с кем общался, а окна его квартиры на первом этаже обычно были закрыты занавесками. Сквайрс на тот момент уже попадал в поле внимания правоохранительных органов из-за бытового конфликта со своей 28-летней подругой.

Команда пожарных справилась с огнём, а самого Сквайрса нашли в эмоционально подавленном состоянии и госпитализировали с ожогами рук. Через несколько часов после того, как экстренные службы покинули место пожара, арендодатель квартиры Сквайрса и одна из соседок заметили вне помещения огнеупорный ящик. Предмет был настолько подозрительным, что они решили открыть его.

Внутри оказались длинные фитили, порошок неизвестного назначения и ещё несколько запечатанных посылок курьерской службы FedEx. Вызванные на место следователи полиции и ФБР обнаружили в квартире магний, алюминий и медь в виде порошка, а также серу и нитрат калия. Кроме реагентов в квартире нашли ёмкости для смешивания и фитили, литературу о взрывчатке и минах-ловушках. Этого набора веществ и оборудования хватало на самодельную бомбу. Спецслужбы объявили об угрозе в парке Астория и эвакуировали людей.

Сквайрс вышел на связь в октябре 2020 года в личном микроблоге. Он пожаловался, что потерял все свои личные вещи в пожаре и едва не оказался на улице. Погорелец попросил пожертвовать денег на его личный аккаунт PayPal. В переписке Марак говорил, что больше не хочет писать код — ему куда более интересно стало заниматься социальной работой и помогать другим.

В следующем месяце Сквайрс публикует в репозитории faker.js на данный момент уже удалённый манифест с требованием заплатить ему за его работу с открытым программным обеспечением. Как писал разработчик, он потерял желание бесплатно поддерживать компании из списка Fortune 500 [список журнала Fortune из 500 самых крупных по размеру прибыли компаний США — синоним крупных и успешных предприятий — прим. ред.]. Марак потребовал либо выдать ему контракт с крупной (шестизначной) зарплатой, либо форкнуть проект и заниматься им самостоятельно. На вопросы о колективном финансировании Сквайрс объяснял, что сайт краудфандинга Patreon забанил его аккаунт, хотя в дальнейшем платформа сняла блокировку.

В апреле 2021 года автор faker.js рассказал в личном блоге о попытках монетизировать открытую библиотеку своим проприетарным SaaS-проектом fakercloud.com, который он на тот момент уже довёл до стадии MVP. Сквайрс заметил активность двух инженеров Retool на своём сервисе. Вскоре Retool от имени этих же двух инженеров выпустила похожий на fakercloud.com продукт REST API Generator, который не пытается заработать напрямую и функционирует бесплатно. Марак обнаружил, что среди генерируемых данных инструмента от Retool встречаются прямые ссылки на fakercloud.com. Марак связался с Retool с целью продать fakercloud.com.

image-loader.svg
Ссылки на fakercloud.com в REST API Generator, которые обнаружил автор faker.js

Глава Retool пообещал Сквайрсу ответить, но прояснил ситуацию лишь в комментариях на Hacker News. Оказалось, что Retool использовала faker.js — распространяемый под допускающей коммерческое использование лицензией MIT — в незначительных объёмах, а сам пакет генерирует для аватарок прямые ссылки на fakercloud.com. Retool извинилась за включение этих ссылок в свой код, убрала их и вывела изменения в прод. Как объяснил глава компании, Retool отказалась приобретать проект, поскольку изначально поняла письмо Марака как предложение взять под контроль библиотеку, а не fakercloud.com.

Усилия Сквайрса по монетизации имеют под собой основу: у его творений много пользователей. Только на npm пакет colors.js собирает 20 миллионов загрузок в неделю, 19 тысяч проектов имеют его в зависимостях. Показатели faker.js чуть скромнее: 2,8 млн загрузок, 2,5 тыс. зависимых проектов. Названия библиотек указывают на их функцию: colors.js добавляет в консоль Node.js цвета и форматирование, чем помогает читаемости текста, а faker.js генерирует набор фальшивых данных для тестирования и моков.

В начале января 2022 года пользователи colors.js и faker.js начали замечать аномалии в работе пакетов. Проблемы затронули даже Cloud Development Kit компании Amazon: в консоли появлялся необычный набор нечитаемых символов, выходящих за кодовое пространство ASCII.

image-loader.svg
Пример из жалобы

Изначально в обсуждениях высказывались предположения (1, 2), что доступ был скомпрометирован. В мире Node.js это частое явление: такое случилось, например, с eslint-scope в 2018 году или coa в ноябре 2021. В реальности Марак сам внёс эти изменения в код библиотек и опубликовал его как на GitHub, так и в npm.

7 января Сквайрс добавил (и не с первого раза) в colors.js бесконечный цикл, который заставляет любое приложение с зависимостью от пакета бесконечно отрисовывать последовательность случайных символов. В ответ на багрепорты разработчик с издёвкой отвечал, что вскоре исправит проблемы: «До нас дошли жалобы, что в релизе версии v1.4.44-liberty-2 пакета colors появился баг zalgo». До этого 4 января он похожим образом саботировал работу faker.js в версии 6.6.6.

image-loader.svg
В версии v1.4.44-liberty-2 пакета colors.js появились не только повторения слова LIBERTY, но и «новый модуль американского флага»

Описание библиотеки faker.js на GitHub и npm сменилось на строчку «Что на самом деле случилось с Аароном Шварцем?». Этот вопрос — отсылка к судьбе одного из создателей сайта Reddit.com, который был активистом свободы доступа к информации. В 2011 году Шварц скачал 4,8 миллиона научных статей из JSTOR — 80% контента онлайн-библиотеки. Он планировал бесплатно распространять статьи в Интернете. Последовавшее расследование и судебное разбирательство сулили Аарону до 50 лет тюремного заключения. В 2013 году в возрасте 26 лет Шварц покончил с собой.

В этой отсылке Марак Сквайрс никак не поясняет, как его личные усилия по монетизации проектов открытого программного обеспечения связаны с активизмом свободы доступа к информации.

В сообществе разработчиков находились как те, кто жёстко критиковал действия Сквайрса, так и понимавшие точку зрения автора пакетов. Популярный блогер сферы кибербезопасности Swift On Security предложил задуматься о безопасности участия независимого труда в коммерческих продуктах. Блогер заметил, что в ведомости программного обеспечения нужен пункт »30 тысяч мотивируемых идеологией неоплачиваемых разработчиков, которых мы знаем только по никам вида D3adassPawg69 и которые в любой момент могут провести инъекцию кода в наше техническое решение».

Как 7 января сообщил сам Сквайрс, npm привела пакет faker.js к исходному виду, а сервис GitHub заблокировал его аккаунт. На момент написания статьи аккаунт доступен. Вероятно, что доступ Сквайрса к нему заморожен.

© Habrahabr.ru