Как вручную обновить jre на примере PDF24

Update JRE PDF24

В современном цифровом мире кибербезопасность стала критически важным аспектом использования любых программных продуктов. Ежегодно обнаруживаются сотни уязвимостей в программном обеспечении, включая основывающиеся на Java приложения. Согласно данным Oracle, только в июльском обновлении 2025 года было выпущено 309 патчей для устранения уязвимостей в различных продуктах компании.

Особую озабоченность у специалистов по безопасности вызывают уязвимости в Java Runtime Environment (JRE) — среде выполнения Java-приложений, которая используется в огромном количестве программных продуктов по всему миру. Несвоевременное обновление JRE создает серьезные риски как для конечных пользователей, так и для организаций, использующих такие приложения в своей работе. В этой статье я приведу вам свой практический опыт по закрытию этих дыр, когда разработчик софта еще не успел своевременно это сделать.

Для чего используется JRE в программном обеспечении?

Java Runtime Environment представляет собой среду выполнения для приложений, написанных на языке Java. Согласно определению AWS, JRE — это программное обеспечение, которое требуется для корректной работы программ Java, выступающее в роли "переводчика и посредника" между Java-программой и операционной системой 8.

К сожалению, использование Java вы можете встретить еще много где, например при консольном подключении к BMC на контроллерах СХД, или ряда серверов, где еще не перешли на HTML.

Ключевые компоненты JRE

  1. Виртуальная машина Java (JVM) — выполняет байт-код Java, обеспечивая кроссплатформенность

  2. Библиотеки классов — предоставляют заранее написанный код для common задач

  3. Вспомогательные утилиты — обеспечивают работу с сетью, безопасностью и другими аспектами

КомпонентНазначениеПримеры
JVMВыполнение байт-кодаHotSpot, OpenJ9
БиблиотекиПредоставление готового функционалаjava.lang, java.util
УтилитыВспомогательные функцииJava Web Start, Plugin

Благодаря принципу "write once, run anywhere" (напиши один раз, запускай где угодно), Java и JRE получили широкое распространение в корпоративной среде и в потребительском программном обеспечении. Это особенно актуально для кроссплатформенных приложений, которые должны работать на разных операционных системах без модификации исходного кода.

Проблема вендоров и разработчиков, использующих JRE

Многие разработчики программного обеспечения, включая популярные проекты вроде PDF24, включают JRE в состав своих продуктов для обеспечения их работоспособности. Однако зачастую процесс обновления встроенной JRE запаздывает или вообще игнорируется, что создает серьезные бреши в безопасности.

Почему вендоры не спешат с обновлениями?

  • Сложности тестирования: Обновление JRE требует тщательного тестирования всего функционала приложения, что может занимать значительное время

  • Совместимость: Новые версии JRE могут содержать изменения, нарушающие обратную совместимость

  • Ресурсные ограничения: Многие небольшие компании не имеют достаточных ресурсов для оперативного отслеживания и интеграции всех обновлений

  • Лицензионные вопросы: Некоторые вендоры используют специфические сборки JRE, обновление которых требует дополнительных лицензионных соглашений

Когда я вам рассказывал про библиотеку libssl-3-x64.dll в VMware Tools, я описывал. что даже гигантский Broadcom не успевает это делать. что гоорить уже про небольшие компании, где ресурсы очень ограничены, но надеюсь, что в этом плане им может в будущем помочь ИИ.

Что делать если новой версии ПО нет, а JRE уязвимая

Рассмотрим практические аспекты обновления JRE на примере PDF24. У меня на терминалах установлена самая последняя версия 11.27.0, которая как только появляется возможность патчится средствами SCCM.

Просмотр версии PDF24

Но, к сожалению, в этой версии есть незакрытые уязвимости, например:

  1. CVE-2025-30754 — уязвимость в компоненте JSSE, позволяющая получить доступ к конфиденциальной информации через неверное управление TLS 1.3 handshakes

  2. CVE-2025-50059 — проблема в сетевом компоненте, приводящая к возможности получения конфиденциальной информации

  3. CVE-2025-30749 и CVE-2025-50106 — уязвимости в 2D-компоненте, приводящие к отказу в обслуживании или выполнению произвольного кода

