Google исправила RCE-уязвимость в языке Golang
27 января 2021 года
Специалисты компании Google устранили опасную уязвимость (CVE-2021-3115) удаленного выполнения кода в языке Go (Golang), затрагивающую пользователей Windows, которые выполняют команду go get.
Уязвимость была обнаружена японским исследователем безопасности, использующим псевдоним RyotaK, и связана с тем, как работает процесс компиляции, когда пользователь запускает команду «go get» для получения репозитория.
Как правило, в системах Windows shell-команда ОС, запускаемая пользователем или программой, заставляет оболочку сначала искать двоичный/исполняемый файл, связанный с этой командой, в текущем каталоге, а затем список каталогов, указанный в системной переменной PATH.
Например, если пользователь введет netstat в командной строке Windows, ОС сначала будет искать исполняемый файл netstat.exe, netstat.bat или другой исполняемый файл netstat. в текущем каталоге, который получит приоритет и будет выполнен. Если в текущей папке нет netstat, тогда оболочка Windows будет искать системную утилиту netstat, расположение которой указано в переменной Windows %PATH%.
Из-за рисков безопасности, связанных с этим поведением, разработчики оболочек Unix и Windows PowerShell ранее отказались от этого поведения по умолчанию и сделали так, чтобы предпочтение отдавалось расположениям переменных %PATH% над ненадежным текущим каталогом при выполнении команд.
Таким образом, запуск netstat в PowerShell приведет к запуску системной утилиты netstat, а не локально присутствующего netstat.bat, поскольку PoweShell отдает приоритет поиску двоичного файла по этому имени в каталогах% PATH%.
Для согласованности двоичные файлы Golang имитируют правила Unix и Windows на соответствующих системах. В связи с этим выполнение следующей команды Go приведет к несколько разному поведению.
В Windows локально присутствующий двоичный файл go получит приоритет, тогда как системы Unix сначала будут искать свою переменную $PATH, чтобы увидеть, существует ли двоичный файл go в одном из доверенных мест.
Эта модель приоритета локального, ненадежного каталога над местоположениями PATH также реализуется вспомогательными библиотеками и компиляторами, включенными в Go, такими как cgo (утилита для генерации пакетов Go). Когда cgo компилирует код C в Windows, в конечном итоге исполняемый файл Golang сначала ищет компилятор GCC в ненадежном локальном каталоге.
Хотя большинство этих вызовов происходит безопасным образом, компилятор GCC вызывается функцией Go exec.Command, которая в Windows позволяет Go запускать вредоносный gcc.exe, включенный злоумышленником в свои источники приложений, а не легитимный компилятор GCC.
Источники[править]
Эта статья содержит материалы из статьи «Google исправила RCE-уязвимость в языке Golang», опубликованной на сайте SecurityLab.ru и распространяющейся на условиях лицензии Creative Commons Attribution 3.0 Unported (CC-BY 3.0 Unported). |
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.