The OpenNET Project / Index page

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

Уязвимость в GNOME Evince, позволяющая выполнить код при построении миниатюр

14.07.2017 20:15

В поставляемом в составе GNOME просмотрщике документов Evince выявлена уязвимость (CVE-2017-1000083), которая может привести к выполнению кода злоумышленника при открытии специально оформленного файла в формате CBT (используется для комиксов). Проблема вызвана ошибкой в реализации обработчика comic book, входящего в состав evince. Уязвимость также проявляется в Atril (форк Evince, развиваемый проектом MATE) и Xreader (форк Atril от проекта Linux Mint).

Особую опасность представляет то, что уязвимость может быть эксплуатирована без явного открытия файлов пользователем - в процессе автоматического построения пиктограмм с эскизами для новых файлов, т.е. для эксплуатации достаточно просмотреть список файлов в файловом менеджере или вставить носитель. Более того, можно организовать загрузку вредоносного файла и запуск evince-thumbnailer незаметно от пользователя при открытии специально оформленной web-страницы в браузерах Chrome и Epiphany. Проблему усугубляет то, что evince-thumbnailer запускается без применения sandbox-изоляции.

CBT-файл представляет собой tar-архив, в котором размещена упорядоченная коллекция изображений. В процессе просмотра комиксов для извлечения каждого изображения в Evince запускается команда вида "tar -xOf $archive $filename". Имена файлов перед запуском экранируются кавычками. Атакующий может поместить в архив картинку с именем, начинающимся с символов "--" и при запуске tar для извлечения данного файла имя этого файла будет обработано как опция командной строки. Таким образом, поместив в архив файл с именем "--checkpoint-action=exec=bash -c 'touch ~/covfefe.evince;'.jpg", можно добиться выполнения команды touch. По аналогии можно организовать выполнение любого кода на shell.

