Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Python-Example — Esempio di Seal Security — app pip vulnerabile (PyYAML CVE-2020-14343) corretta con versioni sealed; integrazione GitHub Actions + Jenkins | Kitploit
Strumenti/GitHubGitHub/seal-sec-demo-2/python-example
Analisi delle VulnerabilitàAnalisi del CodiceDevSecOpsSicurezza della Supply ChainApprendimento e Formazione
GitHubseal-sec-demo-2/python-example

Python-Example

Esempio di Seal Security — app pip vulnerabile (PyYAML CVE-2020-14343) corretta con versioni sealed; integrazione GitHub Actions + Jenkins

Vedi Repository
1 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Seal Security — Esempio Python (pip)

Un'applicazione Flask minima e intenzionalmente vulnerabile utilizzata per dimostrare, end‑to‑end, come Seal Security ripara una CVE nota sostituendo una dipendenza vulnerabile con una versione sigillata (backport, drop‑in) — senza alcuna modifica ai requisiti dichiarati o al codice.

È progettata come uno smoke test completo per la CLI Seal in CI/CD: esegui l'app, innesca un exploit reale, esegui Seal e osserva lo stesso exploit venire bloccato.


Cosa dimostra questo esempio

EcosistemaPython / pip
Pacchetto vulnerabilePyYAML==5.1
CVECVE‑2020‑14343 — deserializzazione yaml.load / FullLoader → esecuzione di codice arbitrario
Versione sigillata (corretta)pyyaml 5.1+sp1 dal registro PyPI di Seal
IntegrazioneCLI Seal come passaggio di build — mostrata sia per GitHub Actions che per Jenkins

Come funziona l'exploit

La pagina di benvenuto riceve un name e lo analizza tramite il loader predefinito di PyYAML:

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

Con PyYAML 5.1, yaml.load() senza un SafeLoader esplicito usa il FullLoader, che può costruire oggetti Python arbitrari da input non attendibili. Un attaccante invia un payload YAML che esegue codice Python arbitrario sul server.

Richiesta normale

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

Richiesta exploit — passa questo YAML come name (già URL‑encoded nei log del workflow):

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

Il PyYAML vulnerabile deserializza ed esegue il payload, l'app mostra una pagina “You've been pwned” e il server viene poi terminato (pochi secondi dopo, così la pagina viene prima servita). Ricarica e l'app non c'è più — via ngrok vedrai una pagina “endpoint offline”.


Struttura del repository

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

Prerequisiti

Seal è SaaS, ospitato da Seal — non viene installato nulla nel tuo ambiente e tutto il traffico è HTTPS in uscita sulla sola porta TCP 443. Per eseguire la remediation ti serve:

Segreto / credenziale

Configurali in Settings → Secrets and variables → Actions (GitHub) o in Manage Jenkins → Credentials (Jenkins). Non committare mai i token nel repository.

Aggiungi alla allowlist questi host Seal per la porta 443 in uscita: app.sealsecurity.io, authorization.sealsecurity.io, cli.sealsecurity.io e — per i pacchetti pip sigillati — pypi.sealsecurity.io. Il binario della CLI viene scaricato da github.com / objects.githubusercontent.com.


Eseguilo localmente

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

Apri http://localhost:5000/?name=alice (funziona), poi invia il payload dell'exploit qui sopra come name — l'app mostra "You've been pwned" e il server viene terminato pochi secondi dopo.


Esegui la remediation con Seal

La CLI Seal viene eseguita come un passaggio aggiuntivo, dopo pip install e prima del packaging. Analizza le dipendenze risolte e riscrive quelle vulnerabili nelle loro versioni sigillate, usando la modalità di fix remote (la policy è gestita centralmente nella UI di Seal).

Opzione 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

Eseguilo tramite Actions → “Seal Security Remediation” → Run workflow. Vedi .github/workflows/seal-security.yml.

Opzione B — Jenkins (pipeline Groovy)

Un singolo stage aggiunto, dopo l'installazione e prima del packaging. Vedi 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 dalla credenziale Jenkins seal-token; imposta SEAL_PROJECT sul tuo ID progetto Seal.


Cosa cambia Seal

Dopo seal fix, la dipendenza vulnerabile viene risolta in una build sigillata dal registro PyPI di Seal — stesso pacchetto, fix di sicurezza backportato:

DipendenzaPrimaDopo (sigillata)
PyYAML5.15.1+sp1

Una versione sigillata è lo stesso pacchetto con il fix di sicurezza backportato — una sostituzione drop‑in, senza modifiche al codice e senza upgrade di versione maggiore.

Verifica il fix

Esegui di nuovo l'exploit contro l'app riparata. Il PyYAML sigillato rifiuta di costruire gli oggetti dannosi, quindi yaml.load solleva un'eccezione invece di eseguire il payload, e l'app risponde con “Invalid input — payload rejected.” I nomi normali continuano a funzionare.


Come aggiungere Seal al tuo progetto

  1. Aggiungi un passaggio alla tua pipeline, dopo l'installazione delle dipendenze e prima del packaging.
  2. Indica a seal fix il manifest specifico — requirements.txt per pip. Per un repository con più manifest/lock file, esegui un seal fix per ogni manifest.
  3. Usa la modalità di fix remote così il tuo team di sicurezza gestisce la policy di remediation centralmente nella UI di Seal — non viene committato nulla nel repository.
  4. Fornisci il token Seal tramite il tuo archivio segreti CI (segreto GitHub / credenziale Jenkins).

Questa è l'intera integrazione — uno stage, solo traffico in uscita, nessuna modifica al codice dell'applicazione.

Scarica lo strumento
Utilizzato per
Dove va
Seal tokenAutenticazione della CLI SealSegreto GitHub Actions SEAL_TOKEN / credenziale Jenkins "Secret text" seal-token
ngrok token (facoltativo)Esporre l'app in esecuzione a un browser per i testSegreto GitHub Actions NGROK_TOKEN