Introducción

En entornos empresariales, cada apt install, yum update o pip install introduce un riesgo invisible: paquetes con dependencias modificadas, repositorios comprometidos o credenciales expuestas en pipelines. Según el 2025 State of the Software Supply Chain Report de Sonatype, el 83% de las vulnerabilidades críticas en Linux en 2025 provinieron de dependencias indirectas no auditadas. Peor aún, el 62% de los equipos de DevOps admiten que no monitorean las firmas criptográficas de los paquetes instalados en producción.

El problema no es solo técnico: cuando un atacante compromete un repositorio como PyPI o npm, puede inyectar código malicioso en miles de sistemas en cuestión de horas. Por ejemplo, en CVE-2024-3094 (afectando a xz-utils versión 5.6.0/5.6.1), un desarrollador de confianza insertó un backdoor que permitía ejecución remota de código en sistemas con Secure Boot habilitado. El vector de ataque explotó una cadena de suministro comprometida en un paquete aparentemente legítimo.

Para abordar esto, Paul Asadoorian lanzó un script en su repositorio Linux_Hacks que automatiza auditorías de cadena de suministro en Linux. Pero más allá de herramientas, la clave está en implementar controles proactivos en cada capa: desde la compilación de imágenes hasta la ejecución en Kubernetes.

Qué ocurrió

1. Lanzamiento del script Linux_Hacks y su enfoque en Secure Boot

El script de Asadoorian, disponible en su repositorio, evalúa tres aspectos críticos:

  • Firmas criptográficas de paquetes: Verifica si los binarios instalados están firmados con claves reconocidas por el sistema de paquetes (APT, YUM, etc.).
  • Estado de Secure Boot: Detecta si el kernel está firmado con claves de Microsoft (usadas por defecto en distribuciones como Ubuntu o RHEL), incluso cuando el sistema usa Secure Boot.
  • Dependencias transitivas: Lista paquetes instalados que dependen de bibliotecas obsoletas o con CVEs conocidas.

El código usa herramientas como sbverify (para verificar firmas PE/ELF) y dpkg/rpm para inspeccionar metadatos. Por ejemplo, este comando verifica si el kernel actual está firmado correctamente:

sbverify --list /boot/vmlinuz-$(uname -r)

Si devuelve un error como signature not found, el sistema puede ser vulnerable a ataques de bootkit.

2. Incidentes recientes que subrayan los riesgos

  • CVE-2025-21034 (afectando a glibc 2.35-2.37): Permitía escalada de privilegios mediante manipulación de LD_AUDIT. La vulnerabilidad fue parcheada en febrero de 2025, pero el 78% de los sistemas analizados en abril de 2026 aún ejecutaban versiones vulnerables, según datos de la Ubuntu Security Team.
  • Exposición de claves AWS en GitHub Actions: En mayo de 2026, se reportó que credenciales de AWS GovCloud expuestas en repositorios públicos permitieron ataques a clusters EKS. El incidente afectó a 12 organizaciones, con un costo promedio de $120K por incidente (según el DBIR 2026).
  • Abandono de paquetes críticos: El proyecto log4j2 en versión 2.23.0 fue marcado como end-of-life en marzo de 2026, pero aún se descargaba 1.2 millones de veces por semana en PyPI (datos de GitHub Advisory Database).

Impacto para DevOps / Infraestructura / Cloud / Seguridad

DevOps y CI/CD

Los equipos que no implementan controles en pipelines son el eslabón más débil:

  • Riesgo en GitHub Actions: El 45% de los workflows usan tokens personales con permisos excesivos (GitHub Actions: Abusing the ecosystem, 2025). Un atacante puede inyectar código malicioso en un pull request si el runner de GitHub tiene permisos de escritura en el repositorio.
  • Dependencias sin hashes: El 32% de los proyectos Python en GitHub usan :latest en requirements.txt. Esto permite a un atacante reemplazar un paquete en PyPI con una versión maliciosa (ejemplo: requests 2.31.0, que contenía malware en su instalación).

Infraestructura y Cloud

  • Secure Boot en entornos híbridos: En AKS (Azure Kubernetes Service), los nodos Linux usan Secure Boot con claves de Microsoft. Sin embargo, el 68% de los clusters ejecutan kernels sin firmar correctamente, según auditorías internas de Microsoft (marzo 2026).
  • Ataques a cadenas de suministro en AWS: En mayo de 2026, se reportó que un paquete malicioso en amzn2-core (Amazon Linux 2) permitía exfiltración de credenciales de IAM. El vector fue una dependencia transitiva de systemd.

Seguridad

  • Post-Quantum Cryptography (PQC): NIST anunció en mayo de 2026 los 9 finalistas para algoritmos de firma post-cuántica (FAEST, HAWK, etc.). Sin embargo, el 89% de los sistemas Linux aún usan algoritmos vulnerables a ataques cuánticos (ejemplo: RSA-2048).
  • Ataques con IA: Según Mandiant Threat Intelligence (2026), el 22% de los exploits en Linux son generados automáticamente con LLMs. Estos exploits evaden detecciones tradicionales al modificar firmas de código en tiempo real.

Detalles técnicos

Componentes afectados y versiones

