Как раз хотелось бы видеть в ide механизмы защиты наподобие браузерных - отношение к lsp/прочим внешним сервисам как к недоверенному коду и запуск этого кода в изолированном окружении.
А то открыл в ide проект с тем же растом - получил rce в хост окружении.
Нет в Emacs механизмов против этого, потому что это не дыра редактора. Это дыра сборочной системы.
Проблема связана с раскрытием процедурных макросов во время начального анализа кода. Аналогичного эффекта также можно добиться во время компиляции с использованием команды «cargo build».
Редакторы при чём. Не нужно запускать что попало и как попало(и далее на вопросы отвечать - это не мы, это левый код, а то что мы его по своей воле запустили - то не считается). Это крайне несерьёзный подход, особенно спустя 4 года существования уязвимости.
С таким же успехом браузер ни при чём - это всё крафченный хтмл/плохой жс. Тут же ни у кого не возникает мысли «пускай браузер в виртуалке и подключайся туда».
Редакторы не запускают ничего кроме LSP сервера. И вот ему нужна песочница в первую очередь.
Так у тебя ничего работать не будет. Челы же сделали возможность в макросах подключаться к базам не чтобы ssh ключи тырить, а чтобы генерировать код из схемы БД, например.
В принципе очень многие нетривиальные проекты подобное делают.
Ну не запустится у тебя код из редактора. Запустится, когда ты билд запустишь. Ты же явно скачал исходники не только для того, чтобы в IDE их открыть. Всяко будешь собирать.
Так что правильный подход тут один - разрабатывать всё в контейнере. Чтобы там всё было. И сборка, и IDE и LSP-сервер, и всё остальное. Но в то же время чтобы ничего ценного там не было.
Челы же сделали возможность в макросах подключаться к базам не чтобы ssh ключи тырить, а чтобы генерировать код из схемы БД, например.
Шта? Так никто вообще не делает.
Так что правильный подход тут один - разрабатывать всё в контейнере. Чтобы там всё было. И сборка, и IDE и LSP-сервер, и всё остальное. Но в то же время чтобы ничего ценного там не было.
А дальше? Если у тебя зловред в исходниках, что ты будешь защищать-то и как? Макросами тут дело ведь не ограничивается.
А дальше? Если у тебя зловред в исходниках, что ты будешь защищать-то и как? Макросами тут дело ведь не ограничивается.
Исходники иногда просто смотрят, а вовсе не компилируют и тем более не запускают. Например могут смотреть как раз для того, чтобы определить - можно ли запускать или нет.
А дальше? Если у тебя зловред в исходниках, что ты будешь защищать-то и как? Макросами тут дело ведь не ограничивается.
Надо пытаться защищать всё. Окружение разработчика. Окружение CI-билдера. Окружение в тестовом кластере. Окружение в продакшне. Типа - да, зловред проник в код, но он не может стянуть ssh-ключ разработчика, он не может вытащить ничего из CI-билда, и даже если в прод попадёт - будет скомпрометирован только конкретный контейнер с этим сервисом, из которого до чего-то ценного ещё надо добраться.
Ну или вообще ничего не защищать и надеяться на то, что ничего плохого не случится. А если и случится, то не критично плохое. Как в основном все и делают в общем-то.
Так что правильный подход тут один - разрабатывать всё в контейнере. Чтобы там всё было. И сборка, и IDE и LSP-сервер, и всё остальное. Но в то же время чтобы ничего ценного там не было.
Ну да, только не разрабатывать, а пускать всё в контейнерах. Тоже не особо хорошо, но хотя бы не настолько дыряво.
Нет, именно разрабатывать. См. dev containers. Популярная тема. Это больше для удобства разворачивания окружения сделано, но и для безопасности тоже полезно.
Ну есть, то есть, но буквально недавно закрывали очередную дырку с оргмодом
CVE-2024-53920: Versions before GNU Emacs 30.1 are vulnerable to arbitrary code execution when a user performs code completion on untrusted Emacs Lisp source, triggering unsafe Lisp macro expansion.
CVE-2024-39331: Emacs before version 29.4 contains a code injection vulnerability in Org mode's org-link-expand-abbrev function, which improperly expands links specifying unsafe functions.
CVE-2024-30202: Versions before Emacs 29.3 are affected by this vulnerability, allowing arbitrary Lisp code evaluation when enabling Org mode for a file due to the mode trusting file content by default
Вы не понимаете, это другое! Я только насчёт «читает dir-locals и исполняет код» отвечал. А CVE да, бывают, тут уж ничего не поделаешь, только emacs целиком на rust переписывать.
Они открывают недоверенный проект и ты можешь его почитать. Они скрипты из него не запускают и конфиги не применяют. Когда убедишься, что все ок можешь обратно включить, ибо в этом режиме работает совсем куций функционал иде.
Оно ещё и включается заново при обновлениях(qtcreator). Ладно ещё по дефолту врублено, но я отключал где-то летом когда устанавливал. Сейчас снова включилось.
Меня кстати очень напрягают штуки вроде FetchContent и инструкции, говорящие его использовать: https://wikis.khronos.org/opengl/OpenGL_Loading_Library Официальные бжлин инструкции на сайтах хроноса Особенно вызывает страх, когда конфигурация подвисла и появился какой-то сетевой трафик. Первый раз, когда я это увидел - серьёзно подумал, что в симейклисты пихнули ВИРУС А суть одна - система сборки начинает заниматься чужими задачами То, что система сборки может выполнять команды - нормально. Но вот, может ли API запрос к системе сборки на получение, например, информации о таргетах что-то вызывать уже большой вопрос. С одной стороны он должен только парсить. С другой стороны, доступность таргетов тоже может определяться сторонними командами Впрочем, в случае cmake этот вопрос решается наличием CMakeCache. Конфигурация определяет таргеты, вызов конфигурации уже может и команды выполнять (но качать зависимости не должен конечно же, тем более молча без предупреждения), но остальные вызовы могут только читать кэш и создавать файлы в build
Кекеке. Я тут как-то озаботился анальным огораживанием процессов после того как меня через RCE в телеге поломали. Написал мучалку для процессов которая через ld_preload, seccomp и защищённый child process жёстко фаерволит приложения. В том числе по dbus. Так вот при попытке собрать ёкту выяснилось что она качает бинари из интернета, и они падают хотя точно такие же системные мое насилие переживают. И когда я стал дебагать их понял что там антиотладка. А программы типа грепа и авка. А вот оказывается как оно бывает
И когда я стал дебагать их понял что там антиотладка. А программы типа грепа и авка. А вот оказывается как оно бывает
Вангую, что они линкуются с какой-то проприетарной so-шкой, в которой стоит антиотладка. Я такое поведение встречал у либы Verimatix, там достаточно загрузить её в процесс, и любая попытка отладки всё роняет. Но зачем в греп и авк грузить какой-то дрм, ума не приложу.
Я бы и не пользовался, но этот вариант всё менее и менее реалистичен. Раст куски насирают везде, до куда руки дотянутся. А когда ты продвигаешься госухой и админ-ресурсом, дотянуться ты можешь практически куда угодно.
да хрен его знает. я офигел вообще от того что йокта вообще эти бинари тянет. это то что можно найти в любом линуксе если нет пожаловаться. но нет, мы будем качать бинари и выполнять их. а тут еще и такое интересное поведение