
CVE-2023-37478 демонстрирует, как разница в установке пакетов npm и pnpm может быть использована с помощью специально созданного tar.gz-пакета. В этом репозитории представлена демонстрация.
pnpm vs npmВ этом репозитории показано, как можно использовать разницу между установкой из tarball-архивов с помощью npm и pnpm.
Эксплойт зарегистрирован как CVE-2023-37478.
Сконструированный здесь JavaScript-пакет заявляет, что выводит пользователю приятное сообщение. При установке с помощью npm это действительно так.
Однако тот же пакет можно установить с помощью pnpm, и он выведет грубое сообщение.
Можно представить, как это может быть использовано в более злонамеренных целях.
Старую уязвимую версию pnpm, которая работает с этим эксплойтом, можно найти здесь. Это исправлено в новых версиях pnpm, а исправление можно посмотреть здесь
В exploitative_package_src находится исходный код пакета definitely_benign_package.
Папка bad_version (V0.1) содержит вредоносный код, а good_version (V0.2) — корректный.
Скрипт make_tar.sh собирает tar-пакет таким образом, что плохая версия попадает в tarball перед хорошей.
Для демонстрации переместите или склонируйте собранный definitely_benign_package.tgz в /use_demonstration/ и установите его с помощью npm или pnpm — это можно сократить командой make pnpm/npm (make clean тоже работает после завершения).
После установки запустите скрипт с аффирмациями командой node words_of_affirmation.js.