Пару дефектов(багов) в JSF 2.0 - 2.1.18
После очередного сканирования сервиса на проникновения, наткнулся на очень инетрессную уязвимость в JSF 2.1 связанную с доступом к ресурсам через http без авторизации.
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=..
Пути решения
Первый, и самый простой, запретить обработчику ресурсов отдавать файлы с определёнными суффиксами расширения. По умолчанию у обработчика ресурсов уже есть ряд исключительных суффиксов.
Мы лишь расширим этот список в файле дескриптора web приложения :
Ну а второй способ, обновиться до более новой версии 2.1.19
Ресурсы :
- http://mvnrepository.com/artifact/com.sun.faces/jsf-impl - версии jsf имплементаций для скачивания.
- https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2013-3827