Експлойт при качване на изображения в Discourse позволи на потребители с базов достъп да четат файлове от сървъра чрез комбиниране на забавяне при обработката на JPEG, изпълнение на Ghostscript и функционалности на ImageMagick.

Изследването разкри също отделна уязвимост, свързана с отравяне на кеша (cache poisoning), която може да изпълни JavaScript за анонимни посетители. Изследователите докладваха и двата проблема през юни 2026 г., като те бяха коригирани преди публикуването.

Техническият доклад от Searchlight Cyber описва тестове срещу конфигурации по подразбиране. Discourse обслужва повече от 22 000 общности, което прави механизма му за качване на файлове ценна цел за сигурността.

Констатациите са независими от изследването на Hacktron за OpenAI, което включваше различни грешки при декодиране на изображения и влизане в системата, отразени по-рано от Cybersecurity News. Веригата за четене на файлове изискваше единствено профил с ниво на доверие Trust Level 0 — най-ниското потребителско ниво.

Експлойт в потока за обработка на изображения в Discourse

Изследователите анализираха процеса на качване на профилна снимка и установиха, че политиката за сигурност на ImageMagick блокира PostScript формати, но все пак позволява на Ghostscript да обработва PDF файлове. Това създаде разминаване между блокирания формат и инструмента, използван за неговата обработка.

Изпълнение на скрипта от пълната финална верига (източник: slcyber)
Изпълнение на скрипта от пълната финална верига (източник: Slcyber)

Специално създаден файл комбинира идентификационни байтове на JPEG XL с валидно PostScript съдържание. FastImage, библиотеката за проверка на качваните файлове, разпозна размерите на изображението, докато разширението .pdf на файла насочи ImageMagick към Ghostscript.

След това Ghostscript интерпретира съдържанието като PostScript. Изследователите постигнаха това, без да използват уязвимост в Ghostscript или да нарушават изолираната му среда.

Този първи етап достигна до изчисляването на доминиращия цвят в Discourse, което предаде пътя на временния файл към ImageMagick, без да налага конкретен декодер за изображения.

Свързаните материали за уязвимости в ImageMagick подчертават защо тези инструменти за обработка се нуждаят от задълбочен преглед на сигурността. Тук обаче веригата зависи от начина, по който няколко компонента обработват един и същ качен файл.

Пълна верига (източник: slcyber)
Пълна верига (източник: Slcyber)

Следващата стъпка експлоатира състезание между проверката на файл и последващото му използване, известно като уязвимост от тип „време на проверка към време на използване“ (time-of-check to time-of-use / TOCTOU). Изследователите качиха валидно JPEG съдържание с разширение .msvg, след което замениха временния файл, след като FastImage го провери, но преди ImageMagick да обработи доминиращия цвят.

Стандартният времеви прозорец беше твърде кратък за надеждна експлоатация. Специално форматиран и уплътнен JPEG забави етапа на обработка с jpegoptim до около 25 секунди при тестовете.

Операцията за преименуване в PostScript след това замени файла атомарно, запазвайки съществуващите файлови дескриптори свързани с оригиналния JPEG, докато по-късните четения достигнаха заместващия SVG.

Поток за качване на профилна снимка в Discourse (източник: Slcyber)

Вътрешният MSVG анализатор на ImageMagick проследи вградена препратка към Magick Scripting Language (MSL). Този скрипт прочете локален файл и запази съдържанието му като изображение.

Второ преминаване постави това изображение в процеса на съхранение за качване, който върна стандартен URL адрес за изтегляне. Изследователите демонстрираха разкриване на файлове, а не пълно отдалечено изпълнение на код на сървъра.

Отделната уязвимост в кеша отразяваше непроверена бисквитка за цветова схема в HTML кода и запазваше отговора в анонимния кеш. Доверен модул за зареждане на плъгини след това импортира контролиран от атакуващия модул, заобикаляйки политиката за сигурност на съдържанието (Content Security Policy) на сайта.

Discourse отстрани и двата проблема. Корекцията за изображения блокира делегатите и разрешава само необходимите декодери. Обработката на бисквитки вече използва стриктна валидация за цели числа и включва стойността в ключовете на кеша.

Бюлетинът на разработчика за CVE-2026-55420 посочва коригираните версии 2026.6.0, 2026.5.1, 2026.4.2 и 2026.1.5. Описанието му засяга нестандартни конфигурации за PDF, което е по-тясно от веригата с конфигурация по подразбиране, открита от изследователите. Администраторите трябва да инсталират обновленията, вместо да разчитат единствено на ограничения върху файловите разширения.