В Emacs снова нашли выполнение кода при открытии файла

· Безопасность
Уязвимость эксплуатирует механизм сокращений символов Emacs Lisp и позволяет запускать произвольный код при открытии любого файла в конфигурации по умолчанию. Затронуты все версии начиная с 28.1.

cover.svg

Эшель Ярон сообщил о новой уязвимости произвольного выполнения кода в редакторе Emacs — спустя полтора года после предыдущей заметки на ту же тему. На этот раз проблема связана с механизмом сокращений символов Emacs Lisp (symbol shorthands), появившимся в Emacs 28.1.

Что происходит

Специально сформированный файл способен запустить произвольный код Emacs Lisp, контролируемый атакующим, сразу при открытии — ещё до того, как вредоносное содержимое будет показано на экране. Особенно неприятно, что эксплойт может нести любой файл, независимо от его имени и расширения, и не требует никаких особых настроек: конфигурация по умолчанию уязвима. Стефан Монье опубликовал proof of concept в баг-трекере Emacs.

Уязвимость затрагивает все версии Emacs начиная с 28.1, включая 31.0.91 — последнюю предварительную сборку Emacs 31 на момент публикации. Ни одна выпущенная версия пока не содержит исправления. CVE запрошен, но ещё не присвоен.

Как защититься

Коммит 8466eb44, попавший 5 августа 2026 года в ветку emacs-31, смягчает проблему: он привязывает read-symbol-shorthands к nil вокруг нескольких рискованных вызовов intern в двух файлах. Правка небольшая и самодостаточная, так что её можно без труда перенести (cherry-pick) в предыдущие версии. Выпускать отдельные обновления безопасности для уже вышедших версий, по словам автора, пока не планируется — вопрос обсуждался в рассылке emacs-devel.

Пользователям Emacs 30 и новее автор предлагает свой пакет trust-manager, который решает проблему более грубо: в недоверенных файлах он полностью отключает сокращения символов. Наконец, приблизить эффект от исправления без пересборки редактора можно небольшим фрагментом в конфигурации, навешивающим advice на vc-find-backend-function и c-compose-keywords-list, чтобы подавить обработку сокращений.

В ветке master проблему устранили фундаментальнее: функции intern и intern-soft больше не обращаются к read-symbol-shorthands, что разрывает опасную связь между сокращениями символов и интернированием. Однако это исправление появится только в Emacs 32.


Источник: Lobsters

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.