LINUX.ORG.RU

Удаленное выполнение произвольной команды в Emacs

 , , ,


1

4

Ошибка вызвана автоматической обработкой содержимого каталога a .git/, когда он размещён в одном каталоге с открываемым файлом. В этом случае Emacs при открытии файла запускает команды git ls-files и git status, выполняемые в контексте содержимого .git/. Для выполнения кода достаточно открыть в Emacs файл из каталога, в котором имеется подкаталог .git/ с файлом конфигурации config, включающим опцию core.fsmonitor с указанной атакующим командой для запуска.

Сопровождающие GNU Emacs отцы отказались устранять уязвимость, считая, что проблема на стороне git.

>>> Подробности



Проверено: dataman ()
Последнее исправление: hobbit (всего исправлений: 5)

Сопровождающие GNU Emacs отцы отказались устранять уязвимость, указав на то, что это проблема хипсторов из Git.

Прекращай уже жёлтым подкрашивать.

dataman ★★★★★
()
Ответ на: комментарий от CrX

Процитируй, где они указали, что это «проблема хипсторов».

вот же написано:

2026-03-30: Maintainers declined to address the issue, attributing it to Git

borisych ★★★★★
()

Индустрия в критической опасности. Люди боятся редактировать файлы, многие даже не включают компьютеры, а особо грамотные уже носят FFP3 маски.

seiken ★★★★★
()

Ну это действительно проблема гита и того, кто его у себя настраивал. Если прописал себе злобный хук, то сам себе и злобный Буратино.

Я в емаксе нашел ещё одну интересную штуку. Не поленитесь залезть в дерево исходников и найти там директорию exec. В оном каталоге лежит запускатор любого файла без сисколла exec. Нужно это для Андроида в основном, потому как Андроид аппармором или чем там ещё позволяет запускать программы только из определенных мест и уж никак не из домашней директории пользователя. Спрашивается, как емаксу запустить локально наставленные бинари из пакетов, которые пользователь себе понаставил?

А вот как. Далее немного занудной теории. Кто-нибудь задумывался, как GDB запускает процесс для отладки? Ну все знаем: fork/vfork/spawn, далее exec... только exec к нам никогда не вернется... А нам отлаживаться. Поэтому, открываем elf, мапим в память его секции, делаем еще кучу другой черной работы, которое делает ядро внутри exec'a, устанавливаем обработчики сигналов, а потом запускаем на асме писаный загрузчик, который находит в памяти замапленные секции и отдает туда управление. В результате система видит, что запустился какой-то «легальный» бинарь, который может лежать рядом с емаксом по «правильному» пути, но исполнять он будет не пойми что из левого места. Андроид же не запрещает открывать файлы в домашнем каталоге, он их только исполнять запрещает... В общем, хозяйке на заметку, вдруг кому пригодится. Тест под линухом собирается и работает, я проверял.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 3)
Ответ на: комментарий от gns

Ну это действительно проблема гита и того, кто его у себя настраивал. Если прописал себе злобный хук, то сам себе и злобный Буратино.

там другой вектор атаки же:

  • то что нужно запускать указано атакующим в .git/config#core.fsmonitor - оно в архиве все лежит, но жертва этого не видит, потому что директория .git скрыта от глаз жертвы
  • плагин emacs радостно видит .git/config в вышестоящей директории открываемого файла и радостно выполняет то, что указано в core.fsmonitor
borisych ★★★★★
()

Скоро будут писать об уязвимостях в программе make так как она может исполнить вредоносный код.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от Lusine

пусть первый бросит в меня камень.

Ухудшая своё реноме, вынуждаешь форумчан игнорировать тебя. Из-за этого игнорирующие могут пропустить важную для них новость (в трекере).

dataman ★★★★★
()
Ответ на: комментарий от dataman

Из-за этого игнорирующие могут пропустить важную для них новость (в трекере).

Я вообще часто его «новости» игнорирую.

Zhbert ★★★★★
()

Ш Е Р Е Т О ! Вот теперь-то линаксу точно капец!

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Я знаю что нужн сделать. Нужно встроить в make надежную систему безопасности от неправомерного выполнения кода. Пользователь явно должен увидеть элемент интерфейса (кнопку) на экране и нажать ее в подтверждение. Иначе ничего выполняться не будет.

Такое уже введено в бл вебкитГТК, чтоб его разработчики получили тройной перелом рук со смещением.. Почему бы не ввести в make.

