Йдеться про sandbox-середовище з відкритим кодом, яке створила Cohere. Його використовують для запуску ненадійного коду, зокрема того, що генерується великими мовними моделями. Terrarium зазвичай розгортають у вигляді Docker-контейнера, щоб ізолювати виконання таких сценаріїв.
Причина проблеми криється в механізмі обходу ланцюжка прототипів JavaScript у середовищі Pyodide WebAssembly. Саме на ньому побудована робота Terrarium. Через цю особливість зловмисник може обійти обмеження пісочниці та виконувати код уже на рівні хост-процесу Node.js з підвищеними правами.
На практиці це означає, що атакувальник здатен вийти за межі sandbox і запускати системні команди від імені root усередині контейнера. Також з’являється доступ до чутливих файлів, наприклад /etc/passwd, можливість взаємодіяти з іншими сервісами в мережі контейнера і навіть спробувати повністю вирватися за його межі з подальшим підвищенням привілеїв.
Важливий нюанс: для експлуатації потрібен лише локальний доступ до системи. Жодної взаємодії з користувачем або спеціальних прав не потрібно, що значно спрощує атаку.
Terrarium працює на базі Pyodide, що дозволяє запускати Python у браузері та середовищі Node.js зі стандартними пакетами. Сам проєкт має відкритий код, зібрав кілька сотень зірок і десятки форків, але зараз фактично не підтримується. Через це виправлення вразливості під питанням.
Знахідку зробив дослідник безпеки Джеремі Браун, який і повідомив про проблему. За оцінкою фахівців, сама пісочниця не здатна належним чином обмежити доступ до глобальних об’єктів. Це дозволяє коду всередині sandbox взаємодіяти з середовищем хоста і обходити захисні межі.
У CERT/CC радять мінімізувати ризики такими кроками:
-
вимкнути можливість запуску користувацького коду в sandbox, якщо це не критично;
-
ізолювати мережу, щоб обмежити потенційне поширення атаки;
-
використовувати WAF для фільтрації підозрілого трафіку;
-
моніторити активність контейнерів на предмет аномалій;
-
обмежити доступ до контейнерів лише для довірених користувачів;
-
застосовувати безпечні інструменти оркестрації;
-
регулярно оновлювати залежності.
Ситуація ще раз показує просту річ: навіть sandbox, який має ізолювати небезпечний код, сам може стати слабким місцем, якщо його захист реалізований не до кінця.