Новое исследование, проведённое TwistlockLabs, позволило найти несколько серьёзных уязвимостей в популярной системе контроля версий. Они касаются некоторых часто используемых команд, которые не умеют обнаруживать escape-последовательности. Это создаёт благоприятные условия для незаметного внедрения зловредного кода.
Проблемные места
В число «небезопасных» команд входит git-diff, предназначенная для сравнения двух коммитов. Найденная уязвимость позволяет внедрять любой код внутри последовательности «[8m» (режим невидимого текста). При сравнении файлов внесённые таким образом изменения отображаться не будут.
От подобной проблемы страдает и git-log, обозревающий историю коммитов без отображения кода, заключённого в некоторые escape-последовательности.
Уязвимой также оказалась команда git-rm. При создании файла
touch `echo -e "\e[45mTest\e[0m"`
и добавлении его в репозиторий команда git rm *
после произведения операции удаления выведет его полное название.
Аналогично escape-последовательности обрабатываются и git-branch при их подстановке в имена файлов в каталоге. Например:
touch `echo -e ".git/refs/heads/\e[45mTwistlock\e[0m"`
После запуска git branch
в консоли выводится следующее сообщение:
warning: ignoring ref with broken name refs/heads/Twistlock
В этот же момент терминал обрабатывает escape-последовательность.
«Дело не в git»
По словам эксперта, проводившего исследование, письмо с задокументированными проблемами было сразу же отправлено в службу поддержки Git. Пока приходящие ответы скептические: в них говорится, что эти уязвимости не касаются функциональности системы контроля версий, так как встречаются и в других консольных командах, например, cat
. Однако TwistlockLabs уверены в исправимости обнаруженных дыр в безопасности и заявляют, что намерены довести это дело до конца.
Источник: TwistlockLabs