Luau – Fast, small, safe, gradually typed scripting language derived from Lua
Lua_u_
Lua_u_ (строчная u, /ˈlu.aʊ/) — это быстрый, компактный, безопасный, постепенно типизированный встраиваемый язык сценариев, основанный на Lua.
Мотивация
Примерно в 2006 году Roblox начал использовать Lua 5.1 в качестве языка сценариев для игр. Со временем мы значительно развили реализацию и язык: для поддержки растущей сложности игр на платформе Roblox, увеличения размеров команд и написания большого объёма кода (более 1 млн строк к 2020 году) нам пришлось инвестировать в производительность, удобство использования, инструменты языка и ввести постепенную систему типов. Подробнее…
Песочница
Luau ограничивает набор стандартных библиотек, доступных пользователям, и реализует дополнительные функции песочницы для возможности запуска непривилегированного кода (написанного разработчиками игр) вместе с привилегированным кодом (нашим). Это создаёт среду выполнения, отличающуюся от традиционной для Lua. Подробнее…
Совместимость
По возможности Luau стремится быть обратно совместимым с Lua 5.1 и одновременно включает функции из более поздних версий Lua. Однако Luau не является полным надмножеством более поздних версий Lua — мы не всегда согласны с решениями Lua и имеем другие варианты использования и ограничения. Все функции Lua после 5.1, а также их статус поддержки в Luau, документированы здесь.
Синтаксис
Luau синтаксически обратно совместим с Lua 5.1 (код, действительный для Lua 5.1, также действителен для Luau); однако мы расширили язык набором синтаксических функций, делающих его более привычным и эргономичным. Синтаксис описан здесь.
Анализ
Для упрощения написания корректного кода Luau включает набор инструментов анализа, которые могут выявлять распространённые ошибки. Они состоят из линтера и проверки типов, интегрированных в исполняемый файл командной строки luau-analyze. Проверки линтера описаны здесь, а руководство по проверке типов можно найти здесь.
Производительность
В дополнение к полностью кастомному фронтенду, реализующему парсинг, линтинг и проверку типов, среда выполнения Luau включает новый байткод, интерпретатор и компилятор, сильно оптимизированные для производительности. Интерпретатор Luau может конкурировать с интерпретатором LuaJIT в зависимости от программы. Также доступен опциональный компонент для ручной JIT-компиляции на платформах x64 и arm64, который может значительно ускорить определённые программы. Мы продолжаем оптимизировать среду выполнения и переписывать её части для ещё большей эффективности. Хотя наша общая цель — минимизировать время, которое программисты тратят на настройку производительности, некоторые детали о характеристиках производительности предоставлены для любознательных.
Библиотеки
Как язык Luau является полным надмножеством Lua 5.1. Что касается стандартной библиотеки, некоторые функции пришлось удалить из встроенных библиотек, а некоторые — добавить; обратитесь к полной документации для подробностей. Когда Luau встраивается в приложение, сценарии обычно получают доступ к дополнительным функциям библиотек, специфичным для приложения.
© 2025 Roblox.
Комментарии (74)
- Переход на Luau обусловлен системой типов, но язык имеет шероховатости и слабую документацию, а сообщество практически отсутствует.
- Luau значительно сложнее и объёмнее стандартного Lua, что связано с реализацией системы типов и дополнительных возможностей.
- Существуют альтернативные реализации и среды выполнения Luau, такие как Lune, предназначенные для использования вне Roblox.
- Сообщество отмечает проблемы обратной совместимости между различными форками Lua (LuaJIT, Luau, PUC Lua), что создаёт фрагментацию.
- Luau сравнивают с Teal, но они fundamentally разные: Teal — это транспилятор, а Luau — полноценный форк Lua с собственной средой выполнения.
- Разработчики Roblox работают над улучшением поддержки Luau вне своей платформы, включая создание standalone-рантаймов.
- Несмотря на критику, инженерные решения в Luau, особенно в области производительности, оцениваются как впечатляющие.
Comet AI browser can get prompt injected from any site, drain your bank account 🔥 Горячее 💬 Длинная дискуссия
JavaScript отключён.
Включите его или перейдите в поддерживаемый браузер. Список браузеров — в Справке.
Что-то пошло не так.
Попробуйте ещё раз.
⚠️ Расширения, блокирующие трекинг, могут мешать работе сайта. Отключите их и обновите страницу.
Комментарии (184)
- Участники считают, что давать LLM-агенту полный доступ к браузеру — это «смертельный трифекта»: чтение всех вкладок, кук и паролей.
- Основной риск — prompt-injection: любой сайт может внедрить команду, и агент выполнит её, потому что «каждое чтение — это запись в контекст».
- Люди сравнивают это с тем, что Microsoft делала скриншоты, но теперь молчат, когда AI получает plaintext-доступ к банковским данным.
- Единственный «безопасный» сценарий — код в git, где изменения легко откатить; всё остальное (покупки, банкинг, e-mail) считается безумным.
- Итог: без изоляции, sandbox и чёткого разграничения «что можно» агенты становятся идеальным вектором атак, а компании, их выпускающие, — объектом для судебных исков.
How we exploited CodeRabbit: From simple PR to RCE and write access on 1M repos 🔥 Горячее 💬 Длинная дискуссия
CodeRabbit: от PR до RCE и доступа к 1 млн репозиториев
CodeRabbit — самое популярное AI-приложение на GitHub Marketplace (1 млн репозиториев, 5 млн PR). При установке он анализирует каждый PR и оставляет AI-комментарии.
Найденные уязвимости
-
RCE через Markdown-рендеринг
- Внутри контейнеров запускается
markdown-itс плагиномmarkdown-it-katex. - Плагин использует
child_process.execбез фильтрации LaTeX-ввода. - Внедрённый в PR
$\input{/etc/passwd}$запускает произвольные команды.
- Внутри контейнеров запускается
-
Утечка токенов
- Внутри контейнеров доступны переменные окружения:
GITHUB_TOKEN,CODERABBIT_API_KEY,DATABASE_URL. - Чтение
/proc/self/environи~/.netrcпозволило получить токены GitHub, JWT-секреты и строку подключения к PostgreSQL.
- Внутри контейнеров доступны переменные окружения:
-
Доступ к 1 млн репозиториев
- Установленный GitHub-App имеет scope
contents:writeво всех подключённых репозиториях. - С помощью украденного токена можно клонировать/писать в приватные репы, создавать PR, коммиты и релизы.
- Установленный GitHub-App имеет scope
Цепочка атаки
- Создаём PR с вредным LaTeX.
- Получаем RCE в контейнере CodeRabbit.
- Считываем секреты.
- Используем токен GitHub для полного доступа к репозиториям.
Меры защиты
- Переход на изолированные sandbox-среды.
- Отключение опасных LaTeX-функций.
- Минимизация scope GitHub-токенов.
Комментарии (217)
- Исследователи нашли RCE в CodeRabbit: Rubocop запускался в проде без песочницы, позволяя выполнять любой код и получить ключи GitHub-приложения.
- Уязвимость дала доступ на запись к ~1 млн репозиториев; компания утверждает, что «данных клиентов не скомпрометировано», но аудита нет.
- Пользователи критикуют отсутствие прозрачности, грубые ошибки в управлении секретами (ключ в ENV) и чрезмерные права GitHub-приложений.
- Главный вывод: анализаторы кода должны запускаться в изолированных средах без доступа к чувствительным переменным, иначе подобные инциденты неизбежны.