InstantCMS 2.16.1

1.47K

Всем привет!

Новый релиз, как всегда, внезапно :) На этот раз основной причиной послужили большое количество репортов безопасности. Казалось бы, с чего вдруг ;-) Но не всё так страшно.

Более года назад мы сделали небольшой лендинг для англоязычной аудитории и демо к нему. Через какое-то время туда «налетели» любители потестировать, чему мы, в общем-то, были рады. Демо раз в пол часа автоматически обнулялось, тестеры — тестили. А потом пошли репорты с сайта huntr.dev. По началу я даже не понял что за репорты и с чего вдруг кто-то бесплатно решил делиться информацией. Как оказалось, этот сервис сам мотивирует своих пользователей (деньгами и внутренним рейтингом) искать уязвимости в open source продуктах. Мы, разумеется, не против. На текущий момент обработано порядка 30 репортов, из них подтверждённых (и исправленных) около 25. Неплохой результат. Но сильно повода для паники нет. Итак, что конкретно мы исправили:

  • Исправлена Blind SQL Injection в фильтрах датагридов в админке;
  • Исправлена Blind SQL Injection в автозавершении ввода компонента тегов;
  • Исправлена Blind SSRF при загрузке фото по ссылке, переписан класс cmsUploader;
  • Secure flag для Cookie теперь ставится всегда, если в конфигурации сайта указан протокол HTTPS;
  • Исправлены все известные XSS в админке;
  • Исправлена проблема и её последствия, когда подстановкой в url можно было отправить самому себе личное сообщение;
  • Теперь нельзя изменить пароль на тот же;
  • Идентификатор сессии теперь меняется после авторизации/выхода;
  • Администраторы теперь не могут со стороны сайта менять пароли друг другу (в админке эта возможность оставлена, т.к. её можно закрыть по ip адресу);
  • HTML поля в настройках типов контента (описание, наборы, фильтры) теперь сохраняются через типограф;
  • Для строковых полей, если в нём не запрещены HTML теги, значения обрабатываются типографом;
  • Редактор Redactor пропатчен из-за возможной XSS.

Если вы не хотите обновляться или нет такой возможности, то из самого опасного — замените этот файл по пути /system/controllers/tags/actions/autocomplete.php. Тут была слепая SQL инъекция. А также отключите для полей изображений добавление по ссылке. В остальном 90% XSS которые мы закрыли, касались админки и в целом их опасность сильно преувеличена. Однако мы старались давать обратную связь хантерам и закрывать/исправлять всё обнаруженное, тем самым мотивируя их на новые поиски, возможно, более опасных уязвимостей. В целом, считаю это отличный опыт и неплохой результат за 70$ (цена трёх доменов, которые мы купили). Уверен, хантеры продолжат поиски, а мы продолжим исправлять то, что они находят.

Другие изменения

  • Обновление событий в админке теперь исключает выключенные компоненты;
  • Код инвайта теперь сохраняется в Cookie, что по сути является реферальной системой;
  • SEO поля в записях типов конетнта теперь мультиязычные;
  • Корректная обработка ссылок с хэшами (знак решётки) в пунктах меню;
  • Исправлена проблема с ограниченным количеством записей в некоторых разделах админки после обновления до 2.16.0;
  • Для поля «Изображение» добавлены опции «Включить редактор изображений перед загрузкой», которые позволяют обрезать изображение перед загрузкой;
  • Класс Simple PHP YAML обновлён до актуальной версии;
  • Toastr и jQuery обновлены до актуальных версий;
  • Мелкие правки установщика InstantCMS.

Как установить обновление InstantCMS

Важно! Убедитесь, что сейчас вы используете версию 2.16.0, иначе, обновитесь сначала до неё.

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

  • Отключите кеширование в настройках сайта;
  • Отключите объединение js и css в настройках сайта;
  • Если вы используете свой шаблон и в нем есть файлы, присутствующие в пакете обновления, то обновите их;
  • При возникновении «белого экрана» категорически читать здесь;
  • Для тех, у кого свой шаблон у нас есть статья как быть, если в обновлении CMS есть изменения в шаблоне, рекомендуем к прочтению.