График уязвимостей по PDF24

Все они указывают на файл C:\Program Files\PDF24\jre\bin\java.exe (17.0.15.0)

Версия java в PDF24

Если разработчик программы не успевает выпустить обновление закрывающее уязвимости JRE, то вы можете попробовать устранить их вручную, если софт позволит это сделать и продолжит работать со свежими версиями.

Ручное устранение уязвимостей в OpenJDK

У Microsoft есть сайт, где вы можете скачать актуальные, ну или как минимум более свежие версии, чем у большинства софта, который использует java.

https://learn.microsoft.com/en-us/java/openjdk/download

Скачиваем microsoft-jdk-17.0.16-windows-x64.zip. Но тут смотрите исходя из поколения microsoft-jdk, если ваш софт 21-го, то берем его, мне нужно патчить версию OpenJDK 17.0.15.

Скачивание OpenJDK 17.0.16 LTS

Распаковываем zip-архив, в нем будет 6-7 папок, но меня будут интересовать 4, как изначально в PDF24.

Состав архива OpenJDK

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

Далее идем по пути C:\Program Files\PDF24\jre\ и копируем с заменой туда папки и проверяем работу софта. В моем случае версия java (17.0.16.0) успешно прижилась и все запустилось. Поздравляю вы только, что закрыли уязвимости CVE-2025-30754, CVE-2025-50059, CVE-2025-30749, CVE-2025-50106.

Как устранить уязвимости JRE пакета на массе серверов

У меня большая инфраструктура, поэтому есть Active Directory с доменом и блэкджеком. Поэтому я буду пользоваться этим преимуществом. Я поделюсь с вами скриптом PowerShell, который делает вот что:

  1. Берет список серверов из текстового файла
  2. На каждый сервер копирует из сетевой шары свежий дистрибутив JRE в локальную папку C:\Temp, как перевалочный пункт (Политики ИБ)
  3. Далее вырезает локальную папку C:\Program Files\PDF24\jre\ и кладет ее в папку temp, но с префиксом _old
  4.  После чего из папки C:\Temp копируется новая папка jre
  5. Выводится в таблице отчет по серверам и версия файла

Запускать скрипт лучше из PowerShell ISE и на конечных станциях/серверах у вас должны быть права.

$servers = Get-Content "C:\Temp\RDS\servers-jre.txt"
$credential = Get-Credential

foreach ($server in $servers) {
try {
Invoke-Command -ComputerName $server -Credential $credential -ScriptBlock {

# Переименовываем jre
$jrePath = "C:\Program Files\PDF24\jre"
if (Test-Path $jrePath) {
Rename-Item -Path $jrePath -NewName "jre_old" -Force
}

# Перемещаем jre_old в Temp
$jreOldPath = "C:\Program Files\PDF24\jre_old"
if (Test-Path $jreOldPath) {
Move-Item -Path $jreOldPath -Destination "C:\Temp\" -Force
}

# Копируем из сетевой папки (используем New-PSDrive для аутентификации)
$netCred = $using:credential
New-PSDrive -Name "NetShare" -PSProvider FileSystem -Root "\\c-10-52\share\" -Credential $netCred -Scope Script
Copy-Item -Path "NetShare:\jre" -Destination "C:\Temp\" -Recurse -Force
Remove-PSDrive -Name "NetShare" -Force

# Перемещаем в конечное расположение
$tempJrePath = "C:\Temp\jre"
if (Test-Path $tempJrePath) {
Move-Item -Path $tempJrePath -Destination "C:\Program Files\PDF24\" -Force
}
}
}
catch {
Write-Host "Ошибка на сервере $server : $($_.Exception.Message)" -Red
}
}

Успешная массовая замена jre в PDF24

Надеюсь, что вы поняли основной принцип и в какие-то моменты сможете без поломки софта устранять уязвимости связанные с OpenJDK и его компонентами и немного обгонять разработчиков. С вами был Иван Сёмин, до будущих встреч.

Оцените статью
Настройка серверов windows и linux
Добавить комментарий