АйТи Фреш
Главная / Статьи / Безопасность
Безопасность

Когда редактор инфоблока получает доступ к серверному коду

Автор: Семёнов Евгений Сергеевич, директор ООО «АйТи-Фреш» · · ~8 мин чтения
Когда редактор инфоблока получает доступ к серверному коду

«Дайте редактору полный доступ к каталогу, иначе импорт не работает». Я бы остановил такую заявку до выяснения причин. За ней может скрываться разрешение менять серверную логику сайта. Я — Семёнов Евгений Сергеевич, директор ООО «АйТи-Фреш». Покажу, какие полномочия нужно разделить, где риск RCE подтверждён и как сохранить работу с каталогом. Технические сведения проверены на 5 сентября 2026 года.

Название роли ничего не говорит о её возможностях

Для меня редактор — человек, который меняет заголовок, описание, фотографию и другие согласованные данные. Администратор инфоблока определяет устройство хранилища и его поведение. В Битрикс эти действия различаются: element_edit означает изменение элемента, iblock_edit — изменение параметров инфоблока. Поэтому фраза «ему разрешено редактировать инфоблок» для согласования доступа слишком расплывчата. Нужно назвать операции, конкретный инфоблок и рабочую задачу. [Операции доступа к инфоблокам](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/getpermission.php).

Опасная организационная привычка выглядит безобидно: сотрудник не видит нужную кнопку, ему копируют права более опытного коллеги. Потом добавляют группу для импорта, затем временный доступ подрядчика. У роли остаётся прежнее название, а полномочия уже другие. Я начинаю проверку с итоговых прав конкретной учётной записи, включая все группы и наследование. Удалить разрешение из одной группы недостаточно, если другая продолжает его предоставлять. [Модель прав Bitrix Framework](https://docs.1c-bitrix.ru/pages/security/access-control.html).

Для IT-директора здесь важна граница ущерба. Утрата редакторского аккаунта должна ограничиваться доступными материалами. При выполнении PHP злоумышленник получает возможности процесса приложения: потенциальный доступ к базе, конфигурации, интеграционным секретам и файлам. Это ещё не автоматический root и не гарантированный захват всей корпоративной сети. Но для остановки интернет-магазина или утечки заказов права суперпользователя Linux часто вообще не нужны. Поэтому я оцениваю роль по последствиям её компрометации, а не по должности владельца.

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

Где RCE подтверждён, а где начинается преувеличение

Конкретный пример — PT-2025-28, он же BDU:2025-08666. Positive Technologies описывает выполнение произвольного кода при создании нового элемента пользователем, имеющим право редактировать свойства инфоблока. Уязвимы версии модуля iblock до 24.300.100; производитель подтвердил проблему. Оценка CVSS 4.0 — 8,9, причём вектор содержит PR:H: требуются высокие привилегии. Это хорошо показывает ошибку в терминологии: сотрудника могут считать непривилегированным, хотя выданные ему возможности уже привилегированные. [Бюллетень PT-2025-28](https://ptsecurity.com/research/threatscape/PT-2025-28/).

Вендор называет дефект Local File Inclusion при изменении свойств инфоблока. Речь о подключении серверного файла, которое при соответствующих условиях приводит к исполнению кода. Архитектурный контекст понятен из документации: настройки инфоблока содержат пути к пользовательской форме редактирования и обработчику полей перед сохранением. Эти возможности предназначены разработчикам. Однако открытые бюллетени не раскрывают точное поле эксплуатации, поэтому я не выдаю описание штатных настроек за проверенный маршрут атаки. [Карточка уязвимости](https://www.1c-bitrix.ru/vul/25346824/), [настройки инфоблока](https://dev.1c-bitrix.ru/user_help/content/iblock/iblock_edit.php).

Исправление вышло 23 апреля 2025 года в iblock 24.300.100. В истории версии указано усиление проверок доступа при редактировании настроек и проверки путей при импорте. На обновлённый сайт нельзя автоматически переносить вывод «iblock_edit равняется RCE»: это утверждение требует отдельного доказательства. Но и оставлять лишние технические полномочия после обновления я не вижу смысла. Проверять нужно версию установленного iblock и фактическое завершение обновлений; номер Главного модуля не заменяет эту проверку. [История версий iblock](https://dev.1c-bitrix.ru/docs/versions.php?lang=ru&module=iblock).

24.300.100 — версия исправления конкретного дефекта, а не рекомендация остановить обновления на уровне 2025 года.
Когда редактор инфоблока получает доступ к серверному коду — схема

Какие разрешения я забираю у контентных ролей

Для описанной роли я выбираю расширенное управление правами и собственный уровень с понятным составом операций. Сначала включаю этот режим на тестовой копии и проверяю наследование. Системный уровень не пытаюсь переписать под редакцию: создаю пользовательский через «Настройки → Пользователи → Уровни доступа», затем назначаю его нужной группе на нужном инфоблоке. Переход режима требует проверки действующих назначений, включая исключения для разделов и элементов. [Создание уровня доступа](https://dev.1c-bitrix.ru/user_help/settings/users/task_edit.php).

Список ниже — мой исходный набор ограничений. Для обычной работы оставляю element_read, section_read, element_edit; создание разрешаю через section_element_bind в согласованных разделах, показ в административной части — через iblock_admin_display. Создание и изменение разделов добавляю только тем, кто действительно управляет рубрикатором. Это не универсальная роль на все сайты: карточка торгового каталога, документооборот и пользовательские компоненты могут требовать дополнительных проверок. [Назначение операций](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/getpermission.php).

Удаление элементов, изменение цен и публикация без согласования — самостоятельные бизнес-риски. Я не называю их разрешениями на PHP и не запрещаю автоматически. Зато право менять PHP-код рассматриваю отдельно от инфоблоков: операция edit_php относится к Главному модулю и даёт весьма широкие возможности. Документация даже связывает с ней возможность авторизации под другим пользователем. Редактору такое полномочие не нужно для загрузки картинки или правки текста. [Документация управления пользователями](https://dev.1c-bitrix.ru/user_help/settings/users/user_admin.php).

Не ищите универсальный флаг iblock_edit_php: в проверенной официальной матрице такой операции нет.
Порядок действий: Какие разрешения я забираю у контентных ролей — схема
Порядок действий: Какие разрешения я забираю у контентных ролей

Как сохранить импорт, не возвращая полный доступ

Сначала я выясняю, что именно называют импортом: CSV элементов, перенос структуры через XML, обмен с 1С или сторонний загрузчик Excel. Это разные механизмы. Для импорта через модуль «Торговый каталог» документация выделяет уровень «Управление импортом/экспортом». У компонента обмена с 1С есть GROUP_PERMISSIONS — список групп, которым разрешена загрузка. Эти настройки дают отправную точку, но не гарантируют достаточность прав для любого профиля и любой версии. [Импорт товаров](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=34&LESSON_ID=4515), [параметры обмена с 1С](https://dev.1c-bitrix.ru/user_help/components/content/1c_exchange/catalog_import_1c.php).

Дальше разделяю загрузку данных, настройку профиля и изменение структуры. Если штатный загрузчик работает с минимальной ролью и не открывает опасных возможностей, оставляю его. Если для ежедневного файла он требует слишком широких полномочий, выбираю ограниченную форму загрузки с фиксированным профилем. Оператор передаёт файл и видит результат, а сервер определяет целевой инфоблок, допустимые поля и правила обработки. Такой интерфейс требует разработки и сопровождения; для двух импортов в год может оказаться разумнее запуск техническим специалистом по заявке.

Само создание служебной учётной записи проблему не решает. Если пользователь может менять выполняемое PHP-выражение, путь к обработчику или произвольный серверный файл в её задании, он по-прежнему управляет исполнением. Более того, пользовательские шаблоны импорта каталога штатно являются PHP-скриптами. Поэтому код преобразований храню в репозитории, изменения провожу через проверку разработчиком, а оператору оставляю только согласованные параметры данных. [Устройство шаблонов импорта](https://dev.1c-bitrix.ru/api_help/catalog/templates_import.php).

У собственного обработчика проверяю авторизацию и право на целевой объект на сервере, до записи данных; для формы с cookie-сессией — также CSRF-токен. Клиентскому IBLOCK_ID не доверяю; API-вызов сам по себе не считаю гарантией проверки прав. Файл получает серверное имя и хранится вне публичного каталога, изображения проходят отдельную проверку. Запрещаю передавать PHP, пути к локальным файлам и произвольные адреса скачивания, если они не нужны процессу. В журнале сохраняю инициатора, профиль, хеш файла, количество изменений и ошибки. Пароли и полные строки с чувствительными данными туда не попадают.

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

Практический разбор: модельный стенд ООО «Вектор»

Разберу конкретный учебный сценарий, а не приписанный реальному клиенту пентест. ООО «Вектор» — условная производственная компания на 120 рабочих мест. В модели четыре редактора, один оператор каталога, два администратора с отдельными техническими аккаунтами и 18 000 карточек в инфоблоке ID 17. Для стенда закладываю 4 vCPU, 8 ГБ RAM и 80 ГБ SSD. Это стартовый ресурс для проверки сценария, не норматив производительности магазина и не результат нагрузочного теста.

Окружение: Debian 12, Nginx 1.22, PHP-FPM 8.3 и MariaDB 10.11 с обновлениями безопасности выбранных веток. Вендор описывает эти ветки Debian, Nginx и MariaDB, а для PHP 8.3 — подключение дополнительного репозитория. Историческое состояние для разбора — iblock 24.300.0; целевое контрольное — 26.0.0, опубликованное 8 июня 2026 года. Остальные модули обновляются согласованно через штатный механизм. Старое состояние допустимо только в изолированной лаборатории. PHP 8.3 получает исправления безопасности до конца 2027 года; совместимость проектных модулей проверяется отдельно. [Окружение Debian](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=32&LESSON_ID=31042), [версии iblock](https://dev.1c-bitrix.ru/docs/versions.php?lang=ru&module=iblock), [поддержка PHP](https://www.php.net/supported-versions.php).

Исходная ошибка модели — общая группа всех пяти контентных пользователей с iblock_edit и управлением правами. Я заменяю её редакторским уровнем, оператору добавляю доступ к ограниченному загрузчику. Настройки моего загрузчика фиксирую так: IBLOCK_ID=17, ключ сопоставления XML_ID, разрешённые поля NAME и PREVIEW_TEXT, максимум 20 МиБ и 20 000 строк, один одновременно выполняемый импорт, отсутствие в файле не вызывает удаление. Это спецификация собственного обработчика, не набор штатных флагов Битрикс. Создание новых карточек разрешено; изменение схемы и запуск пользовательского PHP отсутствуют.

Для приёмки задаю файл из 1 000 уникальных строк: 900 существующих карточек с изменёнными данными и 100 новых. Ожидаемый итог — 900 обновлений, 100 созданий, ноль удалений; повторная загрузка не создаёт дубликаты. Отдельный файл с неизвестной колонкой отклоняется до записи. Сценарий заканчивается проверяемой матрицей: у пяти контентных аккаунтов нет технических операций, у оператора остаётся загрузка, у двух администраторов — управление конфигурацией. Это расчётный результат и критерии стенда; замеры времени и фактический протокол испытаний здесь не заявляются.

Если после ограничения прав импорт сломался, разбирайте конкретный отказ и профиль. Возвращение полного доступа всем пяти пользователям отменяет результат работы.
Цифры и версии: Практический разбор: модельный стенд ООО «Вектор» — схема
Цифры и версии: Практический разбор: модельный стенд ООО «Вектор»

Что ограничиваю на сервере

Для такого стенда выделяю сайту отдельного пользователя ОС и отдельный пул PHP-FPM. В существующем пуле задаю следующий фрагмент конфигурации: user = vector-web group = vector-web security.limit_extensions = .php Пользователя и разрешения файлов предварительно создаёт администратор. Последняя настройка ограничивает расширение основного скрипта, передаваемого FPM; она не запрещает приложению подключать другие файлы через include. Выдавать её за исправление LFI было бы ошибкой. [Настройки PHP-FPM](https://www.php.net/manual/en/install.fpm.configuration.php).

Код проекта доступен веб-процессу для чтения, а запись разрешается в явно определённые каталоги загрузок, кеша и временных данных. Обновление платформы выполняется в управляемом окне с необходимыми файловыми правами: запрет записи в ядро иначе действительно сломает обновления. Входящие CSV храню, например, в /srv/vector/import-inbox вне DOCUMENT_ROOT, без публикации через alias. Соседние сайты получают других пользователей ОС и другие учётные данные базы. Так уменьшается возможный ущерб от одной скомпрометированной установки.

Запрет исполнения PHP в загрузках полезен, но относится к прямой обработке файлов веб-сервером. Он не отменяет код, который уже выполняется внутри приложения. Аналогично disable_functions не является полноценной песочницей: отключение shell_exec не отнимает у PHP доступ к разрешённым данным. Приоритет у меня такой: исправления, роли, защита кода от записи, разграничение сайтов. Тонкую настройку дополнительных ограничений делаю после этого, проверяя импорт и фоновые задания. [Ограничения директив PHP](https://www.php.net/manual/en/ini.core.php#ini.disable-functions).

У отдельного PHP-процесса могут остаться широкие права внутри базы своего сайта. Изоляция между сайтами уменьшает последствия, но не заменяет проверки в приложении.

Как принять работу и не вернуть опасные права

Я принимаю такую настройку через два набора проверок: разрешённые действия работают, запрещённые отклоняются сервером. Исчезнувшая кнопка ничего не доказывает. На тестовой копии нужны прямые обращения к соответствующим обработчикам под непривилегированными аккаунтами, включая подмену целевого инфоблока в собственном загрузчике. Для проверки границ доступа не нужен веб-шелл: достаточно подтвердить отказ в изменении технических параметров и отсутствие изменений в данных. В расширенном режиме разработчик использует проверки UserHasRightTo, а не устаревший CIBlock::GetPermission. [Ограничения старого метода](https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/getpermission.php).

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

Организационно я закрепляю владельца каждой технической роли и срок временных доступов. Повторную проверку назначаю после смены загрузчика, установки модуля и изменения схемы каталога. На первом этапе можно отложить косметику административного меню и переименование всех групп. Нельзя откладывать устранение подтверждённой уязвимости и проверку эффективных полномочий. IT-директору нужен простой доказуемый результат: редакция продолжает выпускать материалы, импорт продолжает обновлять каталог, а изменение серверной логики требует отдельного технического доступа.

Попросите подрядчика показать три вещи: установленное исправление, итоговые операции редактора и успешный импорт под ограниченной ролью.
Обратите внимание: Как принять работу и не вернуть опасные права — схема
Обратите внимание: Как принять работу и не вернуть опасные права

Частые вопросы

Любой контент-менеджер в Битрикс может выполнить код?

Нет. Подтверждённая PT-2025-28 требует определённых прав управления инфоблоком и затрагивает iblock до 24.300.100. Одно название роли или наличие права редактировать карточки этого не доказывает.

Достаточно убрать edit_php?

Нет. Нужно проверить iblock_edit, управление правами, доступ к файлам и возможности дополнительных загрузчиков. Исправление уязвимого модуля остаётся обязательным.

Можно ли сохранить штатный импорт?

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

Обновление до 24.300.100 решает все проблемы безопасности?

Эта версия содержит исправление рассматриваемого дефекта. В 2026 году нужно устанавливать актуальные совместимые обновления, проверять дополнительные модули и убирать лишние права.

Проверьте границы доступа редактора
Я помогу проверить права контентных ролей и отделить рабочий импорт от управления серверным кодом. Для согласования услуг rf-buh подготовьте список модулей и описание загрузки: по ним определим объём проверки.
Бесплатная консультация →
© ООО «АйТи-Фреш» · Москва · Все статьи