Если в вашем шаблоне присутствуют JavaScript файлы со своими правками (взяты из /templates/default/js/ или /templates/modern/js/), замените/смержите их из пакета обновления. Не забывайте о сбросе кэша браузера абстрактным счетчиком.

Механизм установки обновлений подробно описан по этой ссылке в документации.

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

Спасибо, что выбираете InstantCMS.

Добра и Мира ☮

P.S. Мне тут подсказали, что сегодня день программиста оказывается, отличное совпадение. Поздравляю всех причастных!

Поддержите проект

Вы можете стать официальным спонсором или оказать другую поддержку. Вы также здорово поможете, если поставите звезду на GitHub.

+1
Михаил Михаил 16 дней назад #

хорошая новость на сон грядущий, спасибо за работу

0
Fuze Fuze 16 дней назад #

К вашему дню рождению как раз) Поздравляем!

0
Михаил Михаил 16 дней назад #

Благодарю!

+1
dChirkis dChirkis 16 дней назад #

Вау, круто. СПАСИБО

+1
oscar oscar 16 дней назад #

Вау супер и Вас с праздником, прям супер событие!!! Спасибо!

+2
My-InstantCMS.Ru My-InstantCMS.Ru 16 дней назад #

Спасибо за работу Fuze и спасибо тестерам huntr.dev за бесплатный аудит безопасности 👍

0
pupsik pupsik 16 дней назад #

А также отключите для полей изображений добавление по ссылке.

Можно поподробней? Желательно для админки которая на Английском

Как это отключить в tinyMCE?

0
Fuze Fuze 16 дней назад #

Изображение

Для редактора tinyMCE делать ничего не надо.

0
pupsik pupsik 16 дней назад #

Да что мне это мену. Как мне до него добраться? Нашел. В группах.

Components  -> Groups -> Group logo

0
savenkoffcom savenkoffcom 16 дней назад #

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

0
savenkoffcom savenkoffcom 16 дней назад #

Я готов поработать с компонентами для их совместимости с 2.16.0, однако исходный код закрыт. Мне они оба нужны, сильно проблематично отказываться от функционала.

+1
Fuze Fuze 16 дней назад #

И InstantVideo и тем более InstantMaps поддерживают давно новую админку. Для InstantVideo нет поддержки 2.16.0 и шаблона modern. Когда я такое обновление сделаю — не знаю. Все файлы шаблонов открыты.

0
savenkoffcom savenkoffcom 15 дней назад #

Для InstantVideo много ошибок формата

  1. Notice: Trying to access array offset on value of type null in /system/controllers/video/hooks/grid_admin_content_items.php on line 0

Их исправить самостоятельно невозможно, будем ждать обновления.

Касательно шаблона админки InstantMaps ещё терпимо, но есть над чем поработать.

А вот с InstantVideo совсем плохо, особенно некоторые раздел «Очередь обработки», где вообще ничего невозможно сделать без смены дизайна.

Изображение

Вообщем InstantVideo очень требует обновления. И я надеюсь, у вас будет время его сделать. Спасибо заранее.

0
Александр Александр 16 дней назад #
  1. Если вы не хотите обновляться или нет такой возможности, то из самого опасного — замените этот файл по пути /system/controllers/tags/actions/autocomplete.php. Тут была слепая SQL инъекция.

Это и на 2.14 можно сделать?

Спасибо за вашу работу!

0
Fuze Fuze 16 дней назад #

Это и на 2.14 можно сделать?

Да

0
Def Def 16 дней назад #

Спасибо большое за обновление! на 2.13 подойдет или надо обязательно обновить на 2.14 и далее уже загружать файл?

0
Fuze Fuze 16 дней назад #

Просто замените файл, сделав бэкап старого и проверьте автозавершение тегов. Дольше спрашиваете.

0
CEH9I CEH9I 16 дней назад #

После обновления перестали сохранятся чекбоксы в настройках доступа полей и вообще в админке и ругается на ошибку

Изображение

+2
CEH9I CEH9I 16 дней назад #

В общем ошибка 503 была из-за отключенного ТК. А чекбоксы следствие кривого обновления ранее, был старый файл system/fields/listgroups.php, после замены на свежий все появилось. Проблему помог решить Zau4man, за что ему огромное спасибо. 