По традиции, в линукс модуль для отображения кнопки должен не работать. Ибо небезопасно.

LightDiver ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Без шуток, если make вдург сам собой, без явной команды от пользователя начнёт запускаться, это будет уязвимость.

ugoday ★★★★★
()

Для выполнения кода достаточно открыть в Emacs файл из каталога, в котором имеется подкаталог .git/ с файлом конфигурации config, включающим опцию core.fsmonitor с указанной атакующим командой для запуска

Хакер и солонка

annulen ★★★★★
()
Ответ на: комментарий от borisych

и радостно выполняет

Ты чем читал собственную ссылку? Тебе же буквально полный трейс запуска вывели - чтобы даже совсем тупой понял. Emacs сам не запускает ничего кроме команды git, проблема именно в самом git - вполне логично что разрабы Emacs не хотят править уязвимость в чужом коде.

Собственно и заголовок максимально желтушный - уязвимость не в Emacs, а в git и исправлять это нужно именно в нём.

zabbal ★★★★☆
()
Ответ на: комментарий от gns

Ну это действительно проблема гита и того, кто его у себя настраивал. Если прописал себе злобный хук, то сам себе и злобный Буратино.

При чём тут настройка git? Ты открываешь ЛЮБОЙ каталог, и если в нём оказывается вредоносный .git/config, то все твои ключи уходят в зрительный зал.

byko3y ★★★★
()
Ответ на: комментарий от zabbal

Вообще, есть логика в том, что нельзя запускать git в недоверенном репозитории в принципе. Потому что код Git писан на Си, там число потенциальных уязвимостей безгранично. То есть, даже без .git/config можно считать, что чтение зловредного репозитория = выполнение кода.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Потому что код Git писан на Си, там число потенциальных уязвимостей безгранично

Нечего с криворуких - стрелки на компилятор переводить! Си - делает ровно то, что ему говорят. И если дебил за клавиатурой - написал такой код, который уязвим - так и будет.

DrRulez ★★★★★
()
Ответ на: комментарий от LightDiver

Пользователь явно должен увидеть элемент интерфейса (кнопку) на экране и нажать ее в подтверждение. Иначе ничего выполняться не будет.

Точно. А еще руками прописать адрес в памяти откуда запускать на выполнение :)

DrRulez ★★★★★
()

а это вроде как autorun.inf в windows xp на флешках?

ofp
()
Ответ на: комментарий от byko3y

код Git писан на Си

Это ещё не повод писать на нём жопой с выполнением произвольного кода по-умолчанию без явного подтверждения пользователя.

zabbal ★★★★☆
()
Ответ на: комментарий от borisych

Спасибо, я внимательно прочел буевы по ссылке на хаб. Хорошая подстава, но что с этим делать не есть понятно.

gns ★★★★★
()
Ответ на: комментарий от zabbal

Это ещё не повод писать на нём жопой с выполнением произвольного кода по-умолчанию без явного подтверждения пользователя.

Так это и есть весь смысл Си — выполнять произвольный код при ошибках логики.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Но то же самое относится не только к емаксу. Никто не запретит пользователю самостоятельно руками запустить git status и git ls-files в директории, только что распакованной из архива. Емаксовый magit еще можно пропатчить и предупредить пользователя, что у него в конфиге прописан автозапуск всякого дерьма, а вот от запуска гита руками защиты нет.

gns ★★★★★
()
Ответ на: комментарий от DrRulez

Настройку такую из конфига гита закопать. Остальное можно пока не трогать. :)

gns ★★★★★
()
Ответ на: комментарий от gns

Не, ты не понел. Ещё раз: даже без .git/config размещение вредоносного содержимого в .git/ открывает безграничные возможности для удалённого выполнения кода. Даже если не брать во внимание .git/hook/ — всё равно в коде git найдётся пачка ошибок проверки границ, за счёт которых можно будет записать в память git исполняемый код и выполнить его.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Да я как раз именно это и понял. И дело не только в ошибках проверки границ, этого как раз можно не бояться. А вот привнесение в систему нелокально и не тобой созданного каталога .git со всем его содержимым действительно чревато непредсказуемыми последствиями.

gns ★★★★★
()
Ответ на: комментарий от gns

А вот привнесение в систему нелокально и не тобой созданного каталога .git со всем его содержимым действительно чревато непредсказуемыми последствиями.