Разработчики GNOME уже выпустили патчи для веток gnome-3-20, gnome-3-22 и gnome-3-24. Уязвимость пока остаётся неисправленной в Debian, RHEL и FreeBSD. Разработчики SUSE сформировали обновление для Tumbleweed, SLE12, SLE12 SP2, openSUSE Leap 42.2 и 42.3. Обновления также уже выпущены для Ubuntu и Fedora Linux. В качестве обходного пути защиты рекомендуется временно отключить evince-thumbnailer (удалить /usr/share/thumbnailers/evince.thumbnailer) и не открывать непроверенные файлы в формате CBT.

  1. Главная ссылка к новости (https://bugzilla.gnome.org/sho...)
  2. OpenNews: Уязвимость в ImageMagick, позволившая получить доступ к чужим вложениям в почте Yahoo
  3. OpenNews: Угроза безопасности из-за автоматической обработки мультимедийных файлов
  4. OpenNews: Атака на Linux-системы через запуск кода при вставке USB-накопителя
  5. OpenNews: В FFmpeg устранена уязвимость, которая может привести к утечке локальных файлов
  6. OpenNews: Уязвимость, позволяющая запустить код при копировании файла на рабочий стол
Лицензия: CC-BY
Тип: Проблемы безопасности
Короткая ссылка: https://opennet.ru/46854-evince
Ключевые слова: evince, gnome
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (54) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (-), 23:36, 14/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Опыт ImageMagick ничему не учит?
     
  • 1.3, Аноним (-), 00:04, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >$archive $filename

    Mendel Cooper их уже не спасет.

     
  • 1.4, Аноним (-), 00:15, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прикольный патч. Не осилили исправить и просто выпилили поддержку формата.
     
     
  • 2.6, Аноним (-), 00:31, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А как исправить-то? Судя по ману, у tar'а нет ключа конца опций (--).
     
     
  • 3.7, pkunk (ok), 00:35, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    http://libarchive.org/
     
     
  • 4.9, Аноним (-), 00:45, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > http://libarchive.org/

    https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=libarchive
    18 дыр только за прошлый год.

     
  • 3.8, Аноним (-), 00:41, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > А как исправить-то? Судя по ману, у tar'а нет ключа конца опций (--).

    Зато есть, например, опции -T и --null. Почему не скормить ему имя файла через пайп?

     
  • 3.18, Анонимный Алкоголик (??), 08:17, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А как исправить-то? Судя по ману, у tar'а нет ключа конца опций
    > (--).

    Есть есть...

     
     
  • 4.27, Аноним (-), 10:02, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    У кого есть? У GNU tar? У BSD tar? Или ещё у какой-то из множества реализаций?
     
  • 3.62, Anonim (??), 10:23, 18/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    tar ... < inputfile > outputfile
     
  • 2.25, Вы забыли заполнить поле Name (?), 09:27, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    И правильно сделали. Это просмоторщик, а не архиватор.
     
  • 2.26, llolik (ok), 09:51, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Ну обычно hot-fix так и делают. Проще временно отключить фичу, если она некритична и фикс нужен серьёзный, и сделать нормальный патч, чем сразу кидаться и патчить, рискуя наделать других глюков.
     

  • 1.5, Аноним (-), 00:27, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > для извлечения каждого изображения в Evince запускается команда "tar -xOf $archive $filename"

    Oчередная победа святого юниксвея.

     
     
  • 2.10, Аноним (-), 01:34, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Слишком толсто.
     
     
  • 3.11, Ordu (ok), 05:34, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Почему же Уж сколько раз твердили миру, что все эти system 3 до добра не довод... большой текст свёрнут, показать
     
     
  • 4.12, Аноним (-), 06:39, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > не позволяют пересмотреть ситуацию и придумать лучший

    Так и нельзя придумать ничего лучше.

     
     
  • 5.13, Ordu (ok), 06:44, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Угу. Unix Way пора переименовать в Unix Dead End. Развиваться больше некуда. Разве что рендеринг шрифтов сделать искаропки.
     
     
  • 6.38, Аноним (-), 12:56, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Не знаю как на счёт дальнейшего развития, но за dead end (тупик) плюсанул.
     
  • 4.14, Аноним (-), 07:13, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > что все эти system(3)

    По умолчанию им никто и не пользуется, скажу тебе по секрету, это даже не в стандартах С. Используют ядерные fork(), posix_spawn(), clone(), но никак не system().

     
     
  • 5.16, Ordu (ok), 07:54, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> что все эти system(3)
    > По умолчанию им никто и не пользуется, скажу тебе по секрету, это
    > даже не в стандартах С. Используют ядерные fork(), posix_spawn(), clone(), но
    > никак не system().

    Ну, во-первых, наверное, всё же не столько этот список функций важен в данном контексте, а таки execve? Ведь именно криво подготовленные аргументы для execve создают уязвимости?

    А, во-вторых, какая разница, что именно они используют? Что бы это ни было, оно ничего не понимает в аргументах командной строки и позволяет программисту исподтишка совершать невероятные глупости.

     
     
  • 6.21, Аноним (-), 08:32, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А может ты почитаешь, перед тем как глупости молоть execve executes the pro... большой текст свёрнут, показать
     
     
  • 7.41, Аноним (-), 13:22, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Абсолютно разные вызовы, делают абсолютно разное.

    Ну и зачем же _ты_ их сюда приплёл? В любом случае, так или иначе, запуск происходит через вызов execve. Хоть system() используй, хоть fork()+exec*(), хоть posix_spawn().

     
  • 6.35, Аноним (-), 11:39, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А, во-вторых, какая разница, что именно они используют? Что бы это ни
    > было, оно ничего не понимает в аргументах командной строки и позволяет
    > программисту исподтишка совершать невероятные глупости.

    Угу, только проблема не в этом, а в том, как tar по сугубо историческим причинам обрабатывает свои аргументы. Перепиливали-перепиливали его, да недоперепилили. Из последней версии POSIX его вместе с прочими допотопными архиваторами, кстати, вообще выкинули, заменив на pax.

     
  • 5.20, Анонимный Алкоголик (??), 08:28, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> что все эти system(3)
    > По умолчанию им никто и не пользуется, скажу тебе по секрету, это
    > даже не в стандартах С. Используют ядерные fork(), posix_spawn(), clone(), но
    > никак не system().

    У win кстати метод в стиле system...

     
     
  • 6.22, Аноним (-), 08:33, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > У win кстати метод в стиле system...

    Потому что NT следует POSIX, внезапно, да?

     
  • 6.23, Аноним (-), 08:35, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    system(), если что, нестандартная функция. Ну так, на будущее.
     
     
  • 7.32, Аноним (-), 11:26, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Функция стандартной библиотеки C, прописанная в стандарте ISO/IEC, нестандартна? Вот это новости!
     
  • 5.34, Аноним (-), 11:35, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> что все эти system(3)
    > По умолчанию им никто и не пользуется, скажу тебе по секрету, это
    > даже не в стандартах С.

    Вот как раз system(3) — в стандарте C.

    > Используют ядерные fork(), posix_spawn(), clone(), но
    > никак не system().

    А fork() и posix_spawn() есть только в POSIX. clone() же вообще нестандартная и непереносимая штука.

     
  • 4.15, Аноним (-), 07:17, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > тут ещё C гадит как язык: на нём, я боюсь, не получится действительно красивого API -- то что я выше написал можно через препроцессор раскрыть и получить результат, но там могут начаться проблемы с тем, как макрос или код им сгенерённый определят была ли какая-то опция упомянута или нет: в C ведь нет ни хаскельного Maybe, ни rust'ового Option. А если не на C писать -- дык не юниксвейно же: юниксвей признаёт только C'шный взгляд на API/ABI со всеми их ограничениями

    Ты ещё скажи, что у asm сплошные ограничения. Ограничения только в твоей глупой голове и твоих питонах, кстати, тоже.

     
     
  • 5.17, Ordu (ok), 07:55, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> тут ещё C гадит как язык: на нём, я боюсь, не получится действительно красивого API -- то что я выше написал можно через препроцессор раскрыть и получить результат, но там могут начаться проблемы с тем, как макрос или код им сгенерённый определят была ли какая-то опция упомянута или нет: в C ведь нет ни хаскельного Maybe, ни rust'ового Option. А если не на C писать -- дык не юниксвейно же: юниксвей признаёт только C'шный взгляд на API/ABI со всеми их ограничениями
    > Ты ещё скажи, что у asm сплошные ограничения. Ограничения только в твоей
    > глупой голове и твоих питонах, кстати, тоже.

    С асмом связываться без хорошего препроцессора можно только программируя микроконтроллеры. А если взять хороший препроцессор к асму, то получится что-нибудь в стиле rust.

     
     
  • 6.19, Аноним (-), 08:19, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > что-нибудь в стиле rust.

    Ржавчина ржавая с самого начала, гарбедж коллектор, уродливый синтаксис, и "momory safety" только за счёт того, что убрали указатели? Не смешите мои мокасины. Чудес не бывает, всё равно, если писать криво, будут уязвимости даже в Java. Пока что язык новый, поэтому сообщений об узявимостях нет, да и используют его 1.5 проекта. Как станет таким же популярным как С++, сразу куча уязвимостей, недоработок в архитектуре вылезет. А потом, года через два, объявят, что Rust устарел и мы пишем новый Безопасный(C)(TM) язык программирования!

    В любом случае, уязвимости в SoC никто не отменял. Один IME чего стоит.

     
     
  • 7.42, Аноним (-), 13:26, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >> rust.
    > гарбедж коллектор
    > убрали указатели

    Шо?

     
  • 7.44, Anonim (??), 13:55, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Ржавчина ржавая с самого начала, гарбедж коллектор, уродливый синтаксис, и "momory safety" только за счёт того, что убрали указатели?

    Совсем упоролись эти жабоскриптчики.
    В ржавом сборщик мусора ещё в самых ранних альфа версиях выпилили. А указатели никто не убирал.

     
  • 5.50, Аноним (-), 19:07, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ты ещё скажи, что у asm сплошные ограничения. Ограничения только в твоей
    > глупой голове и твоих питонах, кстати, тоже.

    Ну, я скажу.
    А ты, как эксперт опеннета по компиляторам и ассемблерам, расскажи незнающим, как ты на _практике_ будешь в асме колбэки на основе замыканий или генерики делать.
    И почему во всех сохранившихся диалектах асма, которые не задумывались как бэкэнд, можно целую кучу высокоуровневых вещей найти, впрлоть до макросов?

     
  • 4.39, freehck (ok), 13:05, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > и пускай библиотека консультируется с базой данных команд и соображает как раскрыть макрос run_program

    ordu, проблема в том, что базы terminfo создать вообще говоря возможно: ты выбираешь конечное число наиболее распространённых терминалов, обеспечиваешь к ним унифицированный интерфейс, а затем не спеша добавляешь менее распространённые.

    В случае же с базой всех возможных команд, это уже задача принципиально другого уровня:
    Во-первых, необходимо регистрировать каждую команду в системе при установке, кто должен это делать? Разработчик программы? Мейнтейнер?
    Во-вторых, необходимо перед вызовом каждой программы проверять корректность её аргументов по базе, и не давать ей запуститься, если параметры не правильные. И это необходимо в рантайме, хотя бы потому, что существуют языки shell. База будет большой. Сильно увеличится время запуска.
    В-третьих, даже если написать типизированный shell с выводом типов по хиндли-милнеру, он будет конечно безопаснее, но пользоваться им будет крайне неудобно. Почему? Да хотя бы потому что 100500 программ заточены под возврат ошибки не в виде ocaml-овских option или result, но через возврат int-а, и нам придётся все вызовы оборачивать во что-то эдакое.
    В-четвёртых, что вы с этой вашей базой будете делать с программами, в которых аргументы представляют собой язык? В аргументах которых можно задавать другие команды? Ну тот же "bash -c <command>", тот же "find ... -exec <command>"? Это ж пипец, предусмотреть все случаи.
    В-пятых, не все команды принимают аргументы, следуя рекомендациям posix. tar, unrar, например... Как эти программы в базу вносить?

    Вы предлагаете создать базу программ, но это лишь способ перенести проверку с программы на какой-то внешний механизм. Спрашивается, зачем? При разработке Unix долго думали, как это сделать, и как видите, оставили это на усмотрение разработчиков. И это самый правильный путь, потому что программ великое множество, и список их постоянно пополняется, так что за всеми не уследить.

     
     
  • 5.43, Crazy Alex (ok), 13:27, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Все эти проблемы возникают, если пытаться покрыть абсолютно все потребности всего софта. Если же ограничиться конкретным набором (описанным в POSIX или Singe Unix, например) - всё проще, и это покроет большой процент реального использования. Для остального - ругающиеся линтеры и соответствующие стандарты качества, и подобные баги будут вытеснены куда=то на обочину цивилизованного программирования.
    Для find и подобных определить отдельный "выхываемый" аргумент - тоже можно.

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

     
  • 5.48, Ordu (ok), 18:14, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для начала разработчик программы Со временем мейнтейнеры дистрибутивов начнут п... большой текст свёрнут, показать
     
  • 3.37, Аноним (-), 12:18, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я тебе объясню на пальцах что ты думило
     
  • 2.29, Нанобот (ok), 10:23, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Не в бровь, а в глаз!
     

  • 1.24, Аноним (-), 08:38, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    для манжары никаких апдэйтов тоже не приходило.
     
  • 1.28, Нанобот (ok), 10:22, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    2017й год на дворе, а в линуксе при просмотре сайтов exec используют. И эти люди потом ещё катят бочку на Винду...
     
     
  • 2.61, Аноним (-), 23:45, 17/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    2017й год на дворе, а в винде обновление офисного пакета требует перезагрузки всей системы. И эти люди потом ещё катят бочку на Линукс...
     

  • 1.30, Аноним (-), 11:02, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И что же мешает всю эту дрянь запускать под ограничивающим профилем AppArmor или SELinux?
     
     
  • 2.40, soarin (ok), 13:10, 15/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Очень просто AppArmor и SELinux направлены на серверное применение.
    Отлаживать их работу с десктопным софтом никому особо не охота.
     

  • 1.49, Аноним (-), 18:27, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Rust не учит жизни.
     
  • 1.51, Аноним (-), 21:49, 15/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Гномоящеры как всегда лохонулись на пустом месте. Проблемы mplayer никого не учат, все кругом слепые? Тот же smplayer до сих пор парсит регулярками выхлоп работы mplayer позорище. Ладно хоть существует libmpv.
     
     
  • 2.53, Аноним (-), 02:53, 16/07/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Возьми и научи их как правильно. Некому контрибьютить же, от того имеем что имеем.
     
     
  • 3.55, Аноним (-), 09:47, 16/07/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Не-не, не надо портить smplayer! Пусть своё напишет.
     
     
  • 4.60, Аноним (-), 19:08, 16/07/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Никто не запрещает форкать же.

    Да и этих плееров/плееров-обёрток – хоть пруд пруди, но действительно качественных – не напасёшься.

     

  • 1.54, Аноним (-), 04:42, 16/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Склепал proof of concept. Действительно работает. Достаточно взять валидный jpg, дать ему указанное в новости имя и запаковать в tar с именем, заканчивающимся на .cbr.
     
  • 1.56, Аноним (-), 11:49, 16/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    все программисты, использующие консольные утилиты вместо либ, если такие есть для языка, профнепригодны.
     
     
  • 2.57, Аноним (-), 15:12, 16/07/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Все программисты, считающие, что нельзя в программах использовать консольные утилиты, вчерашние или сегодняшние виндуzятники. А в юниксах это такой же нормальный способ повторного использование кода, как и линковка с библиотеками, и все юниксовые IPC как раз под это заточены.
     
     
  • 3.58, Andrey Mitrofanov (?), 17:00, 16/07/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    #>>вместо либ, если такие есть для языка, профнепригодны.
    > Все программисты, считающие, что нельзя в программах использовать консольные утилиты,
    > вчерашние или сегодняшние виндуzятники. А в юниксах это такой же нормальный
    > способ повторного использование кода, как и линковка с библиотеками, и все
    > юниксовые IPC как раз под это заточены.

    ...точн, слыхал я тех погромистов - про ""удобство"" libsystemd0 и неосиляние /bin/bash.  И про профнепригодность и "вон из профессии".  Не буду погромистом!

     

  • 1.59, Аноним (-), 17:38, 16/07/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Хм, а я в гноме пользуюсь qpdfview, evince тормоз.
     

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



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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