0
Юран Юран 16 дней назад #

Попробовал на локальном обновиться с 2.16.0 через админку, выдало такое:

  1. Fatal error: Uncaught Exception: system/core/configs.php in C:\OSPanel\domains\instant\system\config\autoload.php:53 Stack trace: #0 [internal function]:
  2. autoLoadCoreClass() #1 C:\OSPanel\domains\instant\system\core\config.php(5): spl_autoload_call() #2
  3. C:\OSPanel\domains\instant\system\config\autoload.php(56): include_once('C:\\OSPanel\\doma...') #3 [internal function]: autoLoadCoreClass() #4
  4. C:\OSPanel\domains\instant\bootstrap.php(31): spl_autoload_call() #5 C:\OSPanel\domains\instant\index.php(28): require_once('C:\\OSPanel\\doma...') #6 {main}
  5. thrown in C:\OSPanel\domains\instant\system\config\autoload.php on line 53
  6.  

Ребята, кто нибудь подскажите что это за ошибки… и откуда configs.php...

+1
Fuze Fuze 16 дней назад #

configs.php появился ещё в 2.16.0. Почему у вас так, я не могу знать. Вероятно вы решили что файл configs.php лишний и удалили его.

0
Юран Юран 16 дней назад #

Странно… вроде не удалял… наверное обновил до 2.16.0 криво. Сейчас поставлю чистую 2.16.0 и снова попробую проделать все.

0
Юран Юран 16 дней назад #

Прошу прощения, обновлял с какой то левой версией с github, а не с чистой 2.16.0 — сейчас все четко обновилось.

0
F_a_R_i_D F_a_R_i_D 15 дней назад #

Благодарю за обновление

После обновления нигде не работает кнопка Сохранить

+1
Fuze Fuze 15 дней назад #

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

0
F_a_R_i_D F_a_R_i_D 15 дней назад #
0
F_a_R_i_D F_a_R_i_D 15 дней назад #

В админке не могу сохранить изменения. Кнопка Сохранить не работает. Не реагирует.

+1
Zau4man Zau4man 15 дней назад #

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

Поэтому кнопка не нажимается, ожидая заполнения обязательных полей 

0
F_a_R_i_D F_a_R_i_D 15 дней назад #

Благодарю. Так и есть. Вспомнил, что такая проблема была у меня. Я удалил папку EN, при обновлении папка опять загрузилась в директорию languages, а строки EN в настройках остались пустыми, поэтому не сохранялся.

0
goose goose 13 дней назад #

Супер, спасибо. А исправлено жуткого подвисания страниц на сайтах с большими базами? Если, к примеру 100k записей, то вся пагинация, да и главная  пролистывается с задержкой до 4-6 сек. Я уже год ищу, консультируюсь и не могу решить эту проблему. То что у меня что-то неправильно настроено, ответ хороший. Но у меня мощный дорогой сервер и не самые глупые специалисты. И все как один заявляю мол это особенность движка. Неплохая такая особенность :)  Записи заливались на чистую систему без всяких дополнений и если при 10k записей все в летает, то при 100k записей все лагает… Размер базы не превышает 200MB.  А так спасибо большое за Ваши труды.

+2
Loadырь Loadырь 13 дней назад #

Вот тут prefitchi.ru/hotels 170к записей легко справляются с вашей «особенностью» движка. При этом второй из самых дешовых хостинг на бегете и без поддержки их специалистов.

0
Fuze Fuze 13 дней назад #

Размер базы не превышает 200MB.

На этом сайте вся база 1Гб. 300К личных сообщений, 300К постов на форуме, 75К комментариев. Я к тому, что размер базы в вашем случае мизерный. Более того, любой специалист, кто мало мальски соображает, учитывая что у вас мощный и дорогой сервер, затюнит MySQL и/или добавит недостающие индексы. Да эту базу можно вообще всю в память выкинуть, я не могу знать что у вас тормозит и почему. По кол-ву записей в ТК: у меня есть проект с 520К записей и всё работает быстро. Описанное вами точно не «особенность движка».

0
Loadырь Loadырь 13 дней назад #

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

