Búsqueda de vulnerabilidad en Log4j con powershell

Como ya sabéis se ha descubierto una vulnerabilidad bastante importante que afecta a Apache Log4j 2.

Yo llevo un día entretenido, buscando entre linux y windows.

El Equipo de CCN-CERTha hecho pública la vulnerabilidad que afecta a la librería de registro de Java Apache Log4j 2, herramienta desarrollada para  escribir mensajes de registro, cuyo propósito es dejar constancia de una determinada transacción en tiempo de ejecución, además, Log4j permite filtrar los mensajes en función de su importancia.

La historia es, que el pasado 9 de diciembre p0rz9, publicó un repositorio en GitHub anunciando su descubrimiento, y lo dio a conocer en Twitter esta vulnerabilidad.

Por supuesto, y para evitar propagación ha cerrado su repositorio de manera temporal y ha borrado el tweet

 

Como funciona esta vulnerabilidad, pues aprovecha una validación de entrada incorrecta al procesar solicitudes de LDAP, y permite la ejecución remota de código, es decir, entraría en un servidor hasta la cocina.

Imaginaros a los malignos instalado, por ejemplo, ransomware en remoto a cascoporro…. muy divertido.

La solución

actualizar a la versión 2.15, pero curiosamente solo afecta a versión de 2.10 a 2.14. en versiones anteriores no afecta. A no ser, que actives la librería concreta. Si esa así podéis solventarlo como indica en la web de ccn-cert:

La vulnerabilidad también se puede mitigar en versiones anteriores (sólo versión 2.10 y posteriores) estableciendo la propiedad del sistema «log4j2.formatMsgNoLookups» en «true» o eliminando la clase JndiLookup del classpath.

Como encontramos si estamos vulnerados o no, pues el ccn-cert recomienda esta línea para buscar en servidores windows:

gci 'C:\' -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path

Hay muchas, y muy variadas soluciones para buscar:

https://github.com/Diverto/nse-log4shell

https://www.cyberdrain.com/monitoring-with-powershell-detecting-log4j-files/

https://www.ccn-cert.cni.es/seguridad-al-dia/alertas-ccn-cert/11435-ccn-cert-al-09-21-vulnerabilidad-en-apache-log4j-2.html

Mi primera opción, era ejecutar el script buscando el fichero servidor por servidor, basándome en las rutas por defecto que nos indica en esta web

Pero después de darle un par de vueltas, busque una solución un poco mas directa y mas automatizada, sabiendo que la instalación en mis servidores prácticamente es por defecto, construí este script que busca en todos mis Windows del directorio activo:

$Servers = $Servers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*")} | Select-Object -ExpandProperty Name

Foreach ($Server in $Servers) {

Write-Host "-----------$Server-----------"

Get-ChildItem -Path @("\\$Server\c$\Users\","\\$Server\c$\Program Files\","\\$Server\c$\Program Files (x86)\") -Filter 'log4j*.jar' -Recurse 2>$null | %{$_.FullName}

}

Se que es muy rudimentario, pero es la manera más rápida que se me ha ocurrido para poder buscar en mis servidores, sin instalaciones de módulos o software, por medio.

Espero que os sirva.

Deja un comentario