intranet 26.1700.0 Безопасность

Intranet 26.1400.0–26.1700.0: закрыты дыры в приглашениях и чатах групп, удалены intranet.backup и intranet.configs

1 мин чтения Устаревших API: 4
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Обновление безопасности

Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.

В коробочный Битрикс24 подряд вышли пять версий intranet: 26.1400.0, 26.1475.0, 26.1500.0, 26.1600.0 и 26.1700.0. Администратору стоит обновиться ради безопасности: закрыты подстановка кода в строки агентов, доступ к чужим чатам рабочих групп, приглашение в чужие отделы и обход проверки прав в sharepoint.link, а SSRF в нём сужен. Разработчику перед обновлением надо проверить кастомные шаблоны и код вокруг Entity\User, потому что два компонента удалены, конструктор сменился, а картинки модуля переехали из PNG в WebP.

Новое

Добавьте свои правила слайдеров без правки шаблона (26.1500.0)

Расширение intranet.sidepanel.bindings хранит правила, какие ссылки портала открываются в боковом слайдере. В 26.1500.0 у него появилось событие intranet:onCollectSidePanelBindings. Обработчик вызывает addExtension(), и ваше JS-расширение попадает в зависимости bindings и грузится вместе с ним. В модулях Битрикс24 на событие пока никто не подписан.

        <?php declare(strict_types=1);

use Bitrix\Intranet\Public\Event\OnCollectSidePanelBindingsEvent;
use Bitrix\Main\EventManager;

EventManager::getInstance()->addEventHandler(
    'intranet',
    'onCollectSidePanelBindings',
    static function (OnCollectSidePanelBindingsEvent $event): void {
        $event->addExtension('vendor.sidepanel-rules');
    },
);

    

Само расширение лежит в /local/js/vendor/sidepanel-rules/ с обычным config.php, правила слайдера описывайте в нём.

Ловите первый вход сотрудника в коробке (26.1500.0)

Событие intranet:onUserFirstInitialization с параметрами userId и invitationFields было и раньше. С 26.1500.0 коробка запускает инициализацию ещё и при первой авторизации, если у пользователя пустой LAST_LOGIN, и заодно ставит новичку задачи по шаблонам «для новых сотрудников». До этого задачи получали только в облаке. Ошибки инициализации, в том числе исключение из вашего обработчика, теперь пишутся в лог исключений (exception_handling) с текстом «User initialization failed for user ...». Раньше \Exception из обработчика молча терялся, а \Error всплывал.

        <?php declare(strict_types=1);

use Bitrix\Main\Event;
use Bitrix\Main\EventManager;

EventManager::getInstance()->addEventHandler(
    'intranet',
    'onUserFirstInitialization',
    static function (Event $event): void {
        $userId = (int)$event->getParameter('userId');
        // выдать доступы, назначить наставника
    },
);

    

Ограничьте выбор отделов поддеревом (26.1600.0)

Провайдер department в entity-selector принимает опцию allowedDepartmentIds. В диалоге остаются только эти отделы и их потомки. Опции приходят с клиента, поэтому это фильтр интерфейса, права на сервере проверяйте отдельно.

        const dialog = new BX.UI.EntitySelector.Dialog({
    targetNode: button,
    entities: [{
        id: 'department',
        options: { allowedDepartmentIds: [12, 40] },
    }],
});

    

Настройте 2FA под свою почту и сотрудников без смартфона (26.1600.0)

