Взлом

Ловушка на маковода. Как работает уязвимость в клиенте GitHub для macOS


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

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

 

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

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

Информация о виртуалке с 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 scriptdefault-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

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

$ brew install node@8 

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

$ brew unlink node $ brew link node@8 --force --overwrite 

Даунгрейд версии Node с 11.х до 8.х для корректной компиляции

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

$ git submodule update --init --recursive $ yarn install --force 

Установка зависимостей для компиляции 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

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

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

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

 

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

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

Источник: xakep.ru

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *