The OpenNET Project / Index page

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

Метод подстановки троянского кода, невидимого при просмотре в git diff

18.12.2017 12:53

Опубликован метод скрытия частей кода при выводе изменений при помощи команды "git diff", которая часто используется для изучения присылаемых патчей. Добавив в код escape-последовательность "[8m" атакующий может сделать невидимой часть при выводе на экран с использованием терминала, поддерживающего команды VT100.

Проблемы также выявлены в команде "git rm", которая выводит имя удаляемого файла с обработкой escape-последовательностей в нём. Например, можно создать файл при помощи команды touch `echo -e "\e[45mTest\e[0m"` и добавить его в git-репозиторий. Escape-последовательность будет обработана при удаления данного файла через "git rm". Аналогично можно добиться обработки escape-последовательностей в git-branch при их подстановке в имена файлов в каталоге .git/refs/heads (touch `echo -e ".git/refs/heads/\e[45mTest\e[0m"`).

  1. Главная ссылка к новости (https://www.twistlock.com/2017...)
  2. OpenNews: Неявные свойства языков программирования, которые могут привести к уязвимостям
  3. OpenNews: Концепция атаки по подмене копируемого в терминал текста с сайта
  4. OpenNews: Использование JavaScript для атаки через манипуляцию с содержимым буфера обмена
  5. OpenNews: Уязвимость в реализации автодополнения ввода в Bash
  6. OpenNews: Необычная уязвимость в Apache mod_rewrite
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47759-git
Ключевые слова: git, escape
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 12:59, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –36 +/
    Ждем гитлаб/гитхаб-хейтеров, доказывающих, что "тирминал ита крута, веб ненужен вспомнити лефтпад"
     
     
  • 2.18, KonstantinB (ok), 15:27, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +5 +/
    А когда в каком-нибудь гитлабе найдут похожий метод, эксплуатируемый через HTML или какой-нибудь RTL unicode, кто кому чего будет доказывать? :-)

    Escape-последовательности надо экранировать точно так же, как это надо делать в вебе с HTML.

    Но, конечно, нынешние разработчики гита удивляют.

    Цитата:
    https://www.twistlock.com/2017/12/13/hiding-content-git-escape-sequence-twistl

    Git’s developers take

    I sent an advisory to git’s security mailing list, listing all the issues I presented above. The initial responses I received were skeptical. One of the assertion suggested that the same problem can be reproduced with cat, so it is not git’s problem.

    Ага, а то, что браузер интерпретирует HTML, это не проблема гитлаба? :-)

     
     
  • 3.42, pavlinux (ok), 21:18, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Найди 10 отличий https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/?id=6b
     
     
  • 4.44, Аноним (-), 22:00, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/?id=6b
     
     
  • 5.57, pavlinux (ok), 01:46, 20/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Через git diff повтори
     
  • 4.60, Иван (??), 06:36, 20/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    пробел же!
     
     
  • 5.75, pavlinux (ok), 23:02, 26/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > пробел же!

    8 спереди или 4 сзади? :)

     
  • 2.19, Аноним (-), 15:28, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ждем гитлаб/гитхаб-хейтеров, доказывающих, что "тирминал ита крута, веб ненужен вспомнити лефтпад"

    Смотрю книгу, вижу фигу.

     
  • 2.41, Вареник (?), 21:16, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Веб, IDE и консоль - дополняют друг друга.

    Обсуждать код лучше с веб-ссылкой, кодить в IDE, перекидывать коммиты между ветками - в консоли.
    Только глупые люди противопоставляют мягкое светлому.

     
     
  • 3.73, Xasd (ok), 14:13, 21/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > кодить в IDE

    особенно в ситуации когда эта IDE не понимает часть синтаксических конструкций (например новые) в этом коде, да? и приходится вместо того чтобы писать так как тебе хочится -- писать то что лишь умеет эта IDE

     

  • 1.2, Ю.Т. (?), 13:02, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Кстати, о названиях  и шуточках (https://www.thefreedictionary.com/git)
     
     
  • 2.3, щи (?), 13:06, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Так Линус говорил, что не умеет выбирать названия.
     
  • 2.8, Iaaa (ok), 13:46, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Тут лучше: https://www.urbandictionary.com/define.php?term=Git
     

  • 1.9, Аноним (-), 13:50, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    У меня в терминале сделал текст чёрным, но у меня фон прозрачный и всё было видно. Палево.
     
  • 1.10, fr0ster (??), 14:14, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    То есть diff укажет
    -     * Must always return a value
    +     * Must always return a value
    и никому это не покажется странным?
     
     
  • 2.12, Аноним (-), 14:21, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Почему? Строка "* Must always return a value" добавлена целиком.
     
     
  • 3.13, fr0ster (??), 14:31, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Почему? Строка "* Must always return a value" добавлена целиком.

    Ну например потому, что абсолютно одинаковая строка не вывелась бы так.

     
     
  • 4.15, нэту (?), 14:54, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    а если поменять немного каммент, то сильно легче станет?
     
     
  • 5.16, fr0ster (??), 15:09, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а если поменять немного каммент, то сильно легче станет?

    Так да, просмотреть станет легче.
    С другой стороны простынь прямо в консоли смотреть неудобно, а вывод через less покажет строки полностью.


     
     
  • 6.17, fr0ster (??), 15:10, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> а если поменять немного каммент, то сильно легче станет?
    > Так да, просмотреть станет легче.

    В смысле пропустить такие строки станет легче.

     
  • 4.20, Аноним (-), 15:34, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Одинаковая по отношению к чему? В примере новая строка добавляется, а не старая меняется.
     
  • 2.25, Гоги (?), 16:01, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > То есть diff укажет
    > -     * Must always return a value
    > +     * Must always return a value
    > и никому это не покажется странным?

    Ты такой внимательный, что читаешь каждый символ? Попробуй попринимать десяток патчей в час - глаза вывалятся!

     
     
  • 3.35, Аноним (-), 19:28, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Ну можно же сканер настроить на отлов подобных несуразностей.
    В конце концов в *никсах всегда гордились, что возможностей автоматизации вагон и маленькая тележка, а тут значит "бери больше кидай дальше"?
     
     
  • 4.47, Аноним (-), 00:45, 19/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну теперь вот мы все в курсе и все настроим! Я у себя уже сделал. А ты?
     
  • 2.29, Аноним (-), 16:49, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    от изменения конца строки будет похожая запись, могут пропустить не глядя
     
     
  • 3.38, Аноним (-), 20:50, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Во вменяемых проектах за изменение конца строки делают аяй.
     
  • 2.46, Ordu (ok), 00:05, 19/12/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ты консольным браузером, что ли пользуешься, и не видишь картинок?

    Там нарисован diff, который добавляет комментарий. Вот не было комментария в сорце, а diff его добавил вместе со строчкой return 0. Случай несколько надуманный, но вообще патчи добавляющие в код комментарии попадаются довольно часто. Иногда они делают это ради добавления комментариев к существующему коду, иногда эти комментарии сопровождают добавляемый этим же патчем код.

    > и никому это не покажется странным?

    Любой необоснованный коммит, который делает непонятно что, покажется странным. Поэтому, естественно, что при реальном использовании коммит должен иметь видимое назначение, понятное тому, кто принимает патч, и более того, тот кто принимает патч должен согласиться с необходимостью такого патча.

    Практическое использование сложно по другой причине. В ядро, например, патчи засылаются через почту, а почтовик может не обратывать esc-последовательности как esc-последовательности. На github пуллреквесты отрисовываются через html, и там лишние esc-последовательности тоже будут видны. Тут нужен довольно специфичный воркфлоу, когда работа с git идёт именно в терминале, патчи пересылаются через git pull/push (или ещё каким способом, при котором пересылаемые патчи не видны в процессе пересылки между репозиториями), и при этом не используются дополнительные обёртки, типа gitk, github, magit, и прочих.

     

  • 1.21, Аноним (-), 15:45, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Так и запишем: не принимать патчи из непроверенных источников
     
  • 1.22, Аноним (-), 15:49, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Остроумно, но едва ли "defang" этих escape-последовательностей при выводе на терминал может составить проблему.
     
  • 1.27, Аноним (-), 16:08, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    Для некоторых станут открытием закладки в компиляторе. Компелируйте компилятор, параноики.
     
     
  • 2.34, Аноним (-), 18:43, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Чтобы они стали для нас открытием, надо, чтобы ты показал нам реальные их примеры. А про теоретическую возможность уже не первый десяток трындят.
     
     
  • 3.43, Борщдрайвен бигдата (?), 21:39, 18/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Уж не помню где, но я читал морозную историю (перевод) именно о закладке в компиляторе, найденной случайно в ходе доработки какой-то программы сотрудником в каком-то университете.
    Увлекательная вещь, но я ее никак не могу найти.
     

  • 1.37, L29Ah (ok), 19:52, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В Gentoo не воспроизводится.
     
     
  • 2.74, pripolz (?), 01:52, 23/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >  В Gentoo не воспроизводится.

    В дебиан стейбл тоже. Может это от програмки-терминала зависит?

     

  • 1.45, Аноним (-), 23:04, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –10 +/
    >с использованием терминала, поддерживающего команды VT100.

    кто им пользуется? Я использую только графические фронтенлы для диффов вроде meld, tortoisegit и visual studio.

     
     
  • 2.51, nobody (??), 11:44, 19/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Командное окружение гита этим и замечательно, что позволяет комфортно обходиться без GUI искаропки, в отличие от, например svn. Поставил в своё время TortoiseGit и так им и не пользовался. А вот без TortoiseSVN жить весьма уныло
     
     
  • 3.59, pavlinux (ok), 01:50, 20/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >  в отличие от, например svn.

    За зарплату оно всё прекрасно работает, и свн, гит, меркурий, бла-бла-блах...

     
  • 2.58, pavlinux (ok), 01:48, 20/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>с использованием терминала, поддерживающего команды VT100.
    > кто им пользуется?

    Явно не мышкаклацкеры :)

     

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



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

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