Привилегированный модуль 1С и роль «Чтение»: почему ПравоДоступа не защищает

26.10.26

Администрирование - Роли и права

Проверила на 1С 8.3.27 и «Нано-УТ», что может сделать пользователь с ролью «Чтение», если в конфигурации есть привилегированный модуль. Привилегированный модуль позволил ему переименовать контрагентов; проверка «ПравоДоступа» внутри такого модуля вернула «Да» и ничего не остановила; «РольДоступна» и проверка в обычном модуле остановили. Расширение при включённом безопасном режиме привилегий не получило, при выключенном выполнило переданный код от имени читателя. В архиве скрипт на Python, который ищет такие места в выгрузке конфигурации и расширения, тесты и стенд для повторения опытов.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Аудит привилегированного режима 1С: скрипт, стенд и журнал опытов (22.10.2026)
.zip 48,82Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
Безопасность 1С
О чём это (в четырёх тезисах)
1.Привилегированный общий модуль с флагом «Вызов сервера» позволил пользователю с ролью «Чтение» переименовать контрагентов; проверка ПравоДоступа внутри такого модуля вернула «Да» и ничего не остановила.
2.Читателя остановили РольДоступна, роли пользователя информационной базы и проверка прав в обычном модуле до вызова привилегированного.
3.Расширение при включённом безопасном режиме не получило привилегий ни прямым включением, ни через привилегированный модуль основной конфигурации; при выключенном режиме записало данные и выполнило переданный код от имени читателя.
4.Платформа не загружает привилегированный общий модуль в расширение (код возврата 101); безопасный режим расширения в выгрузке в файлы не хранится, его читают из базы. Скрипт на Python находит рискованные места в выгрузке.
Протокол проверки
Что проверялосьПривилегированный общий модуль, проверки ПравоДоступа и РольДоступна, включение привилегированного режима в расширении при включённом и выключенном безопасном режиме, загрузка привилегированного модуля в расширение, скрипт-сканер выгрузки.
Где и когда22.10.2026, Windows 11 Pro, i5-2400, 7,9 ГБ ОЗУ, SATA SSD; 1С 8.3.27.2130 x86, файловая база «Нано-УТ 2.0»; пользователи admin (Администратор) и reader (Чтение), вызовы через внешнее соединение.
КакЖурнал опытов получен скриптом run_experiments.py на новой базе: 21 вызов методов; сканер запущен на выгрузках стенда и на всей «Нано-УТ» (81 файл BSL); 15 тестов логики.
РезультатЧитатель обошёл роль через привилегированный модуль; ПравоДоступа внутри него «Да»; РольДоступна и роль в обычном модуле остановили; безопасный режим расширения «Да» блокирует привилегии, «Нет» выдаёт их; привилегированный модуль в расширении платформа отклонила.
ГраницыТонкий и веб-клиент, заимствованные модули и перехватчики расширений, подписки на события на платформе, профили безопасности и RLS, платформа ниже 8.3.27 не проверялись.
Суть статьи

Что может сделать пользователь с ролью «Чтение», если в конфигурации есть привилегированный модуль, и что может расширение: опыт на 1С 8.3.27 и «Нано-УТ», вывод платформы по каждому вызову и скрипт на Python, который ищет такие места в выгрузке конфигурации и расширения.

Ключевые идеи
  • Внутри привилегированного модуля ПравоДоступа на стенде вернула «Да» для читателя; роли проверяют через РольДоступна либо в обычном модуле до вызова.
  • Привилегированный общий модуль в расширении платформа не загружает (код возврата 101).
  • Привилегии расширения зависят от свойства «Безопасный режим»: при значении «Да» режим не включается, при «Нет» включается.
  • Безопасный режим расширения не хранится в выгрузке в файлы: его читают из базы через РасширенияКонфигурации.Получить().
  • Скрипт ищет флаги модулей, включение режима без проверки, Выполнить и склеенные запросы; решение остаётся за человеком.
Главная мысль

Опасность привилегированного режима определяют роли, место проверки прав и свойство расширения «Безопасный режим»; проверять их нужно пользователем с урезанной ролью.

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

Привилегированный режим отключает проверку прав для кода, который в нём выполняется. Я проверила опытом, что получит пользователь с ролью «Чтение», если в конфигурации есть привилегированный модуль, помогает ли проверка ПравоДоступа внутри такого модуля и что умеет расширение, которому платформа привилегированный модуль не разрешает. Опыты шли на «Нано-УТ 2.0», платформа 1С 8.3.27.2130, база файловая, пользователей два: admin с ролью «Администратор» и reader с ролью «Чтение».

Результат. Привилегированный модуль с флагом «Вызов сервера» позволил читателю переименовать контрагентов. Проверка ПравоДоступа внутри привилегированного модуля вернула «Да» и ничего не остановила; проверка РольДоступна и роль в обычном модуле остановили. Расширение с включённым безопасным режимом привилегий не получило ни прямым включением, ни вызовом привилегированного модуля основной конфигурации. С выключенным безопасным режимом то же расширение записало данные от имени читателя и выполнило переданный ему код. Чтобы находить такие места в выгрузке конфигурации и расширения, я написала скрипт на Python; в конце есть его результат на стенде.

Стенд

Условие Значение
Платформа 1С:Предприятие 8.3.27.2130 (x86), файловая база, подключение через COM (внешнее соединение)
Конфигурация «Нано-УТ 2.0» (наша учебная торговая конфигурация) плюс служебные общие модули стенда: четыре модуля, привилегированные и обычные (ПривСервис, ПривПроверкаПрав, ПривПроверкаРолей, ПривСтенд)
Расширение АудитРасш: три общих модуля, создано из файла .cfe и загружено пакетным Конфигуратором
Пользователи admin - роль «Администратор»; reader - роль «Чтение» (в роли справочники «Контрагенты» и «Склады» только для чтения, удаление запрещено)
Компьютер Intel Core i5-2400 3,1 ГГц (4 ядра, 2011 год), 7,9 ГБ ОЗУ, SATA SSD, Windows 11 Pro. Компьютер рабочий: во время опытов были открыты браузер и приложение Claude

Время работы здесь не замерялось: опыты отвечают на вопрос «пропустит или нет», скорость в них не участвует.

Рис. 1. Схема стенда: база, пользователи, модули основной конфигурации, расширение и скрипт-сканер

Вызовы шли из внешнего соединения: у модулей стенда включён флаг «Внешнее соединение», а подключение выполнено под логином и паролем нужного пользователя. Тонкий и веб-клиент в опытах не участвовали.

Что может привилегированный модуль пользователю с ролью «Чтение»

Контрольный опыт: читатель пытается создать контрагента обычным кодом.

Рис. 2. Снимок окна терминала: читатель пытается создать контрагента обычным кодом

Платформа отказала: у роли «Чтение» нет права добавления. Теперь вызов метода общего модуля ПривСервис с флагами «Привилегированный» и «Вызов сервера». Метод переименовывает контрагента и никаких проверок не делает:

BSL UTF-8 фрагмент
1
2
3
4
5
6
7
8
9
10
11
12
Функция ПереименоватьКонтрагента(Знач Имя, Знач НовоеИмя) Экспорт

	Ссылка = Справочники.Контрагенты.НайтиПоНаименованию(Имя, Истина);
	Если Не ЗначениеЗаполнено(Ссылка) Тогда
		Возврат "не найден: " + Имя;
	КонецЕсли;
	Объект = Ссылка.ПолучитьОбъект();
	Объект.Наименование = НовоеИмя;
	Объект.Записать();
	Возврат "переименован: " + Имя + " -> " + НовоеИмя;

КонецФункции
Рис. 3. Снимок окна терминала: читатель переименовал контрагента через привилегированный модуль

Читатель записал элемент справочника, на который у его роли нет права записи. Флаг «Вызов сервера» делает метод доступным клиентскому коду, поэтому в рабочей конфигурации такой метод можно вызвать из клиентской формы; этот путь я не проверяла. В моих опытах вызов шёл через внешнее соединение, код модуля выполнялся на сервере.

Проверка прав внутри привилегированного модуля

Естественная защита: в начале метода спросить платформу, может ли пользователь изменять справочник.

BSL UTF-8 фрагмент
1
2
3
4
5
6
Функция ПереименоватьКонтрагента(Знач Имя, Знач НовоеИмя) Экспорт

	Если Не ПравоДоступа("Изменение", Метаданные.Справочники.Контрагенты) Тогда
		ВызватьИсключение "Недостаточно прав для изменения контрагентов";
	КонецЕсли;
	// ... дальше то же переименование

Модуль привилегированный, и внутри него проверка ничего не ограничила:

Рис. 4. Снимок окна терминала: проверка ПравоДоступа внутри привилегированного модуля

ПравоДоступа ответила «Да» для пользователя, у которого права на изменение нет: внутри привилегированного модуля работает привилегированный режим, и ПривилегированныйРежим() возвращает «Да». Исключение не сработало: в коде проверка есть, а читателя она не остановила.

Что ограничивает вызывающего

На стенде читателя остановили такие варианты.

Вариант Читатель reader Администратор admin
РольДоступна(Метаданные.Роли.Администратор) внутри привилегированного модуля отказ: исключение «нужна роль Администратор» выполнено
ПользователиИнформационнойБазы.ТекущийПользователь().Роли.Содержит(...) внутри привилегированного модуля отказ выполнено
ПравоДоступа в обычном модуле до вызова привилегированного (на стенде модуль расширения РасшОбертка) отказ: «Недостаточно прав для изменения контрагентов» не запускалось

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

Рис. 5. Снимок окна терминала: что видят проверки в обычном модуле

Правило, которое я вынесла для себя: привилегированный модуль проверяет роли, потому что ПравоДоступа внутри него на стенде вернула «Да»; либо проверка стоит в обычном модуле перед вызовом. Роли в РольДоступна при этом должны быть теми, что реально дают разрешение на операцию.

Как безопасный режим расширения влияет на привилегии

У расширения конфигурации есть свойство «Безопасный режим». Скрипт загрузки по умолчанию дал значение «Да»: расширения: АудитРасш: активно=Да, безопасный режим=Да, применено=Нет. Последнее поле - неудачная подпись стенда: так печатается ИзменяетСтруктуруДанных(), расширение структуру данных не меняет, на опыт это не влияет. В расширении модуль РасшСервис с методами, среди них: один включает привилегированный режим и сообщает, включился ли он, второй включает режим и переименовывает контрагента, третий вызывает привилегированный модуль основной конфигурации ПривСервис без проверок. Модуль РасшВыполнение включает режим и выполняет переданную строку кода.

Безопасный режим включён:

Рис. 6. Снимок окна терминала: безопасный режим расширения включён

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

Безопасный режим выключен (администратор переключил свойство расширения средствами платформы):

Рис. 7. Снимок окна терминала: безопасный режим расширения выключен

Тот же код расширения без единой правки сделал всё: включил режим, записал контрагентов и по команде строки создал в справочнике «Склады» пустой элемент от имени читателя. В журнале основного прогона (evidence/experiments.txt, раздел 3) список складов до выполнения кода пуст (РЕЗУЛЬТАТ: 0:), после него - один элемент (РЕЗУЛЬТАТ: 1:). В основной конфигурации обычный модуль включает режим без ограничений: ПривСтенд.РежимПослеВключения() вернул «Да».

Для аудита расширений это значит, что код расширения ничего не говорит об опасности: её определяет свойство «Безопасный режим», а его в выгрузке расширения в файлы нет. Я выгрузила расширение командой DumpConfigToFiles -Extension и поискала в каталоге слова safe и «безопас»: совпадений не нашлось. Значение читают из базы: РасширенияКонфигурации.Получить(), свойство БезопасныйРежим.

Привилегированный модуль в расширении

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

Рис. 8. Снимок окна терминала: Конфигуратор не загрузил привилегированный модуль в расширение

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

Как найти такие места: скрипт

Скрипт priv_audit.py читает выгрузку конфигурации или расширения (XML и BSL), ничего не меняет и печатает замечания с уровнем:

Код Что ищет Уровень
P1 модуль с флагами «Привилегированный» и «Вызов сервера» критический
P2 экспортный метод привилегированного модуля без проверки прав высокий
P8 проверка ПравоДоступа внутри привилегированного модуля (на стенде вернула «Да») высокий
P3 УстановитьПривилегированныйРежим(Истина) в экспортном методе без проверки прав раньше включения высокий
P4 режим включён и не выключен в том же методе средний
P5 обработчик подписки на событие в привилегированном модуле высокий
P6 Выполнить, Вычислить, операции с файлами, запуск программ, COM и HTTP в привилегированном контексте высокий
P7 текст запроса, склеенный со строкой, в привилегированном контексте высокий
P0 справка: каталог распознан как выгрузка расширения, безопасный режим проверять в базе низкий

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

Bash UTF-8 CLI
1
python priv_audit.py <каталог выгрузки> [<каталог> ...] [--json] [--brief] [--min-level medium]

Код возврата 0 означает, что замечаний выше порога нет, 1 - есть, 2 - ошибка запуска, поэтому скрипт можно поставить в проверку перед коммитом.

Что скрипт нашёл на стенде

«Нано-УТ 2.0» целиком (81 файл BSL, 212 XML) он разобрал без замечаний: в конфигурации нет привилегированных модулей и вызовов УстановитьПривилегированныйРежим. Выгрузка основной части стенда:

Рис. 9. Снимок окна терминала: скрипт на основной части стенда, ключ --brief

В журнале в архиве у каждого замечания есть вторая строка с пояснением, ключ --brief печатает только первую. Замечания P1 и P2 указывают на метод, которым читатель переименовал контрагентов, P8 на проверку ПравоДоступа, P6 на Выполнить. По расширению АудитРасш скрипт выдал три замечания P3 (включение режима без проверки раньше включения), три P4, замечание P6 на РасшВыполнение.ВыполнитьКод и справку P0. Включён ли безопасный режим, скрипт не знает и пишет об этом в справке P0.

Подписка на событие ПриЗаписи справочника «Контрагенты» с обработчиком в привилегированном модуле показана скриптом (P5) по XML-файлу подписки в примере. Платформа подписку в расширение не приняла и ответила «Имя события должно быть задано»; я предположила, что причина в отсутствии в расширении заимствованного справочника «Контрагенты», но проверить это не успела; журнал этой попытки в архив не вошёл. Поведение P5 на платформе я не проверяла.

Что не проверялось

  • Тонкий клиент, веб-клиент, HTTP-сервисы и фоновые задания: вызовы шли из внешнего соединения.
  • Расширения, в которых заимствован и изменён привилегированный модуль основной конфигурации (перехватчики «Перед», «После», «Вместо»). Попытка сделать так на стенде не сработала, причину я не разбирала, журнал попытки в архив не вошёл.
  • Расширения ограниченного назначения (исправление, добавление) и поведение при безопасном режиме расширения на платформе ниже 8.3.27.
  • Права на уровне записей (RLS), профили безопасности кластера и режим защиты от опасных действий.
  • Подписки на события и регламентные задания с привилегированными обработчиками: подписку проверял только скрипт по XML.
  • Большие конфигурации: скрипт запущен на «Нано-УТ» и на стенде, типовые УТ и ERP не разбирались.

Итог

Код привилегированного модуля выполняется без проверки прав для любого, кто может его вызвать, и проверка ПравоДоступа внутри такого модуля не помогает: на стенде она возвращала «Да» для читателя. Защитой оказались РольДоступна, роли пользователя информационной базы и проверка в обычном модуле до вызова. У расширения безопасный режим закрывает и прямое включение привилегированного режима, и вызов привилегированного модуля основной конфигурации; выключенный безопасный режим возвращает расширению все права, и в файлах выгрузки этого свойства нет. Скрипт в архиве находит подозрительные места, но решает человек, и перед выводами нужно проверять конфигурацию так же, как здесь: пользователем с урезанной ролью.

Источники

Файл к статье

Архив privileged-audit-companion.zip (стенд от 22.10.2026):

  • priv_audit.py: скрипт, только стандартная библиотека Python 3.9+; test_priv_audit.py: 15 тестов логики; verify.py: проверка без платформы;
  • examples: выгрузки модулей стенда и расширения, на которых скрипт даёт замечания;
  • stand: сборка конфигурации и расширения, пользователи, файл АудитРасш.cfe, скрипт run_experiments.py, который повторяет все опыты из статьи (нужны платформа 8.3.27 x86 и «Нано-УТ 2.0»);
  • evidence: журнал опытов и результаты скрипта.

Архив проверен из чистой распаковки: python verify.py проходит без платформы, run_experiments.py повторил журнал опытов на новой базе. README.md описывает порядок работы.

 
Нинель Адольевна Щербакова
Нинель Адольевна Щербакова (Ninel_S)
Архитектор • SRE & DevOps инженер • HighLoad 1С
Автор технических публикаций на Infostart. Разработчик NOPik, SRE-Suite-for-1C и мультиагентных ассистентов для экосистемы 1С:Предприятие.

Вступайте в нашу телеграмм-группу Инфостарт

1С:Предприятие Безопасность 1С Расширения конфигурации Роли и права Привилегированный режим Аудит кода

См. также

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    285456    1606    423    

1219

Зарплата Роли и права Системный администратор Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

9675 руб.

27.05.2021    60505    536    129    

374

Инструменты администратора БД Роли и права Системный администратор Разработчик Пользователь 1С 8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.04.2026, версия 1.4.1, работает в 1С:ФРЕШ!

23180 руб.

06.12.2023    25043    85    14    

118

Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    28689    103    46    

107

SALE! 20%

Роли и права 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Универсальная обработка по настройке прав доступа пользователей в 1СЗУП, КА, УТ, ЕРП, ERP, УНФ, Розница, Управление холдингом) и разграничений позволяет в несколько кликов настроить даже самые нестандартные права.

5750 4600 руб.

22.12.2021    38571    209    78    

240

Логистика, склад и ТМЦ Роли и права Разработчик Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

5084 руб.

21.05.2019    1703925    607    197    

151

Роли и права Системный администратор Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9516 руб.

14.09.2022    9380    16    6    

18

Ценообразование, анализ цен Роли и права Системный администратор 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С:УНФ 1.6 и 3.0. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

5100 руб.

23.02.2018    69251    184    264    

171
Для отправки сообщения требуется регистрация/авторизация