Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Python-Example — Seal Security example — vulnerable pip app (PyYAML CVE-2020-14343) remediated to sealed versions; GitHub Actions + Jenkins integration | Kitploit
Herramientas/GitHubGitHub/seal-sec-demo-2/python-example
Análisis de VulnerabilidadesAnálisis de CódigoDevSecOpsSeguridad de Cadena de SuministroAprendizaje y Educación
GitHubseal-sec-demo-2/python-example

Python-Example

Seal Security example — vulnerable pip app (PyYAML CVE-2020-14343) remediated to sealed versions; GitHub Actions + Jenkins integration

Ver Repositorio
hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Seal Security — Ejemplo de Python (pip)

Una aplicación Flask mínima e intencionalmente vulnerable que se utiliza para demostrar, de principio a fin, cómo Seal Security remedia un CVE conocido reemplazando una dependencia vulnerable con una versión sellada (con backport, de sustitución directa) — sin cambios en tus requisitos declarados ni en tu código.

Está diseñada como una prueba de humo de principio a fin para el CLI de Seal en CI/CD: ejecuta la aplicación, dispara un exploit real, ejecuta Seal y observa cómo el mismo exploit queda bloqueado.


Qué demuestra este ejemplo

EcosistemaPython / pip
Paquete vulnerablePyYAML==5.1
CVECVE‑2020‑14343 — deserialización de yaml.load / FullLoader → ejecución arbitraria de código
Versión sellada (corregida)pyyaml 5.1+sp1 del registro PyPI de Seal
IntegraciónCLI de Seal como un paso de compilación — mostrado para GitHub Actions y Jenkins

Cómo funciona el exploit

La página de bienvenida toma un name y lo analiza mediante el cargador predeterminado de PyYAML:

root@kitploit:~
parsed = yaml.load(name)   # PyYAML 5.1 → unsafe FullLoader (CVE-2020-14343)

En PyYAML 5.1, yaml.load() sin un SafeLoader explícito usa el FullLoader, que puede construir objetos arbitrarios de Python a partir de entrada no confiable. Un atacante envía una carga útil YAML que evalúa Python arbitrario en el servidor.

Solicitud normal

root@kitploit:~
/?name=alice          →  Welcome, alice!

Solicitud de exploit — pasa este YAML como name (ya codificado en URL en los registros del flujo de trabajo):

root@kitploit:~
!!python/object/apply:tuple [!!python/object/apply:map [!!python/name:eval , ["__import__('subprocess').check_output(['id']).decode()"]]]

El PyYAML vulnerable deserializa y ejecuta la carga útil, la aplicación muestra una página “You've been pwned” y el servidor se mata a los pocos segundos (para que la página se muestre primero). Al recargar, la aplicación ya no está; a través de ngrok verás una página “endpoint offline”.


Estructura del repositorio

root@kitploit:~
.
├── app.py                         # the vulnerable Flask app
├── requirements.txt               # declares PyYAML==5.1
├── Jenkinsfile                    # example Jenkins (Groovy) pipeline with the Seal stage
└── .github/workflows/
    ├── build-and-run.yml          # run + expose the app for browser testing
    └── seal-security.yml          # run Seal remediation, then start the app

Requisitos previos

Seal es SaaS, alojado por Seal — no se instala nada en tu entorno y todo el tráfico es HTTPS saliente solo por TCP 443. Para ejecutar la remediación necesitas:

Secreto / credencial

Configúralos en Settings → Secrets and variables → Actions (GitHub) o Manage Jenkins → Credentials (Jenkins). Nunca subas tokens al repositorio.

Permite en la lista blanca estos hosts de Seal para salida por 443: app.sealsecurity.io, authorization.sealsecurity.io, cli.sealsecurity.io y, para los paquetes pip sellados, pypi.sealsecurity.io. El binario del CLI se descarga desde github.com / objects.githubusercontent.com.


Ejecutar localmente

root@kitploit:~
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python app.py               # → http://localhost:5000

Abre http://localhost:5000/?name=alice (funciona), luego envía la carga útil del exploit de arriba como name — la aplicación muestra "You've been pwned" y el servidor se mata unos segundos después.


Remediar con Seal

El CLI de Seal se ejecuta como un paso adicional, después de pip install y antes del empaquetado. Escanea las dependencias resueltas y reescribe las vulnerables a sus versiones selladas, usando el modo de corrección remoto (la política se gestiona de forma centralizada en la interfaz de Seal).

Opción A — GitHub Actions

Usa seal-community/cli-action:

root@kitploit:~
- uses: seal-community/cli-action@latest
  with:
    mode: fix
    fix_mode: remote
    token: ${{ secrets.SEAL_TOKEN }}
    target: requirements.txt      # the manifest for this ecosystem

Ejecútalo mediante Actions → “Seal Security Remediation” → Run workflow. Consulta .github/workflows/seal-security.yml.

Opción B — Jenkins (pipeline Groovy)

Una única etapa añadida, después de la instalación y antes del empaquetado. Ver Jenkinsfile:

root@kitploit:~
stage('Seal') {
  steps {
    sh '''
      curl -fsSL https://github.com/seal-community/cli/releases/download/latest/seal-linux-amd64-latest -o seal
      chmod +x seal
      ./seal fix --mode remote "$SEAL_MANIFEST"   # SEAL_MANIFEST=requirements.txt
    '''
  }
}

SEAL_TOKEN proviene de la credencial seal-token de Jenkins; establece SEAL_PROJECT en tu ID de proyecto de Seal.


Qué cambia Seal

Después de seal fix, la dependencia vulnerable se resuelve a una compilación sellada del registro PyPI de Seal — el mismo paquete, con el parche de seguridad incorporado:

DependenciaAntesDespués (sellado)
PyYAML5.15.1+sp1

Una versión sellada es el mismo paquete con el parche de seguridad incorporado — un reemplazo directo, sin cambios de código ni actualización de versión mayor.

Verificar la corrección

Vuelve a ejecutar el exploit contra la aplicación remediada. El PyYAML sellado se niega a construir los objetos maliciosos, por lo que yaml.load lanza una excepción en lugar de ejecutar la carga útil, y la aplicación responde con “Invalid input — payload rejected.” Los nombres normales siguen funcionando.


Cómo añadir Seal a tu propio proyecto

  1. Añade un paso a tu pipeline, después de que se instalen las dependencias y antes del empaquetado.
  2. Apunta seal fix al manifiesto específico — requirements.txt para pip. Para un repositorio con múltiples manifiestos/archivos de bloqueo, ejecuta un seal fix por manifiesto.
  3. Usa el modo de corrección remoto para que tu equipo de seguridad gestione la política de remediación de forma centralizada en la interfaz de Seal — no se confirma nada en el repositorio.
  4. Proporciona el token de Seal a través de tu almacén de secretos de CI (secreto de GitHub / credencial de Jenkins).

Esa es toda la integración — una etapa, solo saliente, sin cambios en el código de la aplicación.

Descargar herramienta
Se usa para
Dónde va
Token de SealAutenticar el CLI de SealSecreto de GitHub Actions SEAL_TOKEN / credencial "Secret text" de Jenkins seal-token
Token de ngrok (opcional)Exponer la aplicación en ejecución a un navegador para pruebasSecreto de GitHub Actions NGROK_TOKEN