Xakep #305. Многошаговые SQL-инъекции
База данных Lotus Notes содержит документы, которые организованы в представления. Списки управления доступом могут применяться непосредственно к базе данных, представлениям и документам. Если пользователь был лишен доступа к представлениям, то возможно обойти набор разрешений и получить доступ к защищенным документам.
Причина этой уязвимости существует в возможности обращения к документу от любого представления.
В качестве примера уязвимости приведем базу данных статистики, statrep.nsf. Если вы открываете представление:
http://server/statrep.nsf/136/?OpenView - документ существует ((136 - NoteID представления)
если открываем спрятанное представление $Alarms
http://server/statrep.nsf/$alarms/?OpenView - документ не существует.
Запрашивая один из документов:
http://server/statrep.nsf/136/8F6?OpenDocument
(8F6 - NoteID первого документа)
Note просматривает этот документ и запрашивает следующий URL:
http://server/statrep.nsf/$alarms/8F6?OpenDocument
OpenDocument возвращен, даже при том, что что $alarms не имеет никаких документов.
Теперь, если мы применим средство управления доступа к представлению и запросим:
http://server/statrep.nsf/136/8F6?OpenDocument
сервер выдаст ошибку: Illegal Argument exeception. Однако, если запросим:
http://server/statrep.nsf/$alarms/8F6?OpenDocument
сервер возвратит документ, даже при том, что к нему запрещен доступ.
Причина этого в том, что мы можем запрашивать любой документ через любое представление, вследствие того, что NoteID - простой указатель на местоположение в файле базы данных и пока сервер получает его ожидаемый синтаксис, то есть базу данных, представление документа обслужит этот запрос. Делая запрос с NoteID, мы просто вынуждаем сервер возвращать содержание произвольного местоположения в пределах файла.
Решение этой проблемы состоит в том, что если вы хотите применять ACL к представлению, документы в этом представлении также должны быть защищены.
В следующей версии Domino 5.0.9 проблема будет устранена.