Содержание
- Что такое JCH Optimize?
- Суть угрозы: что именно было исправлено?
- Межсайтовый скриптинг при оптимизации URL
- Небезопасный счетчик просмотров Page Cache
- Административные задачи выполнялись без токена и необходимых прав
- Открытое перенаправление через параметр return
- Недостаточная проверка путей оптимизированных изображений
- Параметр jchbackend отключал оптимизацию для любого посетителя
- Дополнительные исправления безопасности
- Защита Cloudflare API-токена и пароля Redis
- Почему необходимо устанавливать 9.4.1, а не 9.4.0?
- Кто находится в зоне риска?
- Решение проблемы: пошаговая инструкция
- Можем сделать всё за вас
7 октября 2026 года разработчик популярного расширения для ускорения сайтов JCH Optimize выпустил крупное обновление безопасности. Версия 9.4.0 устранила шесть уязвимостей высокого уровня, включая межсайтовый скриптинг, небезопасный общедоступный обработчик Page Cache, отсутствие проверки прав в административных задачах и открытое перенаправление.
В тот же день была выпущена версия JCH Optimize 9.4.1, исправляющая критическую ошибку 9.4.0 на сайтах, использующих Redis или APCu для хранения кэша. Поэтому владельцам сайтов рекомендуется обновляться сразу до 9.4.1 или более новой версии.
Проблемы затрагивают как бесплатную, так и платную редакцию JCH Optimize. Некоторые уязвимости могли эксплуатироваться неавторизованными посетителями, а для других требовалась учетная запись в панели управления либо взаимодействие авторизованного администратора со специально сформированной ссылкой.
Что такое JCH Optimize?
JCH Optimize — стороннее расширение для оптимизации производительности сайтов на Joomla. Оно обрабатывает итоговый HTML-код страниц, объединяет и минимизирует CSS и JavaScript, оптимизирует изображения, управляет предварительной загрузкой ресурсов и может сохранять готовые страницы в собственном кэше.
Поскольку расширение изменяет HTML-код практически каждой страницы перед отправкой посетителю, ошибки в его обработчиках могут затрагивать весь сайт, даже если Joomla и другие расширения сформировали безопасную разметку.
Суть угрозы: что именно было исправлено?
В журнале изменений JCH Optimize 9.4.0 разработчик отметил шесть исправлений как HIGH. Кроме них, выпуск содержит несколько дополнительных исправлений среднего и низкого уровня.
На момент публикации отдельные идентификаторы CVE этим уязвимостям не присвоены. Поэтому ориентироваться необходимо на название расширения и номер установленной версии.
Межсайтовый скриптинг при оптимизации URL
Наиболее опасная для общедоступных сайтов проблема связана с обработкой закодированных символов в URL-адресах. Например, Joomla или другое расширение могло корректно экранировать поисковый запрос, добавленный в ссылку, но JCH Optimize при последующей оптимизации страницы декодировал эти символы.
В результате ранее безопасное значение могло превратиться в активный HTML- или JavaScript-код. Для эксплуатации злоумышленнику было достаточно подготовить специальную ссылку, например на страницу поиска, и убедить посетителя или администратора открыть ее.
Вредоносный JavaScript выполнялся в контексте сайта и потенциально мог использоваться для:
- изменения содержимого страницы;
- перенаправления посетителя на поддельный или вредоносный сайт;
- отображения фальшивой формы авторизации;
- выполнения действий от имени авторизованного пользователя;
- получения доступных браузеру данных и токенов.
Небезопасный счетчик просмотров Page Cache
Когда JCH Optimize отдает страницу из собственного кэша, Joomla не запускает компонент, который первоначально сформировал эту страницу. Из-за этого стандартные счетчики просмотров материалов перестали бы увеличиваться.
Для решения этой задачи плагин Page Cache добавлял на кэшированные страницы запрос к общедоступному обработчику com_ajax. Этот обработчик принимал из запроса название компонента, модели и идентификатор объекта, после чего загружал указанную модель и вызывал ее метод hit().
До версии 9.4.0 неавторизованный посетитель мог самостоятельно указать компонент и модель, которые должен был запустить обработчик. Это позволяло изменять счетчики просмотров произвольных объектов, включая неопубликованные материалы и содержимое с ограниченным уровнем доступа.
Разработчик не утверждает, что через этот обработчик можно было вызвать произвольный метод или выполнить PHP-код. Подтвержденная проблема связана именно с небезопасным выбором модели и вызовом метода hit().
В исправленной версии разрешен только заранее определенный список поддерживаемых объектов:
- материалы;
- категории;
- контакты;
- ленты новостей;
- теги.
Перед увеличением счетчика JCH Optimize теперь также проверяет, опубликован ли объект и имеет ли текущий посетитель право его просматривать.
Административные задачи выполнялись без токена и необходимых прав
До JCH Optimize 9.4.0 административный обработчик расширения не обеспечивал единообразную проверку CSRF-токена и разрешения core.admin для задач, изменяющих настройки или файлы.
Это создавало два основных сценария атаки:
- CSRF-атака: Авторизованный администратор мог открыть специально подготовленную ссылку или страницу, после чего браузер отправлял запрос на изменение настроек или выполнение файловой операции без его осознанного согласия.
- Недостаточная проверка прав: Пользователь с ограниченным доступом к панели управления мог выполнить действия, для которых у него не должно было быть административных полномочий.
Начиная с версии 9.4.0, все административные задачи, изменяющие настройки или файлы, требуют действительного токена формы Joomla и разрешения core.admin для компонента JCH Optimize.
Открытое перенаправление через параметр return
Задачи Mode Switcher и Utility использовали параметр return для перенаправления пользователя после выполнения операции. Адрес передавался в кодированном виде, однако недостаточно строго проверялось, ведет ли он на текущий сайт.
Злоумышленник мог подготовить ссылку, после открытия которой авторизованный пользователь панели управления перенаправлялся на сторонний ресурс. Это могло использоваться в фишинговых атаках, например для показа поддельной страницы повторной авторизации.
В исправленной версии разрешены только внутренние URL-адреса текущего сайта.
Недостаточная проверка путей оптимизированных изображений
Сервис оптимизации изображений возвращает расширению URL-адреса и пути к обработанным файлам. Ранее JCH Optimize недостаточно строго проверял эти значения.
В версии 9.4.0 добавлена проверка возвращаемых URL и файловых путей. Каталоги изображений теперь должны находиться внутри корневой папки сайта, что предотвращает работу с непредусмотренными путями за ее пределами.
Параметр jchbackend отключал оптимизацию для любого посетителя
До исправления добавление параметра jchbackend=1 к адресу страницы заставляло JCH Optimize пропустить оптимизацию текущего запроса. Использовать этот параметр мог любой посетитель без авторизации.
Это не давало прямого доступа к панели управления или файлам сайта, но позволяло постороннему пользователю изменять поведение расширения и обходить оптимизированную выдачу. В JCH Optimize 9.4.0 параметр полностью удален.
Дополнительные исправления безопасности
Кроме шести проблем высокого уровня, разработчик внес дополнительные изменения:
- Экранирование файлов и папок: Имена файлов и каталогов теперь безопасно экранируются в дереве Optimize Images.
- Проверка заголовка Host: Некорректные заголовки
Hostбольше не влияют на определение адреса текущей страницы. - Защита ключей Page Cache: Отклоняются некорректные имена хостов, опасные символы и фрагменты путей в ключах Page Cache и Capture Cache.
- Проверка идентификаторов кэша: Идентификаторы Page Cache проверяются перед удалением кэшированных страниц.
- Исправление параметра jchnooptimize: Параметр
jchnooptimizeснова корректно отключает оптимизацию. - Обновление библиотек: Встроенные библиотеки Symfony DomCrawler, Guzzle и Laminas обновлены до современных стабильных версий.
Защита Cloudflare API-токена и пароля Redis
В предыдущих версиях экспорт настроек JCH Optimize мог содержать Cloudflare API-токен и пароль Redis. Если такой файл передавался в службу поддержки, сохранялся в общедоступной папке или попадал к постороннему лицу, секретные данные могли быть раскрыты.
В новой версии:
- экспорт настроек больше не содержит Cloudflare API-токен и пароль Redis;
- файл экспорта скачивается напрямую;
- при импорте настроек сохраняются действующие токен и пароль сайта, если в импортируемом файле они отсутствуют.
Почему необходимо устанавливать 9.4.1, а не 9.4.0?
Версия JCH Optimize 9.4.0 содержит все перечисленные исправления безопасности, однако в ней появилась новая критическая ошибка для сайтов, использующих Redis или APCu в качестве хранилища кэша.
В пакет 9.4.0 не попали некоторые классы обновленной библиотеки Laminas Cache. В результате сайты на JCH Optimize Pro с Redis или APCu могли выдавать фатальную PHP-ошибку на каждой странице и становиться недоступными.
Версия JCH Optimize 9.4.1 была выпущена в тот же день и вернула отсутствующие классы. Она включает:
- все исправления безопасности из версии 9.4.0;
- исправление фатальной ошибки Redis;
- исправление фатальной ошибки APCu.
Кто находится в зоне риска?
Обновление необходимо всем владельцам сайтов, на которых установлена JCH Optimize Free или Pro версии ниже 9.4.0.
Для современных сайтов рекомендуется следующая версия:
- Joomla 5 и Joomla 6: JCH Optimize 9.4.1 или выше.
- PHP: версия 8.1 или выше.
Официальное описание выпуска указывает Joomla 5.0 в качестве минимального требования, однако страница загрузки также отмечает совместимость с Joomla 4.4. Владельцам сайтов на Joomla 4.4 рекомендуется сначала создать резервную копию и проверить обновление на копии сайта.
Решение проблемы: пошаговая инструкция
Шаг 1: создайте резервную копию
Перед обновлением создайте полную резервную копию файлов и базы данных Joomla. Если используется Redis или APCu, убедитесь, что устанавливается именно версия 9.4.1 или выше.
Шаг 2: обновите JCH Optimize
- Перейдите в панели управления Joomla в раздел Система → Обновление → Расширения.
- Нажмите «Проверить обновления».
- Найдите в списке JCH Optimize.
- Установите версию 9.4.1 или выше.
- После установки откройте Система → Управление → Расширения.
- Убедитесь, что компонент и связанные плагины JCH Optimize обновлены до одной версии.
Шаг 3: очистите кэш и проверьте сайт
- Очистите кэш JCH Optimize.
- Очистите системный кэш Joomla.
- Если используется CDN, очистите его кэш.
- Проверьте главную страницу, материалы, поиск, формы и страницы с параметрами в URL.
- Проверьте объединение и минимизацию CSS и JavaScript.
- Проверьте оптимизацию изображений и создание WebP/AVIF.
- Проверьте Page Cache и изменение счетчиков просмотров.
- На версии Pro проверьте работу Redis или APCu.
Если после установки 9.4.0 сайт стал недоступен из-за Redis или APCu, обновите расширение до 9.4.1 вручную. В качестве временной меры можно переключить Storage Adapter на Filesystem.
Если панель управления или сайт не открываются, временное переименование папок /plugins/system/jchoptimize и /plugins/system/jchpagecache через FTP или файловый менеджер отключит соответствующие плагины. После восстановления доступа необходимо установить актуальную версию и вернуть корректные имена папок.
Шаг 4: проверьте возможные признаки эксплуатации
На момент публикации нет подтвержденных сведений о массовом использовании этих уязвимостей в реальных атаках. Однако обновление не отменяет действия, которые могли быть выполнены ранее.
- Проверьте учетные записи: Найдите неизвестных пользователей и неожиданные назначения в группы Administrator и Super Users.
- Проверьте настройки JCH Optimize: Ищите неизвестные изменения в параметрах оптимизации, CDN, Page Cache и обработки изображений.
- Проверьте старые экспорты: Удалите файлы настроек JCH Optimize из папок загрузок, резервных копий, обращений в поддержку и общедоступных каталогов.
- Проверьте журналы: Найдите подозрительные обращения к
com_ajax, плагину Page Cache и административным задачам JCH Optimize. - Проверьте перенаправления: Обратите внимание на неизвестные ссылки с параметром
returnи обращения к Mode Switcher или Utility. - Проверьте файлы: Найдите недавно созданные или измененные PHP-файлы в корне сайта,
/administrator,/plugins,/components,/templates,/imagesи/media.
Шаг 5: дополнительные меры защиты
- Ограничьте доступ к JCH Optimize: Настраивать расширение должны только доверенные администраторы.
- Включите многофакторную аутентификацию для всех административных учетных записей.
- Обновите Joomla и остальные расширения до актуальных совместимых версий.
- Не храните экспорты настроек в общедоступных каталогах и не отправляйте их через незащищенные каналы.
- Настройте Web Application Firewall: WAF может уменьшить вероятность успешной XSS- или CSRF-атаки, но не заменяет обновление.
- Регулярно создавайте резервные копии и храните хотя бы одну актуальную копию вне сервера сайта.
Можем сделать всё за вас
Если всё перечисленное выше кажется вам слишком сложным, либо вы просто не хотите терять на это время, а также хотите сэкономить на покупке коммерческих расширений, то мы готовы помочь:
- обновить JCH Optimize и проверить его настройки;
- обновить сайт до последней версии Joomla вместе с применяемыми на нем расширениями;
- провести аудит расширений и удалить неиспользуемые;
- проверить сайт на наличие вредоносного кода и скрытых учетных записей;
- настроить резервное копирование сайта, в том числе в удаленное хранилище;
- применить к сайту лицензионные версии популярных расширений;
- защитить сайт дополнительными мерами безопасности;
- взять сайт «под крыло», регулярно обновляя Joomla и расширения, в том числе коммерческие.
Упоминаемые термины:
CSS, Админка, Плагин, Ядро, Бэкап, JavaScript, XSS, Редирект, JCH Optimize

