Взлом LuaRocks: год спустя обнаружили RCE, которым пользовались всё лето
25 сентября 2026 года команда LuaRocks получила через координацию с CISA сообщение об уязвимости, позволявшей удалённо выполнять код на сервере luarocks.org. Уже на следующий день брешь закрыли, но при разборе выяснилось, что ею успели воспользоваться: с 9 июля по 20 августа злоумышленники несколько раз запускали команды на сервере.
Поскольку атакующий мог исполнять код, всё, к чему имел доступ сервер, считается скомпрометированным. Сайт перенесли на заново собранную машину, а каждый секрет, хранившийся на старом сервере, отозвали и заменили. Признаков того, что уже опубликованные пакеты были изменены, найдено не было.
Суть уязвимости
Файлы rockspec — это код на Lua. При загрузке LuaRocks.org запускает такой файл в ограниченном окружении, чтобы прочитать имя и версию пакета. Однако функция загрузки принимала не только исходный текст, но и предварительно скомпилированный байткод LuaJIT. LuaJIT не проверяет байткод, поэтому специально подготовленный файл мог читать и записывать память за пределами песочницы и выполнять произвольный код внутри веб-сервера. Спровоцировать это мог любой зарегистрированный пользователь. Исправление теперь загружает rockspec только как текст и отвергает байткод.
Что произошло
Атаку вели три специально созданных аккаунта. 9 июля через вредоносные загрузки на сервере выполнялись команды оболочки. 7 августа команды запускали снова, включая попытку открыть удалённый шелл, и опубликовали три вредоносных пакета — bcrcewon, 7e0b94029db0 и 7e0b9402f9c8. 16 и 20 августа через API прошли сотни автоматических попыток эксплуатации. Учётная запись веб-сервера могла получить полные административные права, поэтому предполагается, что атакующий прочитал всё, включая базу данных целиком.
Что было раскрыто
Скомпрометированными считаются имена пользователей, адреса почты и bcrypt-хеши паролей, все API-ключи, секреты двухфакторной аутентификации, токены привязанных аккаунтов GitHub, записи сессий с IP-адресами и данными браузеров, а также учётные данные сторонних сервисов. Всё это уже отозвано или удалено.
Что делать пользователям
Создать новый API-ключ, войти заново, сменить пароль (и везде, где использовался тот же), заново настроить двухфакторную аутентификацию. Особенно важно обновить LuaRocks до версии 3.12 или новее: версии 3.11.1 и старше на LuaJIT или Lua 5.1 исполняют присланный сервером байткод вместо rockspec или манифеста. Тем, кто установил один из трёх вредоносных пакетов, машину следует считать скомпрометированной.
Ежедневное git-зеркало пакетов позволило сверить хранилище с состоянием до атаки: изменений в чужих пакетах, следов закрепления или правок кода сайта не обнаружено. Команда извинилась за то, что уязвимость так долго оставалась незамеченной, и поблагодарила исследователя за сообщение.
Источник: Lobsters
Комментарии
Войдите, чтобы комментировать.