Всё, скачивать файлы из интернета запрещено? Ходить только на официально одобренные сайты?

byko3y ★★★★
()
Ответ на: комментарий от Ygor

in 1984, Richard Stallman began work on GNU Emacs, to produce a free software replacement to the proprietary Gosling Emacs. GNU Emacs was initially based on Gosling Emacs, but Stallman’s replacement of its Mocklisp interpreter with a true Lisp interpreter required that nearly all of its code be rewritten.

Lusine
() автор топика
Ответ на: комментарий от byko3y

Всё, скачивать файлы из интернета запрещено? Ходить только на официально одобренные сайты?

Атож! И даже это не защитит тебя от злобных хацкеров!

gns ★★★★★
()
Ответ на: комментарий от zabbal

Ты чем читал собственную ссылку?

Vulnerability identified using Claude

Всё что нужно знать про эту «новость». Пора на ЛОРе тоже вводить политику против нейрослопа.

PS: предлагаю эту тему удалить как 4.2 @dataman

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

А зря, кстати. Если нейросеть нашла неочевидную зависимость, то и спасибо ей.

gns ★★★★★
()
Ответ на: комментарий от byko3y

Ошибки логики они потому так называются что это именно ошибка в логике работы программы - они вообще от языка никак не зависят, не считая формально-верифицируемые языки.

zabbal ★★★★☆
()
Ответ на: комментарий от gns

Андроид же не запрещает открывать файлы в домашнем каталоге, он их только исполнять запрещает

И в чём смысл такого запрета, если он обходится?

vbr ★★★★★
()
Ответ на: комментарий от vbr

У Андроида и спроси :) Вот сам удивляюсь. Пока еще не все знают обходные пути. Ну и, как бы, пускач таки нужно легально установить в системе. А емакс на Андроиде пока экзотика.

gns ★★★★★
()
Ответ на: комментарий от zabbal

Emacs сам не запускает ничего кроме команды git

Иные редакторы спрашивают, доверяешь ли ты содержимому папки, прежде чем запускать команды, потенциально приводящие к исполнению какого-либо кода.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Ну вот и емакс пропатчат, я надеюсь. Вообще неочевидная зависимость. И такие засады много где есть, я полагаю.

gns ★★★★★
()
Ответ на: комментарий от gns

Да, надеюсь. Пока что разработчики и многие комментаторы в этом топике считают, что проблема в гите, а емакс всё делает правильно.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Ну, вообще говоря, засада именно в гите и много где еще. Запускать команды в нелокально созданном и скопированном репозитории руками никто не запрещает. От «побочных эффектов» такого запуска может вылечить только гарантия того, что репа и .git созданы локально. Отвязывать надо конфигурационные каталоги от дерева исходников, но гит так не умеет. Типа он так замыслен.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от gns

Ну, проблема в том, что если я хочу просмотреть проект на предмет закладок, я должен открыть его не в емаксе, проверить, и тогда уже в емаксе. Если бы емакс не делал опасных действий, пока ему не разрешили, можно было бы из него не выходить.

Реально, ситуация та же, что и с autorun.inf в винде. Да, удобно на контенте, которому доверяешь. Дыра, потому что тебя никто не спросил, доверяешь ли, а сразу идёт запуск.

Касается и проектов на CMake, к примеру. Внутри может быть что угодно. Если ваш редактор при открытии проектов сразу конфигурит, не спрашивая, выбрасывайте его на помойку.

unC0Rr ★★★★★
()
Последнее исправление: unC0Rr (всего исправлений: 2)
Ответ на: комментарий от unC0Rr

Ну и это тоже, но емакс не обязан знать, что потенциально опасные действия возможны. Он может предполагать это. Таких неявных шелл-эскейпов наверняка много где понатыкано. И почему только емакс? Какой-нибудь плагин гита для VSCode или NeoVim может делать то же самое.

Этак можно и tar пропатчить на тему не распаковывать из архива директорию .git. Чисто на всякий случай.

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от gns

И почему только емакс? Какой-нибудь плагин гита для VSCode или NeoVim может делать то же самое.

VS Code пробовал пользоваться? При открытии каталога он спрашивает «Считаете ли каталог доверенным?». Если гришь «нет», то у тебя отключаются почти все функции и ты получаешь тупой текстовой редактор.

byko3y ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.