Адрес From для писем с кодами 2FA хранится в опции intranet:otp_email_from. Пустую опцию модуль заполняет сам адресом из шаблона письма USER_OTP_EMAIL_CONFIRM или адресом сайта по умолчанию. Поле «Email отправителя кодов двухфакторной аутентификации» в настройках безопасности по умолчанию скрыто и появляется, только если опция intranet:allow_show_change_2fa_email_send равна Y. Модуль кладёт этот адрес в поле OTP_EMAIL_FROM из обработчика OnBeforeEventAdd, а шаблоны писем используют макрос #OTP_EMAIL_FROM#. Тот же приём подойдёт для ваших почтовых событий. Переключатель «Разрешить подтверждение входа без мобильного приложения» включён по умолчанию. С ним сотрудник подключает push-2FA, подтвердив телефон по SMS или почту, без привязки смартфона. Когда кто-то выключает обязательную 2FA, портал просит подтверждения, а потом показывает в настройках, кто и когда это сделал.

Что заметят пользователи

  • Ссылки на папки Диска /folder/<код> и отдельные права по умолчанию для них (26.1475.0), подробнее в разборе disk 26.1200.0.
  • Страница прав бизнес-процессов /bizproc/permissions/ в разделе автоматизации, если включён новый дизайнер (26.1400.0).
  • Пресет «Системные пользователи» в списке сотрудников. Мастер увольнения системного пользователя может заодно отключить его REST-интеграции (26.1400.0).
  • В облаке появилось удаление собственного профиля (26.1400.0).

Что сломается

Найдите вызовы удалённых компонентов (26.1400.0, 26.1600.0)

В 26.1400.0 удалён bitrix:intranet.backup, в 26.1600.0 bitrix:intranet.configs вместе с классом IntranetConfigsComponent. Если брали у него processOldAccessCodes(), переходите на Bitrix\Intranet\Settings\CommunicationSettings::processOldAccessCodes(). Из шаблона Air пропал AirTemplate::isRightPanelExpanded() (26.1400.0).

Проверьте код вокруг Entity\User (26.1400.0, 26.1700.0)

В 26.1400.0 в конструктор Bitrix\Intranet\Entity\User после personalMobile вставлен ?string $personalGender. При позиционном вызове съедут workPosition, password и всё, что за ними, именованные аргументы работают как прежде. Интерфейс Contract\Repository\UserRepository получил пять методов (findRealUsersByIds, findSystemUsersByFilter и другие), и своя реализация перестанет ему соответствовать. В 26.1700.0 в Enum\UserRole добавился SYSTEM_USER = 'rest_system', и исчерпывающий match без default теперь упадёт с UnhandledMatchError.

Обновите AJAX-вызовы (26.1400.0, 26.1600.0)

В 26.1400.0 moveToIntranetAction компонента bitrix:intranet.user.profile стал ждать массив departmentIds вместо departmentId, а intranet.v2.Otp.logoutAll принимает только POST и возвращает networkLogoutUrl. В 26.1600.0 intranet.invite.register стал пропускать только EMAIL, PHONE, PHONE_COUNTRY, DEPARTMENT_ID, MESSAGE_TEXT и CONTEXT, остальные поля из своих форм приглашения он молча отбросит.

Поправьте ссылки на картинки (26.1400.0)

225 PNG модуля заменены на WebP, среди них картинки intranet.ustat, баннеры и шаблоны bitrix24 и login. Из /bitrix/js/intranet/, /bitrix/components/bitrix/intranet.*, /bitrix/images/intranet/ и /bitrix/templates/ старые файлы удалены, и кастомный CSS со ссылкой на такой .png получит 404. В публичной папке /images/ PNG остались, WebP легли рядом.

Проверьте /timeman/ при выключенном учёте времени (26.1500.0)

Если в настройках инструментов выключен «Учёт рабочего времени», страницы /timeman/ показывают заглушку, а блок учёта времени в шаблоне и связанные сервисы отключаются. В коробке раньше при установленном timeman страницы открывались несмотря на выключатель. В облаке выключение больше не удаляет модули timeman и timemanmobile.

