В клиенте GitHub для macOS до версии 1.3.4 beta 1 нашлась возможность вызвать удаленное выполнение произвольных команд простым переходом по специально сформированной ссылке. В этой статье я расскажу о причинах возникновения и способах эксплуатации этой уязвимости.
Баг нашел Андре Баптиста (André Baptista) в рамках ивента H1-702 2018. Уязвимость заключается в некорректном механизме обработки кастомной URL-схемы x-github-client://
, с помощью которой происходит общение с приложением.
Так как сегодня рассматриваемая уязвимость работает только в macOS, все манипуляции будут производиться в ней. Я скачал виртуальную машину для VMware с macOS 10.14.1 Mojave на одном всем известном трекере.
Теперь нужно установить 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.
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, но имеющаяся версия слишком нова для нашего проекта.
environment: nodejs_version: '8.11'
Поэтому устанавливаем версию из ветки 8.х.
$ brew install node@8
Затем заменяем версию «Ноды» на более старую с помощью команд link/unlink.
$ brew unlink node $ brew link node@8 --force --overwrite
Все готово для компиляции. Сначала последовательно выполняем команды из раздела install
. Это подгрузит все необходимые зависимости и пакеты.
$ git submodule update --init --recursive $ yarn install --force
После этого переключаемся на команды из раздела build_script
.
build_script: - yarn lint - yarn validate-changelog - yarn build:prod
Причем первые две можно пропустить и обойтись только последней.
$ yarn build:prod
Теперь в директории /dist/GitHub Desktop-darwin-x64/GitHub Desktop.app
находится готовое приложение. Можно скопировать его в папку Applications и запустить.
Пройди начальную настройку, и стенд готов.
Посмотрим на исходники. Нас интересует, какие протоколы регистрирует приложение.
Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.
Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке
1 год7190 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости