
Бэкпорт исправления безопасности CVE-2020-6950 для Mojarra 2.2.13, предоставляющий пропатченный JAR-файл jsf-impl с минимальными, проверяемыми изменениями для устаревших приложений.
Этот репозиторий содержит воспроизводимый обратный порт исправления для CVE-2020-6950 в Mojarra 2.2.13.
Он создан в первую очередь для обеспечения прослеживаемости и поддержки устаревших приложений, которые по причинам совместимости не могут быть просто обновлены до более новой версии JSF/Mojarra.
Mojarra — это эталонная реализация JavaServer Faces (JSF), изначально разработанная в рамках экосистемы GlassFish/Java EE, а в настоящее время поддерживаемая как проект Eclipse Mojarra.
Исходный код Mojarra, содержащийся в этом репозитории, не является моей работой. Все авторские права остаются за оригинальными авторами и участниками Mojarra.
Текущий вышестоящий проект:
Немодифицированные артефакты Mojarra 2.2.13, использованные в качестве основы для этой работы, были получены из Maven Central.
Используемое здесь исправление безопасности не было разработано мной.
Обратный порт для Mojarra 2.2.13 был получен из пакета Mojarra openEuler, где CVE-2020-6950.patch применяется к Mojarra 2.2.13.
Исходный код пакета openEuler:
Оригинальный патч сохранён, чтобы происхождение и точный характер модификации безопасности оставались прослеживаемыми.
Моя благодарность разработчикам вышестоящего проекта Mojarra, а также сопровождающим и участникам openEuler, которые предоставили и опубликовали обратно портированный патч безопасности.
Я столкнулся с устаревшим приложением, которое по-прежнему зависит от Mojarra 2.2.13 и было затронуто уязвимостью CVE-2020-6950.
Обновление полной реализации JSF не было практичным краткосрочным вариантом, поскольку приложение и окружающий его фреймворк являются устаревшим программным обеспечением со значительными ограничениями совместимости.
В то же время я хотел, чтобы модификация безопасности была:
По этой причине я пересобрал затронутые классы самостоятельно, а не распространял необъяснимый модифицированный бинарный файл.
Таким образом, этот репозиторий не представляет собой независимую реализацию исправления безопасности. Он документирует и упаковывает существующее опубликованное исправление для использования с Mojarra 2.2.13.
Патч openEuler для CVE-2020-6950 модифицирует три класса Mojarra:
com/sun/faces/application/resource/ClasspathResourceHelper.java
com/sun/faces/application/resource/ResourceManager.java
com/sun/faces/application/resource/WebappResourceHelper.java
Патч добавляет проверку имени контракта ресурса с использованием:
ResourceManager.nameContainsForbiddenSequence(...)
В патченном JAR-файле jsf-impl-2.2.13 заменяются только эти три класса.
Было выполнено сравнение распакованных оригинального и патченного JAR-файлов для проверки того, что никакие другие файлы не отличаются.
Оригинальные исходники Mojarra 2.2.13 использовались вместе с опубликованным патчем openEuler для CVE.
Поскольку восстановление полной исторической среды сборки Mojarra 2.2.13 и её старых зависимостей сборки добавило бы ненужную сложность и затруднило бы аудит результата, были перекомпилированы только три затронутых класса.
Они были скомпилированы с OpenJDK 8 с использованием:
-source 1.5 -target 1.5
Было проверено, что полученные файлы классов имеют:
major version: 49
что соответствует версии байткода оригинальных классов Mojarra 2.2.13.
Затем три полученных файла классов были вставлены в неизменённую копию оригинального jsf-impl-2.2.13.jar.
Полученный JAR-файл был распакован и сравнён с оригиналом.
Отличаются только эти файлы:
ClasspathResourceHelper.class
ResourceManager.class
WebappResourceHelper.class
Полученный байткод был дополнительно проверен с помощью javap, чтобы убедиться, что оба класса помощников ресурсов содержат предполагаемый вызов:
ResourceManager.nameContainsForbiddenSequence(...)
Все три заменённых класса также были проверены на сохранение основной версии 49 файлов классов Java.
Для приложений, которые в настоящее время используют раздельные библиотеки Mojarra:
jsf-api-2.2.13.jar
jsf-impl-2.2.13.jar
соответствующей заменой, созданной этим проектом, является:
jsf-impl-2.2.13-patched.jar
Имя JAR-файла само по себе не имеет значения для загрузчика классов Java. Суффикс -patched намеренно сохранён, чтобы администраторы могли немедленно отличить модифицированную реализацию от оригинальной.
Не развёртывайте оригинальный и патченный JAR-файлы jsf-impl одновременно.
Безопасная процедура развёртывания заключается в следующем: сначала создайте резервную копию существующего приложения, удалите оригинальный jsf-impl-2.2.13.jar, разверните jsf-impl-2.2.13-patched.jar, перезапустите приложение/контейнер и проверьте как нормальную работу приложения, так и проблему безопасности, устранённую CVE-2020-6950.
Этот репозиторий предназначен как узконаправленный обратный порт совместимости/безопасности для устаревших установок Mojarra 2.2.13.
Это не форк Mojarra, не новый выпуск Mojarra и не аффилирован с Eclipse Foundation, Oracle, GlassFish или openEuler и не одобрен ими.
Где это возможно, обновление до поддерживаемой в настоящее время реализации JSF/Jakarta Faces предпочтительнее, чем поддержание старого выпуска Mojarra с отдельными патчами безопасности.
Этот репозиторий устраняет конкретную CVE, описанную выше. Его не следует интерпретировать как делающий Mojarra 2.2.13 в целом безопасным, актуальным, поддерживаемым или официально поддерживаемым.
Пользователи несут ответственность за тестирование патченного артефакта в своей собственной среде перед развёртыванием его в производственных системах.
Оригинальный исходный код и бинарные файлы Mojarra остаются предметом соответствующих вышестоящих лицензий и уведомлений об авторских правах.
Mojarra 2.2.13 распространялась на условиях двойной лицензии GPL v2 / CDDL, применимых к этому выпуску, включая исключение Classpath GPL, где это указано в оригинальных заголовках исходных файлов.
Оригинальный файл лицензии Mojarra включён без изменений по адресу:
packager/legal/LICENSE.txt
Оригинальные заголовки авторских прав и лицензий в исходных файлах Mojarra сохранены.
Патч, предоставленный openEuler, остаётся атрибутируемым соответствующим авторам и исходному проекту.
Этот репозиторий не претендует на право собственности на оригинальный код Mojarra или исправление CVE.