Что закрыли

  • 26.1400.0. sharepoint.link проверяет адрес сервера SharePoint с таймаутами и без чтения ответа, в облаке запрещены приватные IP. Режим test больше не обходит проверку доступа к инфоблоку.
  • 26.1400.0. Строка агента выполняется как PHP, поэтому параметры в агентах напоминаний календаря, CIntranetEventHandlers::DeleteLogEntry и отсутствий теперь приводятся к числу или экранируются. Заголовок Host при сборке ссылок календаря проверяется.
  • 26.1400.0. Перевыпустить ссылку-приглашение в коллабу может только её владелец и только POST-запросом. Пункт приложения в левом меню видят только те, у кого есть доступ к его встройке.
  • 26.1500.0. Чат рабочей группы через intranet.controlbutton получают участники и те, кто может редактировать группу. Чат события календаря достаётся только участникам события.
  • 26.1600.0. Отделы в intranet.invite.register урезаются до тех, куда приглашающий вправе звать. Отключить или отложить 2FA можно только на период из списка (1–10 дней), бессрочно разрешено лишь с правом security_edit_user_otp, интегратор свою 2FA не отключит.
  • 26.1700.0. Секрет ссылки саморегистрации меняет только администратор.

Мелочи и находки

  • Первая страница портала вида /company/personal/user/<id>/tasks/ теперь хранится с #USER_ID#, и каждый попадает в свои задачи (26.1700.0).
  • Public\Provider\Otp\DayListProvider::getList() отдаёт пункт «бессрочно» только при переданном $targetUser и праве security_edit_user_otp (26.1600.0).
  • Integration\Tasks::createDemoTasksForUser() возвращает Result вместо void (26.1500.0).

Устаревшие и удалённые API в этой версии

Символ Статус Чем заменять
bitrix:intranet.backup Удалено —
bitrix:intranet.configs Удалено —
IntranetConfigsComponent::processOldAccessCodes() Удалено Bitrix\Intranet\Settings\CommunicationSettings::processOldAccessCodes()
Bitrix\Intranet\Integration\Templates\Air\AirTemplate::isRightPanelExpanded() Удалено —

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

socialnetwork 26.200.0 Безопасность Свежее

Socialnetwork 26.200.0: XSS в заявках и списке участников, копирование проекта по праву редактирования и курсор в log.blogpost.get

Socialnetwork 26.200.0 закрывает XSS в списке участников проекта и в заявках в группы, подмену ссылок через название группы и утечку задач в контекст AI. Копировать проект теперь можно только с правом на редактирование. Администраторам, у которых стояли 26.100.0 или 26.150.0, стоит проверить права с…

2 мин
sign 26.800.0 Безопасность Свежее

Sign 26.800.0: закрыли доступ к чужим документам, к приглашению на подпись можно дописать текст

Sign 26.800.0 для коробочного Битрикс24 закрывает несколько дыр в проверке прав: часть AJAX-экшенов модуля не проверяла, есть ли у пользователя доступ к конкретному документу, группе или участнику. Если на портале подписывают документы, с сотрудниками или с клиентами, обновляйтесь. Из нового — текст…

2 мин
search 26.100.0 Ломающее Свежее

Search 26.0.0–26.100.0: новые атрибуты Sphinx, переиндексация из консоли и исправленная проверка прав

Модуль поиска обновился сразу на две версии: 25.200.0 → 26.0.0 → 26.100.0. Без правки sphinx.conf индексация на Sphinx перестанет работать, а у встроенного движка и FULLTEXT MySQL/PostgreSQL, судя по коду, заголовки новых записей больше не попадают в индексируемый текст. В 26.100.0 закрыли пропуск п…

2 мин
rest 26.800.0 Ломающее Свежее

Rest 26.700.0–26.800.0: отложенная установка приложений, строгий bool в REST 3.0 и вебхуки со сроком действия

В БУС вышли подряд две версии `rest`: 26.700.0 и 26.800.0. В 26.700.0 у входящих вебхуков появился срок действия, а сотрудник без права установки может попросить администратора поставить приложение. В 26.800.0 поменялось время срабатывания `OnRestAppInstall`, REST 3.0 стал строже проверять входные д…

2 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти