Независимый исследователь из Германии Маркус Фенске (Markus Fenske) рассказал в своем блоге, что недавно ему удалось обнаружить уязвимость в коде GitHub Enterprise. Данная версия GitHub сознана специально для компаний, которым нужна on-premise версия репозитория (то есть версия для локального использования), чтобы строго контролировать доступ к проекту. Изучить код Фенске решил, вдохновившись работой другого исследователя, Оранджа Цая (Orange Tsai), который ранее обнаружил в платформе возможность осуществления SQL-инъекций.
Фенске пишет, что в основе GitHub Enterprise лежит тот же код, что и в основе самого GitHub, и комбинация из двух багов позволила исследователю взломать консоль управления (management console), что в теории вело к удаленному выполнению произвольного кода.
Проблему специалист обнаружил почти сразу, скачав образ GitHub Enterprise VirtualBox. Внутри Фенске нашел Ruby-модуль, который с легкостью взломал и получил доступ к деобфусцированному коду management console. Как оказалось, вместо случайной последовательности для криптографической подписи сессионных cookie использовался статический секрет (static secret). Представители GitHub сообщили, что это произошло по ошибке, и статический секрет предназначался исключительно для тестирования и разработки.
«Если секрет известен, вы можете создать действующую подпись и передать произвольные данные Marshal.load, что приведет к удаленному исполнению кода, — объясняет исследователь. — В отличие от JSON, Marshal “понимает” не только хеши, массивы и так далее, но и Ruby-объекты».
Фенске сообщил разработчикам GitHub о проблеме еще 26 января 2017 года, и уже 31 января ему выплатили вознаграждение в размере 10 000 долларов. Патч для уязвимости так же был представлен в конце января, с релизом GitHub Enterprise 2.8.7. В марте 2017 года компания доплатила Фенске еще 8000 долларов и внесла имя исследователя в «Зал славы» GitHub.