Выглядит это как-то так

Изображение

из них 117 генерирует одно поле в 39 записях списка.

0
Alex Burr Alex Burr 13 дней назад #

Подскажите! Проблема после обновления. Не загружаются файлыИзображение

0
DeusSpa DeusSpa 11 дней назад #

Хорошее обновление,

Раз песня зашла про типограф и обработку полей типографом.

Есть ли возможность при установке галки «Обрабатывать типографом» вывести поле или значения, список… какие значения обрабатывать?

То есть отображаем, что сейчас разрешено например: <iframe </iframe>  и  дописываем чего нет — для специфичных проектов. Элементарно нет по умолчанию вставки видео с инстаграма например.

Получается надо нырять в файл и проставлять (прописывать разрешения (расширения там)).

+1
Zau4man Zau4man 9 дней назад #

Про улучшение работы типографа разговоры ведутся давно github.com/instantsoft/icms2/issues/923

Видимо, надо делать свой компонент. Но пока по коду непонятно, как и свои теги отловить, и типографу не помешать.

Без типографа текст автоматически становится небезопасным, и оставлять поле без типографа можно только в том случае, когда в него пишут только доверенные лица.

0
F_a_R_i_D F_a_R_i_D 9 дней назад #

Здравствуйте.

Текст вопроса:


Имеется фрагмент кода:

  1. $url = 'https://img.milli.az/2023/09/19/1144203.png';
  2. $uploader = $this->cms_uploader;
  3. $result = $uploader->enableRemoteUpload()->upload($url);
  4. dump(array('url' => $url, 'result' => $result));

На 2.16.0 все работает. На 2.16.1 имеем вот такой результат:

  1. (
  2. [url] => https://img.milli.az/2023/09/19/1144203.png
  3. [result] => Array
  4. (
  5. [error] => Файл имеет неподходящий формат. Допустимые типы файлов:
  6. [success] =>
  7. [name] => 1144203september.png
  8. )
  9.  
  10. )


Откуда растут ноги?

+1
Fuze Fuze 9 дней назад #
  1. $this->cms_uploader->setAllowedMime(['image/png']);
0
F_a_R_i_D F_a_R_i_D 8 дней назад #

Благодарю за ответ.

А что делать если я заранее не знаю тип файла? Я ошибаюсь или в файле system/core/uploadfile.php строки


        // Пускаем любые, если не указано
        if ($this->allowed_mime === null) {
            return true;
        }


должны работать, но не работают?

0
Loadырь Loadырь 8 дней назад #

А что делать если я заранее не знаю тип файла? 

Здесь вы указываете какие типы файлов пользователю разрешено будет загружать, а не те какие он хочет загружать.

+1
RSN RSN 4 дня назад #

Донат отправлен. Fuze, спасибо за то что не забываете развивать систему.

Как оказалось, этот сервис сам мотивирует своих пользователей (деньгами и внутренним рейтингом) искать уязвимости в open source продуктах. Мы, разумеется, не против.

Хорошая новость, мы тоже «за»)) Обновление прошло без проблем.

0
Fuze Fuze 4 дня назад #

Спасибо!

0
AtlantisWeb AtlantisWeb 3 дня назад #

Tinymce загрузка файлов не работает в опере(Версия:95.0.4635.84 Версия Chromium:109.0.5414.120), в консоли выдает ошибку:

  1. Uncaught SyntaxError: Unexpected end of JSON input
  2. at JSON.parse (<anonymous>)
  3. at HTMLIFrameElement.<anonymous> (plugin.min.js:1:1156)
  4. at HTMLIFrameElement.dispatch (jquery.js?1679324112:3:12444)
  5. at r.handle (jquery.js?1679324112:3:9173)
  6.  

В гуглхроме, таже ошибка в консоли, но при этом появляется окно загрузки файла и сам файл загружается.

0
Region67 Region67 10 часов назад #

Столкнулся с такой проблемой:

Создаю поле местоположение  страна — country, вывожу его с фильтре.

В списке контента выбираю фильтрацию по другим полям, поле страна не трогаю, но оно автоматически попадает в фильтрацию со значением =0 (в урл country =0)

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.