В Ghostscript, наборе инструментов для обработки, преобразования и генерации документов в форматах PostScript и PDF, выявлена критическая уязвимость (CVE-2021-3781), позволяющая выполнить произвольный код при обработке специально оформленного файла. Изначально на наличие проблемы обратил внимание Эмиль Лернер, который рассказал об уязвимости 25 августа на прошедшей в Санкт-Петербурге конференции ZeroNights X (в докладе было рассказано, как Эмиль в рамках программ bug bounty использовал уязвимость для получения премий за демонстрацию атак на сервисы AirBNB, Dropbox и Яндекс.Недвижимость)...Подробнее: https://www.opennet.me/opennews/art.shtml?num=55780
Делать текстовые документы Тьюринг-полными изначально было ошибкой.
Ну, не знаю. Мне кажется, что ошибкой было (и есть) считать Postscript и PDF _текстовыми_ документами...
А ты хорош.
Я старательно и методично удаляю ghostscript отовсюду.
Все бы хорошо, но от него зависит CUPS...
Что-то вроде этого, если cups не используется.#!/bin/sh
cat > /tmp/noop.c << EOF
void cupsGetOption(void){return;}
void cupsLastError(void){return;}
void cupsFreeDests(void){return;}
void cupsGetDests2(void){return;}
void cupsGetDests(void){return;}
void cupsGetDest(void){return;}
void cupsGetNamedDest(void){return;}
void cupsGetPPD2(void){return;}
void httpError(void){return;}
void cupsGetPPD(void){return;}
void httpConnectEncrypt(void){return;}
void httpClose(void){return;}
void httpBlocking(void){return;}
void ppdOpenFile(void){return;}
void ppdMarkDefaults(void){return;}
void ppdLastError(void){return;}
void ppdErrorString(void){return;}
void cupsParseOptions(void){return;}
void cupsMarkOptions(void){return;}
void cupsFreeOptions(void){return;}
void ppdFindMarkedChoice(void){return;}
void ppdFindOption(void){return;}
void ppdFindChoice(void){return;}
void ppdFindAttr(void){return;}
void ppdClose(void){return;}
//
void ppdOpen(void){return;}
//
void ppdOpenFd(void){return;}
//nwjs
void cupsFreeJobs(void){return;}
void cupsGetJobs2(void){return;}
void cupsGetJobs(void){return;}
void cupsPrintFile2(void){return;}
void cupsPrintFile(void){return;}
//nwjs 055
void cupsLastErrorString(void){return;}
//electron-9b6
void httpConnect2(void){return;}
//electron-14 (no idea)
void cupsEnumDests(void){return;}
void cupsCopyDest(void){return;}
void cupsRemoveDest(void){return;}
EOFgcc -s -shared -fpic -march=native -O2 -pipe -Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,-z,relro -Wl,-z,now -Wl,--hash-style=gnu -Wl,--no-copy-dt-needed-entries -Wall -Wextra /tmp/noop.c -olibcups.so.2
mv -v libcups.so.2 /lib64/libcups.so.2
chmod a+rX /lib64/libcups.so.2
rm -v /tmp/noop.c
вернее cups-filters
тогда нужно было писать так:
Я старательно и методично удаляю ... отовсюду.
fix: Я старательно и методично удаляю xxx отовсюду.
Не, тогда уж лучше, CUPS удалю, а XXX пусть останется. Его и на экране смотреть можно. :)
Сезон дыр в Ghostscript снова открыт? В прошлый раз уязвимости находили каждую неделю.
Осень.
Этот GhostScript - дырявое говно. Нужно окончательное решение GhostScriptного вопроса: написать drоp-in замену, использущую под капотом OpenBox.
Rust? Go?
игогошечка не сможет волшебным образом санировать строчку %pipe%, и опять все будет зависеть только от прямизны рук программиста.Поэтому остается только начать переписывать на хрусте. Нет кода - нет уязвимостей! А если даже и есть - код прочитать невозможно, поэтому их не найдут.
Хотя, вон, обратите внимание на код Анонима под номером 2 - КАК он поде6ил проклятый cups! И ведь на сишечке, без всяких этих модных технологий!
Я полагаю, если качественно взяться - то и сам postscript можно подебить подобным образом, так что камня на камне от него не останется. Зачем вам проклятые педеэфе, "нам от проприетарной адоби ничаво нинужна!"
Оба
Лично я отгородился от этой штуки через редактирование /etc/ImageMagick-6/policy.xml (Ubuntu 18.04 десктоп):<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPI" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />Превьюхи для этих типов теперь пустые, но мне они и не нужны были.
Выколол себе глаза, чтоб не видеть греха? Уважаю.
Давно так не смеялся, спасибо, Инквизитор! :)
Почему бы им не перейти уже на libvips. im/gm в разы медленнее и жрут больше памяти.
там же ImageMagick в зависимостях
Ну так и говорю, сменить на libvips.
он optional - только для чтения форматов, не поддерживаемых самой vipsтам в общем все "optional" (как и у самой imagemagick - вовсе необязательно вкомпилировать туда gs если тебе не нужны pdf'ы)
Но в целом - "вот когда в пехепе интегрируют, тогда и приходите".
> он optional - только для чтения форматов, не поддерживаемых самой vipsтак и есть, просто в тех же портах в бсд он списке Requires
vips-8.11.3
Free image processing system
Description : Changes
Maintained by: danilo@FreeBSD.org
Requires: ImageMagick7-7.0.11.12_2, Imath-3.1.3 ....> Но в целом - "вот когда в пехепе интегрируют, тогда и приходите".
If you are going to be using libvips with untrusted images, perhaps in a web server, for example, you should consider the security implications of enabling a package with such a large attack surface.
вот это рассмешило :)
> так и есть, просто в тех же портах в бсд он списке Requiresну ты просто не застал времен, когда там и imagick скачивал для сборки себя весь интернет ненужнейшего ненужно. У меня долго лежал среди прочих патч к мэйкфайлу, выпиливающий оттуда половину, типа никем и нигде не используемого jpeg2000. И еще дольше - трехстрочное заклинание для make делающее то же самое с мэйкфайлом следующего поколения, уже через дефайны. И только через еще несколько лет оно научилось в стандартный make config
И эту лет через пять починют ;-)
> вот это рассмешило :)
да там половина пакетов при установке чем-то подобным радует глаз. "Исправить мы ничего не можем, но мы хотя бы предупредили". Особенно полезно когда это зависимость пятого порядка и никто в общей куче ничего уже не прочитает.
традиция-с...
> ... никем и нигде не используемого jpeg2000...Archive.org содержит море сканов достойнейших книжек, качественные сканы там в JPEG2000 (PDF из JBIG2 + JPEG2000). Не вижу причин для пережатия и ухудшения кач-ва. Более того, PDF по стандарту требует поддержки JPEG2000. Тот же Firefox, который не поддерживает JPEG2000 в web-контенте, вынужден был написать декодер на JS в своём PDF.js.
ну оригинально выпендрились, чо.
Интересно, где они нашли этот сканер, производства позапрошлого века.И тот какими-то странными извращенцами, потому что и в прошлом веке сканеры использовали tiff в качестве универсального loosless формата, а не jpeg2000.
Не «выпендрились» и не «извращенцы», а стандартный формат (ISO/IEC 15444) против изначально собственнического TIFF.
Ну то есть белки-истерички как есть. Борцуны со всем собственническим во славу ненужного шва6одного.Ну ооок...
Об их мотивах я не осведомлён.Что касается шва6оды, не обойтись без бутылки и заглядывания далеко в прошлое. В одном документе пишут ( http://www.diva-portal.org/smash/get/diva2:925474/FULLTEXT01... ):
> 4.3. Conditions for Implementing Open and Formal Standards in Software
>
> In this sub-section we present a review of four specific standards with respect to the definition of an open standard and populate the conceptual model with these standards. Of the four specific standards analysed, one informal (consortium) standard (SVG) is provided as a W3C standard (but not as an ISO standard). Further, one formal (ISO) standard (PNG) is included in the explicit list of open standards published in the Netherlands (Standaardisatie, 2014), wwhereas two other formal (ISO) standards (JPEG 2000 and TIFF/EP) are not included in the explicit list and are consequently considered to be closed standards.Возможно, девелоперз сабжа сохраняют ориентацию на оный стандарт потому, что JPEG 2000 с самого начала планировался, разрабатывался и принимался как стандарт, хотя дальше что-то пошло не так, разработчики браузеров его проигнорировали, ну и сегодня мало кто им пользуется.
> И тот какими-то странными извращенцами, потому что и в прошлом веке сканеры
> использовали tiff в качестве универсального loosless формата, а не jpeg2000.Никто не мешает тебе и TIFF скачать в индивидуальных файлах, только в JPEG2000 значительно меньше и намного качественнее, чем в простом JPEG. Для любителей и DJVU есть, но пожали его там отвратно. Если качественно хочется, то проще качнуть балком JPEG2000 и за пару секунд сконвертировать img2pdf'ом (формат от не меняет, просто "оборачивает" в PDF).
> Никто не мешает тебе и TIFF скачать в индивидуальных файлах, только в
> JPEG2000 значительно меньше и намного качественнее, чем в простом JPEG. Длявопрос в том, откуда у них вообще взялись такие уродливые "оригиналы" и зачем было их выкладывать вместо того, из чего они нагенерены - я вот уверен, что ни один сканер такого ужаса не порождает. Разьве что если специально сильно-сильно просить.
Т.е. они специально в этот формат конвертили из чего-то и без того удобочитаемого.
> вопрос в том, откуда у них вообще взялись такие уродливые "оригиналы" и
> зачем было их выкладывать вместо того, из чего они нагенерены -
> я вот уверен, что ни один сканер такого ужаса не порождает.Я не знаю, откуда столько пафоса, ты просто явно не пользовался им. Оригинальное сканирование там сделано самими библиотеками, в т.ч. самыми большими в мире, зачастую с цветокалибровочной палитрой в конце. Чего тебе ещё не хватает?
Ну так взять и спросить, если в самом деле интересно.Если исторически *уже* есть туча всего в этом формате, что толку с умным видом говорить, что можно было иначе? Только чтобы пальцы лишний раз изящно растопырить, "а я Д'Артаньян"?
Ну какая "туча всего"? Один весьма странный коллектив, слегка ушибленный "открытыми" стандартами, зачем-то сделал фигню. Вероятнее всего - переконвертив оригиналы, поскольку я по прежнему не верю в существование настолько уродливого сканерного софта.Вопрос был риторический, ответ очевиден.
> ну ты просто не застал времен, когда там и imagick скачивал для
> сборки себя весь интернет ненужнейшего ненужно.в те самые времена я из тарболов устанавливал, и плевался на порты, а щас ставлю из портов и плююсь на пекеджи.
> И эту лет через пять починют ;-)
дай Бог (оптимистично)
> традиция-с...
потребительская традиция опенсоурса. Думают, раз кто-то написал зачем писать самим, давайте юзать. А если там баги, то это не их проблемы.
Ghostscript - это драйвер принтеров, в том числе свободная реализация языка PostScript. И не нойте пожалуйста, баги фиксят.
Баги сажают, вы хотели сказать? Этой проблемы нет в версиях до 9.50, когда что-то где-то зачем-то опять понаулучшайкали.
Кстати Эмиль молодец, сначала обнес компании на премии за уязвимости, а потом уже спалил её. А ведь мог продать АНБшникам\кулхацкерам же.
да он вообще нормальный пацан, судя названиям проектов на гитхабеhttps://github.com/neex/gifoeb
https://github.com/neex/phuip-fpizdam
>нормальный пацан
>positive hack daysну-ну.
Никогда такого не было.
Я правильно понимаю, что т.е. если кто-то загрузит на нэкстклауд вредоносный файл, использующий эту уязвимость, код будет исполнен на сервере?Предположим, что NC сервер работает на ubuntu 20.04 в формате снапа.
В Gentoo imagemagick уже с предложенными защитами поставляется (их как с прошлого раза поставили, так и не убирают)
> В Gentoo imagemagick уже с предложенными защитами поставляетсяв смысле со сломанной обработкой половины графических форматов? Вам к отцу инквизитору. По винтовой лесенке в подвал, и через люк по приставной еще ниже. Он вас там ждет.