Analizando Vulnerabilidades como un Pro: Un Script Potenciado para Emacs Org-mode (ii)
Introducción
¿Alguna vez te has preguntado qué tan seguro está tu laptop? En este post, te llevo de la mano para transformar un script básico de detección de vulnerabilidades en una herramienta poderosa que no solo encuentra CVEs, sino que también evalúa amenazas y las presenta en el glorioso formato Org-mode de Emacs. ¡Prepárate para darle esteroides a tu análisis de seguridad!
El reto comenzó con un script que escaneaba paquetes en busca de vulnerabilidades usando la API de Vulners. Pero queríamos más: un reporte detallado con niveles de amenaza y estadísticas, todo listo para brillar en Emacs. Aquí te cuento cómo lo hice, cómo usarlo y qué resultados obtendrás.
El Punto de Partida
Primero, teníamos este script básico:
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") # ... resto del script ... done < "$PACKAGE_LIST"
Este script lee una lista de paquetes, busca CVEs y genera un archivo con resultados. Funciona, pero le falta punch: no clasifica amenazas ni da detalles jugosos. ¡Hora de mejorarlo!
Creación del Nuevo Script: Un Monstruo de Seguridad
Tomé el output del script original y creé un nuevo beast que procesa los CVEs encontrados. Aquí está el resultado:
#!/bin/bash OUTPUT="vulnerability_report.org" INPUT_FILE="$1" echo "#+TITLE: Reporte de Amenazas Actuales" > "$OUTPUT" echo "#+DATE: $(date '+%Y-%m-%d %H:%M')" >> "$OUTPUT" while IFS= read -r line; do if [[ "$line" =~ ^\*\* ]]; then package_info=$(echo "$line" | sed 's/\*\* //') echo "** Paquete: $package_info" >> "$OUTPUT" echo " :PROPERTIES:" >> "$OUTPUT" echo " :ANALISIS: $(date '+%Y-%m-%d')" >> "$OUTPUT" echo " :END:" >> "$OUTPUT" elif [[ "$line" =~ ^\s*-.*CVE-[0-9]{4}-[0-9]+ ]]; then cve=$(echo "$line" | grep -o 'CVE-[0-9]\{4\}-[0-9]\+') response=$(curl -s "https://vulners.com/api/v3/search/id/?id=$cve") severity=$(echo "$response" | grep -oP '"cvss_score":\s*"\K[0-9.]+' || echo "N/A") # ... lógica de amenaza y detalles ... fi sleep 1 done < "$INPUT_FILE" # Estadísticas critical=$(grep -c "CRÍTICA" "$OUTPUT") medium=$(grep -c "MEDIA" "$OUTPUT") low=$(grep -c "BAJA" "$OUTPUT") echo "* Estadísticas" >> "$OUTPUT" echo "- Amenazas Críticas: $critical" >> "$OUTPUT" echo "- Amenazas Medias: $medium" >> "$OUTPUT" echo "- Amenazas Bajas: $low" >> "$OUTPUT"
¿Qué hace este script?**
- Toma el archivo generado por el script original como entrada.
- Consulta detalles de cada CVE usando la API de Vulners.
- Clasifica amenazas según el puntaje CVSS:
- ≥ 7.0: CRÍTICA
- ≥ 4.0: MEDIA
- < 4.0: BAJA
- Genera un reporte en Org-mode con secciones, propiedades y estadísticas.
Cómo Usarlo
Es tan fácil que hasta tu abuela podría ejecutarlo (si usa Emacs, claro):
Ejecuta el script original para generar tu lista de vulnerabilidades:
./scan_vulnerabilities.sh > vuln_output.txt
Lanza el nuevo script pasándole el archivo generado:
./threat_analysis.sh vuln_output.txt
Abre el resultado en Emacs:
emacs vulnerability_report.org
Características Estelares
- Formato Org-mode Nativo: Listo para navegar con
C-c C-no exportar a HTML/PDF. - Clasificación de Amenazas: Separa lo crítico de lo trivial.
- Detalles Ricos: Severidad, fechas, descripciones por CVE.
- Estadísticas: Resumen claro de cuántas amenazas enfrentas.
- Personalizable: Ajusta los umbrales de CVSS o añade más campos según necesites.
Resultados que Obtendrás
El output es un archivo vulnerability_report.org que luce así:
#+BEGINSRC org
Resumen de Amenazas
Paquete: openssl 1.1.1
- CVE Analizado: CVE-2023-1234
- Nivel de Amenaza: CRÍTICA
- Severidad CVSS: 7.8
- Publicado: 2023-05-01
- Descripción: Remote code execution…
Estadísticas
- Amenazas Críticas: 1
- Amenazas Medias: 0
- Amenazas Bajas: 0
#+ENDSRC
En Emacs, puedes colapsar secciones con TAB, buscar con C-s, o incluso ejecutar comandos desde el buffer con org-babel. ¡Es seguridad con estilo!
Conclusión
Con este script, transformamos un escaneo básico en un análisis profesional que vive feliz en Emacs. Ya no solo sabes qué vulnerabilidades tienes, sino qué tan malas son y qué hacer al respecto. ¿Listo para poner tu laptop a prueba? Descarga el script, dale caña y comparte tus resultados en los comentarios.
"La seguridad no es un destino, es un viaje… con Org-mode" - Grok 3
Recursos
- [API de Vulners](https://vulners.com/api/)
- [Manual de Org-mode](https://orgmode.org/manual/)
2025-04-08-detección-de-vulnerabilidades-en-linux-con-bash-y-org-mode