В клиенте GitHub для macOS до версии 1.3.4 beta 1 нашлась возможность вызвать удаленное выполнение произвольных команд простым переходом по специально сформированной ссылке. В этой статье я расскажу о причинах возникновения и способах эксплуатации этой уязвимости.

Баг нашел Андре Баптиста (André Baptista) в рамках ивента H1-702 2018. Уязвимость заключается в некорректном механизме обработки кастомной URL-схемы x-github-client://, с помощью которой происходит общение с приложением.

 

Тестовый стенд

Так как сегодня рассматриваемая уязвимость работает только в macOS, все манипуляции будут производиться в ней. Я скачал виртуальную машину для VMware с macOS 10.14.1 Mojave на одном всем известном трекере.

Информация о виртуалке с macOS
Информация о виртуалке с macOS

Теперь нужно установить XCode и менеджер пакетов brew.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Разработчики GitHub не предоставляют возможность скачивать старые версии приложения. Поэтому придется компилировать его из исходников. Клонируем репозиторий с десктопным клиентом GitHub и не забываем, что последняя уязвимая версия — 1.3.4 beta 0, ее мы и будем использовать.

$ git clone --depth=1 -b release-1.3.4-beta0 https://github.com/desktop/desktop.git

Клиент разработан на основе фреймворка Electron и написан на TypeScript с использованием React. А это значит, что нам понадобится Node.js с кучей библиотек. Чтобы понять, как скомпилировать приложение, можно заглянуть в файл appveyor.yml. Это конфигурационный файл для сервиса системы непрерывной интеграции (CI) с таким же названием AppVeyor.

/desktop-release-1.3.4-beta0/appveyor.yml
install:
  - cmd: regedit /s script\default-to-tls12-on-appveyor.reg
  - ps: Install-Product node $env:nodejs_version $env:platform
  - git submodule update --init --recursive
  - yarn install --force

Git у нас уже имеется, а вот менеджер пакетов yarn нужно установить с помощью brew.

$ brew install yarn

Он уже идет в комплекте с Node, но имеющаяся версия слишком нова для нашего проекта.

/desktop-release-1.3.4-beta0/appveyor.yml
environment:
  nodejs_version: '8.11'
Установка менеджера пакетов yarn
Установка менеджера пакетов yarn

Поэтому устанавливаем версию из ветки 8.х.

$ brew install node@8

Затем заменяем версию «Ноды» на более старую с помощью команд link/unlink.

$ brew unlink node
$ brew link node@8 --force --overwrite
Даунгрейд версии Node с 11.х до 8.х для корректной компиляции
Даунгрейд версии Node с 11.х до 8.х для корректной компиляции

Все готово для компиляции. Сначала последовательно выполняем команды из раздела install. Это подгрузит все необходимые зависимости и пакеты.

$ git submodule update --init --recursive
$ yarn install --force
Установка зависимостей для компиляции GitHub Desktop
Установка зависимостей для компиляции GitHub Desktop

После этого переключаемся на команды из раздела build_script.

/desktop-release-1.3.4-beta0/appveyor.yml
build_script:
  - yarn lint
  - yarn validate-changelog
  - yarn build:prod

Причем первые две можно пропустить и обойтись только последней.

$ yarn build:prod
Успешная компиляция десктопного приложения GitHub под macOS
Успешная компиляция десктопного приложения GitHub под macOS

Теперь в директории /dist/GitHub Desktop-darwin-x64/GitHub Desktop.app находится готовое приложение. Можно скопировать его в папку Applications и запустить.

Окно About приложения GitHub Desktop для macOS
Окно About приложения GitHub Desktop для macOS

Пройди начальную настройку, и стенд готов.

 

Детали уязвимости

Посмотрим на исходники. Нас интересует, какие протоколы регистрирует приложение.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Крупный провайдер ASP.NET подвергся атаке шифровальщика

Компания SmarterASP.NET, обслуживающая более 440 000 клиентов, поверглась атаке шифровальщ…

2 комментария

  1. Аватар

    mike.wazowsky

    14.01.2019 at 17:31

    «Теперь нужно установить XCode и менеджер пакетов brew.» Ставится не Xcode (IDE), а Xcode Command Line Tools (наиболее использываемы консольные утилиты для разаботчика и компиляторы, включая make, GCC, clang, perl, svn, git, size, strip, strings, libtool, cpp)

  2. Аватар

    zxspec

    04.05.2019 at 15:07

    >>Он уже идет в комплекте с Node
    Yarn в комплекте с новой???

Оставить мнение