Следующая новость
Предыдущая новость

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

11.01.2019 13:32
Ловушка на маковода. Как работает уязвимость в клиенте 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' 
Ловушка на маковода. Как работает уязвимость в клиенте GitHub для macOS
Установка менеджера пакетов yarn

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

$ brew install node@8 

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

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

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

$ git submodule update --init --recursive $ yarn install --force 
Ловушка на маковода. Как работает уязвимость в клиенте GitHub для macOS
Установка зависимостей для компиляции 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 и запустить.

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

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

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

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

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

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

7190 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости