Неправильное использование ограничений доступа к каталогам электронной почты
приводит к возникновению возможности преодоления системы защиты. В ряде версий
Unix почтовая программа после добавления нового сообщения к файлу, в котором
хранятся поступившие сообщения ("почтовый ящик" — mbox), назначает владельцем
этого файла пользователя, на имя которого поступило сообщение. При этом не
производится никаких проверок его атрибутов. В дополнение к этому многие системы
настроены таким образом, что каталоги, содержащие электронную почту пользователей,
доступны по записи для всех. Это означает, что любой пользователь может удалить
"почтовый ящик" пользователя root, и заменить его копией командного интерпретатора с
установленным атрибутом SUID и разрешением для выполнения любым пользователем.
После этого пользователь может послать на имя root любое сообщение. Программа,
обслуживающая почту, добавит это сообщение в конец файла — "почтового ящика" и
назначит ему нового владельца — root. Таким образом, в системе появится командный
интерпретатор, с установленным атрибутом SUID, владельцем root, и доступный для
выполнения для любого пользователя.
Индекс: U7. Система: Unix.
Источник информации: М. Bishop. "Security problems with the UNIX operating
system", Computer Science Department, Purdue University, West Lafayette, Indiana,
March, 1982.
В Unix имеется утилита Uux, реализующая удаленное выполнение ограниченного
множества команд и программ. Командная строка, содержащая имя и параметры
программы, которую необходимо выполнить, передается программой Uux на удаленную
машину, где осуществляется ее анализ и проверка на принадлежность запускаемой
программы к множеству доступных. Если анализ и проверка завершились успешно,
порождается соответствующий процесс. В процедуре анализа командной строки
содержалась ошибка, которая позволяла выполнять программы, не входящие в
множество допустимых.
Разбор командной строки был организован следующим образом. Uux читала
первое слово командной строки (имя команды), проверяла его, а затем пропускала (как
аргументы и опции команды) все последующие символы до первого разделителя команд
(признака конца команды). Затем производился разбор следующей команды и т.д. После
окончания разбора вся строка целиком передавалась командному интерпретатору для
выполнения. Но множество проверяемых разделителей команд было неполным, символы
"|", "L", "," — учитывались, а "&" и "у" — нет. Таким образом, команды, следующие за
неизвестным программе Uux разделителем, не проверялись на принадлежность к
множеству допустимых, но выполнялись. Следовательно, пользователь мог осуществить
удаленный запуск любых программ и выполнение любых команд в обход контроля Uux.
Индекс: U10. Система: Unix.
Источник информации: Е. Н. Spafford. "Crisis and Aftermath", Comm. of the
ACM 32, June 1989, pp. 678-687.