Как закрыть уязвимости libssl-3-x64.dll в VMware Tools
В современной ИТ-инфраструктуре виртуализация играет ключевую роль. Если в качестве гипервизоров вы используете ESXI, то VMware Tools является критически важным компонентом для эффективной работы виртуальных машин. Однако именно этот компонент часто становится источником уязвимостей, связанных с библиотекой libssl-3-x64.dll, которая входит в состав OpenSSL. Уязвимости в этой библиотеке, такие как CVE-2024-13176, CVE-2024-6119, CVE-2024-5535, CVE-2024-13176 и CVE-2024-9143, регулярно обнаруживаются сканерами безопасности, и попадают в отчеты, что требует немедленного внимания администраторов. Ниже я вам покажу алгоритм, как вы можете самостоятельно производить устранение уязвимостей, когда это еще не успел сделать сам Broadcome.
Что за библиотека libssl-3-x64.dll и суть проблем
Библиотека libssl-3-x64.dll является частью стека OpenSSL, который используется в VMware Tools для обеспечения безопасной аутентификации и шифрования данных. Например, она задействована в работе VMware VGAuth — сервиса, отвечающего за аутентификацию гостевых операционных систем. Любые уязвимости в этой библиотеке могут позволить злоумышленникам провести атаки, начиная от отказа в обслуживании (DDoS) и заканчивая выполнением произвольного кода.
Компания Broadcom, как вендор VMware, сталкивается с критикой из-за значительных задержек в обновлении уязвимых библиотек в своих продуктах, которые могут растягиваться на полгода/год. Такие задержки создают серьезные операционные риски, а так же угрожают безопасности для предприятий. Организации вынуждены либо мириться с наличием известных уязвимостей в своей инфраструктуре в ожидании официального патча, либо идти на нестандартные и потенциально опасные шаги, например, вручную заменять библиотеки. Это не только увеличивает нагрузку на ИТ-команды, но и подвергает инфраструктуру угрозам взлома, утечки данных и отказа служб.
Читайте так же - Обновление libssl-1_1-x64.dll и закрытие уязвимости
Чаще всего ругается по таким путям:
C:\Program Files\VMware\VMware Tools\VMware VGAuth\libssl-3-x64.dll (3.0.14.0)
Алгоритм устранения уязвимостей libssl-3-x64.dll в VMware Tools
И так у меня есть много виртуальных машин, на которых мне нужно закрыть уязвимости CVE-2024-13176, CVE-2024-6119, CVE-2024-5535, CVE-2024-13176 и CVE-2024-9143. Vmware Tools там версии 12.5.2.
- Моя задача перевести их на самую свежую версию Vmware Tools (На текущий момент, но ту главное уяснить алгоритм)
- Далее мануально, или централизованно для массы серверов произвести замену библиотеки libssl-3-x64.dll на свежую и удостовериться, что все необходимые сервисы запустились.
Давайте приступать, ранее я разбирал, где ы можете найти самые актуальные дистрибутивы Vmware Tools, тут я пойду так же на официальный сайт и возьму, последний, в моем примере это VMware-tools-13.0.1-24843032-x64.exe.
Если у вас есть vCenter, то для централизованного и более удобного метода распространения, выберите версию vib и загрузите его в ваш репозиторий.
Далее остается его установить поверх старой версии с обязательной перезагрузкой, чтобы все изменения вступили в силу. Тут все просто, следуем рекомендациям мастера установки Vmware Tools.
Про другие методы обновления Vmware Tools читайте по ссылке
После загрузки виртуальной машины вы должны увидеть статус "Current VMware Tools is installed".
Часть уязвимостей вы закрыли. Теперь нам нужно скачать самую свежую версию библиотеки libssl-3-x64.dll и попытаться ее заменить с последующей проверкой запуска служб Vmware Tools. Переходим на сайт:
https://kb.firedaemon.com/support/solutions/articles/4000121705-openssl-installers-and-binaries-distributions-for-microsoft-windows
Тут есть почти всегда свежие версии OpenSSL TLS, меня будет интересовать в ZIP формате. Скачайте OpenSSL 3.0.17 LTS ZIP x86+x64.
Далее распакуйте архив в удобное для вас место. Для начала сравним, что старая версия libssl-3-x64.dll имеет билд 3.0.15, у новой уже 3.0.17.
Не перепутайте папку с новой библиотекой, тут важно исходить их вашей разрядности системы. В моем примере это x64
Перед заменой обязательно сохраните копию старой версии библиотеки, если вдруг службы не смогут запуститься с новой libssl-3-x64.dll.
Перед заменой вам нужно остановить службы:
- VMTools
- VM3DService
- VGAuthService
Далее копируем новую версию libssl-3-x64.dll с заменой и пробуем запустить сервисы, если все хорошо, то я вас поздравляю и вы закрыли уязвимости, если нет, то можно поискать версию библиотеки немного пониже или вернуть предыдущую, запастись терпением когда Broadcom сам ее включит в новый дистрибутив.
Очень часто если библиотека не подошла вы будите получать коды ошибок: 1069, 1053, 1061
После следующег оскинирования видно, что все уязвимости в libssl-3-x64.dll libssl-3-x64.dll успешно закрыты и CVE-2024-13176, CVE-2024-6119, CVE-2024-5535, CVE-2024-13176, CVE-2024-9143 больше нет.
Остались только уязвимости связанные с JRE у PDF24, но как их устранять я покажу в следующей публикации.
Массовое обновление libssl-3-x64.dll на серверах
Если у вас инфраструктура большая, то без автоматизации просто не обойтись. У меня для примера есть RDS ферма из 50 хостов, я пачками нужные перевожу в режим Drain Mode и выполняю на них вот такой скрипт для копирования на них свежей версии libssl-3-x64.dll.
Поможет в нашей задаче нам PowerShell ISE, единственное вам нужно подготовить файл со списком серверов и положить свежую версию libssl-3-x64.dll на доступную сетевую шару.
# Получаем список серверов из файла, который заранее подготовили
$serversPath = "C:\Temp\RDS\servers-vmware.txt"
$servers = Get-Content -Path $serversPath$results = @()
# Пути для копирования в $sourceDll указываем откуда берем бибиотеку, в $destinationPath куда копируем с заменой
$sourceDll = "\\c-10-52.pyatilistnik.org\share\Библиотеки\3.0.17\libssl-3-x64.dll"
$destinationPath = "C:\Program Files\VMware\VMware Tools\VMware VGAuth\libssl-3-x64.dll"foreach ($server in $servers) {
# Пропускаем пустые строки
if ([string]::IsNullOrWhiteSpace($server)) {
continue
}Write-Host "Обрабатываем сервер: $server" -ForegroundColor Green
try {
# Останавливаем службы отвечающие за работу Vmware Tools
Write-Host "Останавливаем службы..." -ForegroundColor Yellow
Invoke-Command -ComputerName $server -ScriptBlock {
$services = @("VGAuthService", "VM3DService", "VMTools")
foreach ($service in $services) {
try {
$serviceObj = Get-Service -Name $service -ErrorAction Stop
if ($serviceObj.Status -eq "Running") {
Stop-Service -Name $service -Force
Write-Host "Служба $service остановлена" -ForegroundColor Green
} else {
Write-Host "Служба $service уже остановлена" -ForegroundColor Gray
}
}
catch {
Write-Host "Служба $service не найдена или ошибка остановки: $($_.Exception.Message)" -ForegroundColor Red
}
}
}# Копируем libssl-3-x64.dll файл
Write-Host "Копируем DLL файл..." -ForegroundColor Yellow
$remotePath = "\\$server\C$\Program Files\VMware\VMware Tools\VMware VGAuth\libssl-3-x64.dll"# Создаем папку назначения если её нет
$destinationFolder = "\\$server\C$\Program Files\VMware\VMware Tools\VMware VGAuth\"
if (!(Test-Path $destinationFolder)) {
New-Item -ItemType Directory -Path $destinationFolder -Force
}# Копируем файл с заменой
Copy-Item -Path $sourceDll -Destination $remotePath -Force# Запускаем службы, которые ранее остановили и получаем их статус
Write-Host "Запускаем службы..." -ForegroundColor Yellow
$servicesStatus = Invoke-Command -ComputerName $server -ScriptBlock {
$services = @("VGAuthService", "VM3DService", "VMTools")
$statusResults = @()foreach ($service in $services) {
try {
$serviceObj = Get-Service -Name $service -ErrorAction Stop
$previousStatus = $serviceObj.Statusif ($serviceObj.Status -ne "Running") {
Start-Service -Name $service
Start-Sleep -Seconds 2
$serviceObj = Get-Service -Name $service
Write-Host "Служба $service запущена (было: $previousStatus, стало: $($serviceObj.Status))" -ForegroundColor Green
} else {
Write-Host "Служба $service уже запущена" -ForegroundColor Gray
}$statusResults += @{
Service = $service
Status = $serviceObj.Status.ToString()
}
}
catch {
Write-Host "Служба $service не найдена или ошибка запуска: $($_.Exception.Message)" -ForegroundColor Red
$statusResults += @{
Service = $service
Status = "Error: $($_.Exception.Message)"
}
}
}
return $statusResults
}# Получаем версию DLL файла
Write-Host "Получаем информацию о версии DLL..." -ForegroundColor Yellow
$versionInfo = Invoke-Command -ComputerName $server -ScriptBlock {
$filePath = "C:\Program Files\VMware\VMware Tools\VMware VGAuth\libssl-3-x64.dll"
if (Test-Path $filePath) {
$fileInfo = Get-Item $filePath
return @{
Version = $fileInfo.VersionInfo.FileVersion
LastWriteTime = $fileInfo.LastWriteTime
}
} else {
return @{
Version = "Файл не найден"
LastWriteTime = $null
}
}
}# Форматируем статус служб для таблицы
$servicesStatusFormatted = ($servicesStatus | ForEach-Object {
"$($_.Service): $($_.Status)"
}) -join " | "# Добавляем результат в массив
$results += [PSCustomObject]@{
ServerName = $server
DLLVersion = $versionInfo.Version
LastModified = $versionInfo.LastWriteTime
ServicesStatus = $servicesStatusFormatted
OverallStatus = "Успешно"
}Write-Host "Сервер $server обработан успешно" -ForegroundColor Green
}
catch {
Write-Host "Ошибка при обработке сервера $server : $($_.Exception.Message)" -ForegroundColor Red$results += [PSCustomObject]@{
ServerName = $server
DLLVersion = "Ошибка"
LastModified = $null
ServicesStatus = "Не проверялись"
OverallStatus = "Ошибка: $($_.Exception.Message)"
}
}Write-Host "----------------------------------------" -ForegroundColor Gray
}# Выводим результаты в таблицу
Write-Host "`nРезультаты выполнения:" -ForegroundColor Cyan
$results | Format-Table -AutoSize -Wrap
PS C:\Windows\system32> C:\Temp\RDS\Массовая замена libssl-3-x64.dll в Vmware Tools на серверах v2.ps1
Обрабатываем сервер: server10.pyatilistnik.org
Останавливаем службы...
Служба VGAuthService остановлена
Служба VM3DService остановлена
Служба VMTools остановлена
Копируем DLL файл...
Запускаем службы...
Служба VGAuthService запущена (было: Stopped, стало: Running)
Служба VM3DService запущена (было: Stopped, стало: Running)
Служба VMTools запущена (было: Stopped, стало: Running)
Получаем информацию о версии DLL...
Сервер server10.pyatilistnik.org обработан успешно
----------------------------------------Результаты выполнения:
server10.pyatilistnik.org 3.0.17 22.08.2025 12:12:26 VGAuthService: Running | VM3DService: Running | VMTools: Running Успешно
Видим, что все успешно обновилось и службы корректно запустились.
Еще как вариант массового обновления библиотек libssl-3-x64.dll, это запуск скрипта через SCCM. Но тут его немного нужно доработать.
Очень полезно если вы производите массовый патчинг, быстро проверить у всего списка версию библиотеки, для этого я вам советую воспользоваться ранее описанным мной скриптом.
Надеюсь, что у вас все получилось. Вы поняли алгоритм устранения уязвимостей с libssl-3-x64.dll, если вендор ПО не успевает и тянет с его обновлением. С вами был Иван Сёмин, до скорых встреч.