Со дна постучали: внедрение вредоносного кода в проекты Node.js dl // 27.03.16 18:37
Любопытные вещи выясняются насчет npm. [Не забывайте при копировании материала указывать полный адрес источника: //bugtraq.ru/rsn/archive/2016/03/12.html] Недавняя весёлая история с leftpad продемонстрировала, какие могут возникнуть проблемы от удаления чего-то из npm. Оказывается, еще сильней рвануть может от добавления.
Исследователь из Google Сэм Сакконе (Sam Saccone) еще в начале года проинформировал npm о неприятной уязвимости, способной привести к распространению вредоносного кода по множеству зависимых друг от друга пакетов. В феврале информация об уязвимости была раскрыта, а на днях добралась до CERT, после чего привлекла всеобщее внимание.
Проблема в первую очередь связана с тем, что при установке пакета из npm могут выполняться вспомогательные скрипты (так называемые lifecycle scripts). Выполняются они обычно с правами текущего пользователя, хотя на некоторых системах им запросто может оказаться root. Проблема известная, но Сакконе пошел чуть дальше.
Во-первых, он использовал тот факт, что при использовании npm'шной версионной системы SemVer и подключении к своему проекту сторонних модулей далеко не все разработчики фиксируют их версии (ведь так удобно автоматически получить новую функциональность/исправление ошибок, когда автор модуля его обновит).
Во-вторых, многие разработчики сами являются авторами модулей, выложенных в npm, причем в npm не предусмотрен автоматический выход - кто залогинился, тот так и остается авторизованным пользователем, пока явно не выйдет. Так что подхваченный скрипт запросто может что-то сделать от имени этого пользователя.
Все это, усугубленное централизованностью npm, позволило создать демонстрационный модуль, который по сути является npm-червем. Как только его установит разработчик другого модуля, дальше он начнет распространяться как снежный ком по всем проектам, выставившим зависимость на модуль первой жертвы, от них дальше, дальше и дальше.
Администрация npm уже заявила, что не располагает ресурсами, достаточными для проверки всех модулей, и возлагает свои надежды на сообщество.