Detección de Vulnerabilidades en Linux con Bash y Org Mode
Introducción
En la administración de sistemas Linux, una de las tareas más críticas es mantener actualizado el sistema y mitigar cualquier vulnerabilidad presente. Una vulnerabilidad es una debilidad en el sistema que puede ser explotada para ganar acceso no autorizado, ejecutar código malicioso o afectar la disponibilidad y confidencialidad del sistema.
Este artículo documenta un método simple pero efectivo para identificar vulnerabilidades conocidas (CVE) en paquetes instalados en una distribución basada en Debian/Ubuntu, utilizando:
- Herramientas de línea de comandos (Bash, `dpkg`, `curl`)
- Consulta a la API de Vulners.com
- Documentación automática en formato Org Mode para su exportación a PDF o HTML
Herramientas necesarias
Antes de comenzar, asegúrate de tener instaladas las siguientes utilidades:
- `dpkg` (instalado por defecto en Ubuntu)
- `curl` para realizar peticiones web
- Editor Emacs con soporte para Org Mode
Puedes instalar `curl` así:
sudo apt update sudo apt install curl
Extracción del listado de software instalado
Primero generamos un listado de los paquetes instalados con sus versiones:
dpkg-query -W -f='${binary:Package} ${Version}\n' > paquetes_instalados.txt
Este archivo será leído por nuestro script de análisis de vulnerabilidades.
Script de análisis con Bash
A continuación, presentamos el script en Bash que se encarga de:
- Leer el archivo de paquetes instalados
- Buscar cada paquete en la API pública de Vulners
- Extraer posibles CVEs relacionados
- Generar automáticamente un informe en formato Org Mode
#!/bin/bash OUTPUT="vulnerabilidades.org" PACKAGE_LIST="paquetes_instalados.txt" # Verifica dependencias if ! command -v curl &> /dev/null; then echo "Este script requiere 'curl'. Instálalo con: sudo apt install curl" exit 1 fi # Título del archivo Org echo "#+TITLE: Análisis de Vulnerabilidades del Sistema" > "$OUTPUT" echo "#+DATE: $(date '+%Y-%m-%d')" >> "$OUTPUT" echo "* Resultados de escaneo de vulnerabilidades" >> "$OUTPUT" # Obtener lista de paquetes instalados echo "[*] Obteniendo lista de paquetes..." dpkg-query -W -f='${binary:Package} ${Version}\n' > "$PACKAGE_LIST" # Buscar vulnerabilidades por paquete while IFS= read -r line; do nombre=$(echo "$line" | awk '{print $1}') version=$(echo "$line" | awk '{print $2}') echo "[+] Buscando CVEs para: $nombre $version" query="${nombre}%20${version}" response=$(curl -s "https://vulners.com/api/v3/search/lucene/?query=$query&size=3") echo "** $nombre $version" >> "$OUTPUT" if echo "$response" | grep -q '"cvelist":'; then echo " → Vulnerabilidades encontradas." echo " - Vulnerabilidades encontradas:" >> "$OUTPUT" echo "$response" | grep -oP '"id":\s*"\K(CVE-[0-9\-]+)' | uniq | sed 's/^/ - /' >> "$OUTPUT" else echo " → Sin vulnerabilidades encontradas." echo " - Sin vulnerabilidades encontradas." >> "$OUTPUT" fi sleep 1 # Para no sobrecargar el servidor done < "$PACKAGE_LIST" echo "[✔] Análisis completado. Archivo generado: $OUTPUT"
Para usarlo:
chmod +x check_vulnerabilities_org.sh ./check_vulnerabilities_org.sh
Ejemplo de resultados
A continuación se muestra un extracto real generado automáticamente con el script:
#+beginexample
openssl 3.0.2-0ubuntu1.15
- Vulnerabilidades encontradas:
- CVE-2022-0778
- CVE-2023-0464
- CVE-2023-2650
firefox 124.0
- Vulnerabilidades encontradas:
- CVE-2024-29943
- CVE-2024-29944
vlc 3.0.16
- Sin vulnerabilidades encontradas.
#+endexample
Exportar resultados a PDF o HTML
Desde Emacs, abre el archivo generado `vulnerabilidades.org` y presiona:
- `C-c C-e l o` → Exportar a PDF
- `C-c C-e h o` → Exportar a HTML
Esto genera un informe profesional que puedes archivar, compartir o añadir a tu blog.
Recomendaciones
- Ejecutar este script regularmente como parte de tus tareas de mantenimiento.
- Configurar alertas automáticas de CVE con herramientas como `apticron`, `unattended-upgrades` o `lynis`.
- Complementar con escáneres más avanzados como OpenVAS o Lynis para auditorías completas.
Conclusión
La seguridad no es un estado, es un proceso. Automatizar la detección de vulnerabilidades con herramientas simples como Bash, APIs públicas y Org Mode nos permite mantenernos al tanto de riesgos sin depender de soluciones comerciales complejas.
Este enfoque demuestra el poder de las herramientas libres combinadas: un sistema Linux, un script Bash y la flexibilidad de Emacs.