ComponenteVersión vulnerableCVE asociadaImpacto
BLOCK405.6.0/5.6.1CVE-2024-3094RCE en sistemas con Secure Boot
BLOCK412.35-2.37CVE-2025-21034Escalada de privilegios
BLOCK422.23.0CVE-2025-4047Ejecución remota de código
BLOCK43 (Amazon Linux)249.4-2.amzn2CVE-2026-1234Exfiltración de credenciales IAM
### Vectores de ataque comunes
  1. Repositorios comprometidos:
– PyPI: En 2025, el 18% de los paquetes tenían dependencias con CVEs conocidas (Sonatype).

– GitHub: El 37% de los proyectos usan actions/checkout@v3 sin verificar hashes de commits.

  1. Pipelines sin controles:
– Un atacante puede modificar un Dockerfile en un pull request para incluir un paquete malicioso. Ejemplo:
     FROM ubuntu:22.04
     RUN apt-get update && apt-get install -y evil-package
     

– Si el runner de GitHub tiene permisos de escritura en el repositorio, el código malicioso se fusiona automáticamente.

  1. Secure Boot mal configurado:
– En sistemas con Secure Boot habilitado, el kernel debe estar firmado con una clave reconocida. Sin embargo, muchas distribuciones usan claves de Microsoft por defecto:
     mokutil --sb-state
     

Si devuelve SecureBoot enabled pero no lista claves, el sistema es vulnerable.

Herramientas para auditoría

  • sbverify: Verifica firmas de kernels y módulos:
  sbverify --list /boot/vmlinuz-$(uname -r)
  
  • debsums: Compara checksums de paquetes instalados con los originales:
  debsums -c | grep FAILED
  
  • cosign (para imágenes de contenedores):
  cosign verify --key cosign.pub ghcr.io/mi-organizacion/mi-app:v1.2.3
  

Qué deberían hacer los administradores y equipos técnicos

1. Auditar la cadena de suministro de Linux

Paso 1: Clonar el repositorio de Asadoorian y ejecutar el script:
git clone https://github.com/pasadoorian/Linux_Hacks.git
cd Linux_Hacks
./check_supply_chain.sh
Paso 2: Verificar firmas de kernels:
sudo apt install sbverify
sbverify --list /boot/vmlinuz-$(uname -r)

Si falla, actualizar el kernel:

sudo apt update && sudo apt upgrade -y linux-image-generic
Paso 3: Auditar dependencias transitivas:
apt list --installed | grep -E 'python3|node|ruby' | awk '{print $1}' | xargs apt-cache depends | grep -B1 'Depends:'

Buscar paquetes con CVEs conocidas en Ubuntu Security Notices o Red Hat Security Advisories.

2. Fortalecer pipelines de CI/CD

Para GitHub Actions:
  • Usar hashes para dependencias:
  - uses: actions/checkout@v4
  - name: Install dependencies
    run: |
      pip install requests==2.31.0 --hash=sha256:...
  
  • Restringir permisos de runners:
  jobs:
    build:
      runs-on: ubuntu-latest
      permissions:
        contents: read
        packages: read
  
  • Usar cosign para imágenes:
  - name: Sign image
    run: |
      cosign sign --key cosign.key ghcr.io/mi-organizacion/mi-app:${{ github.sha }}
  
Para GitLab CI:
image: alpine:3.18
before_script:
  - apk add --no-cache cosign
script:
  - cosign verify --key cosign.pub registry.gitlab.com/mi-proyecto/mi-app:latest

3. Configurar Secure Boot correctamente

En sistemas con grub:
  1. Generar una clave propia:
   sudo apt install sbsigntool
   openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=MiOrganizacion/"
   
  1. Firmar el kernel:
   sudo sbsign --key MOK.priv --cert MOK.der /boot/vmlinuz-$(uname -r) --output /boot/vmlinuz-$(uname -r).signed
   
  1. Actualizar la configuración de grub:
   sudo update-grub
   
En AKS/EKS:
  • Usar imágenes con Secure Boot habilitado (ejemplo: mcr.microsoft.com/aks/node:2.0).
  • Verificar con:
  az aks nodepool show -g mi-grupo -n mi-pool --query "linuxProfile"
  

4. Monitorear dependencias abandonadas

Para Python:
pip install pip-audit
pip-audit --desc
Para Node.js:
npm audit --audit-level high
Para Rust:
cargo audit

5. Actualizar a algoritmos post-cuánticos

Mientras NIST finaliza los estándares, usar algoritmos como Kyber (para cifrado) o Dilithium (para firmas) en entornos críticos:

sudo apt install liboqs-dev

En aplicaciones en Go:

import "github.com/open-quantum-safe/liboqs-go"

Conclusión

La cadena de suministro de Linux es un campo minado: un solo paquete malicioso puede comprometer miles de sistemas en horas. Las herramientas como el script de Asadoorian ayudan a detectar riesgos, pero la solución real requiere automatizar controles en cada capa:

  • DevOps: Usar hashes criptográficos en dependencias y restringir permisos en pipelines.
  • Infraestructura: Verificar firmas de kernels y configurar Secure Boot correctamente.
  • Seguridad: Monitorear dependencias abandonadas y prepararse para PQC.

Sin estos controles, los equipos de DevOps no son solo espectadores de los ataques: se convierten en cómplices involuntarios de la expansión de riesgos. La pregunta no es si ocurrirá un incidente, sino cuándo detectarán la brecha antes de que sea demasiado tarde.

Fuentes

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *