После очередного сканирования сервиса на проникновения, наткнулся на очень инетрессную уязвимость в JSF 2.1 связанную с доступом к ресурсам через http без авторизации.

enter image description here

JSF2 - MVC web-фреймворк позволяющий с легкостью создавать простые(сложные) web-ориентированные приложения за меньшее количество времени и усилий. Другим словами это набор интерфейсов и спецификаций:

  • JSF 2.1 - JSR 314
  • JSF 2.2 - JSR 344

Mojarra - это оракловская имплементация этих стандартов. Её(mojarra) поддерживают такие сервера как :

  • Glassfish
  • JBoss
  • WebLogic
  • Apache Tomcat

Наши злобные дефекты содержатся как раз в имплементации JSF 2.0 - 2.1.18 (JSR 314) версий.


Дефект 1: Обходной путь через Resource Identifier

Один из дефектов связанный с обработкой идентификатора ресурсов(resource identifier). Mojarra не проверяет имя ресурса начинающегося ../ таким разделителем. Конечно это дефект ограничен, мы не можем попаcть в корень нашего приложения или файловой системы сервера, но можем спокойно гулять по папке WEB-INF. http://www.example.com/someApp/javax.faces.resource.../WEB-INF/web.xml.jsf

Дефект 2: Обходной путь через Library Name

Второй способ связан с обработкой имени библиотеки. Mojarra не проверяет имена библиотек с разделителем .. . Дефект так же ограничен как и первый по свободе доступа. http://www.example.com/someApp/javax.faces.resource./WEB-INF/web.xml.jsf?ln=..

Пути решения

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

public class ResourceHandler {
    ...
    
    public static final java.lang.String RESOURCE_EXCLUDES_DEFAULT_VALUE = ".class .jsp .jspx .properties .xhtml .groovy";

    ...

}

Мы лишь расширим этот список в файле дескриптора web приложения :

<context-param>
    <param-name>javax.faces.RESOURCE_EXCLUDES</param-name>
    <param-value>
        .class .jsp .jspx .properties .xhtml .groovy .jsf .xml
    </param-value>
</context-param>

Ну а второй способ, обновиться до более новой версии 2.1.19


Ресурсы :