Уязвимость в Git, Subversion и Mercurial, допускающая подстановку команд через URL ssh://

2 месяца ago admin 0

Во всех популярных системах управления версиями, поддерживающих обращение к репозиторию через SSH, выявлена уязвимость, позволяющая выполнить любую команду в системе при попытке обработки специально оформленной ссылки на репозиторий с URL «ssh://». Проблема уже устранена в Git 2.14.1-2.7.6 (CVE-2017-1000117), Subversion 1.9.7 (CVE-2017-9800) и Mercurial 4.3 (CVE-2017-1000116), а также в коде GitHub и GitLab. Не исключено, что уязвимость проявляется и в других приложениях, использующих URL «ssh://».

Суть уязвимости сводится к тому, что при обработке URL «ssh://» допускается использование символа «-» вначале имени хоста, что позволяет использовать это имя для передачи опций ssh. Например, указав:

   git clone ssh://-oProxyCommand=gnome-calculator/wat 

в качестве имени хоста при запуске ssh будет передана строка «-oProxyCommand», которая будет обработана как опция. Так как через ssh-опцию ProxyCommand можно вызвать дополнительный обработчик установки соединения с сервером, появляется возможность выполнить любую команду в системе (в примере запускается gnome-calculator). Интересно, что похожая уязвимость (CVE-2004-0489) была устранена в браузере Safari ещё в 2004 году.

В GitHub проблема позволяла организовать выполнение кода через манипуляции с настройками Git LFS. Атака осуществлялась через размещение в репозитории файла .lfsconfig, в котором в качестве пути к LFS-хранилищу применялась конструкция вида «url = ssh://-oProxyCommand=some-command». Метод позволяет организовать выполнение произвольного кода на стороне клиентов, клонировавших репозиторий с подобным файлом при наличии у них плагина Git LFS.


Source: pirates.in.ua