
Honeypot ad alta interazione che replica un'app Laravel/Livewire vulnerabile. Cattura exploit RCE e webshell che hanno come bersaglio CVE-2024-47823, CVE-2025-54068 e CVE-2025-14894, quindi li analizza in container Docker in sandbox per estrarre gli IOC.
Un honeypot ad alta interazione che si maschera da applicazione Laravel/Livewire vulnerabile. Cattura i tentativi di exploit che mirano a CVE note di Livewire, archivia file malevoli caricati (webshell) e payload di remote code execution (RCE) con deduplicazione SHA-256 e, opzionalmente, li esegue in un container Docker sandboxed per estrarre indicatori di compromissione (IOC) — URL, IP e domini che il malware tenta di contattare.
Il sistema funziona come due processi separati per sicurezza: un web server che cattura i payload (senza accesso a Docker) e un worker sandbox che li analizza in container isolati.
Attaccante → Nginx → FastAPI → SQLite ← Sandbox Worker (Docker)
(cattura) (polling dei job, scrive gli IOC)
Facade — Serve pagine di login/registrazione Laravel realistiche con attributi Livewire wire:, token XSRF e header X-Powered-By: PHP/8.3.12. Gli scanner automatici vedono quello che sembra una vera app vulnerabile.
Cattura — Ogni richiesta HTTP viene registrata su SQLite (IP, header, hash del body, timestamp) da un layer middleware ASGI, in modo trasparente, prima che avvenga qualsiasi routing.
Trappole — Gli endpoint Livewire accettano upload di file e messaggi dei componenti proprio come farebbe il framework reale. I payload vengono classificati (codice PHP, oggetti serializzati, comandi shell) e archiviati con deduplicazione SHA-256. Ogni payload interessante crea un job persistente nella coda sandbox_jobs.
Sandbox — Un processo worker separato esegue il polling dei job in attesa ed esegue ogni payload in un container Docker effimero (filesystem di sola lettura, nessuna rete, cap_drop=ALL). Uno shim LD_PRELOAD intercetta le chiamate di rete libc per registrare i tentativi di comunicazione C2 (command-and-control). L'analizzatore estrae gli IOC e valuta i potenziali endpoint C2 usando euristiche.
| CVE | CVSS | Riepilogo | Endpoint trappola |
|---|---|---|---|
| CVE-2024-47823 | 9.8 Critica | RCE tramite upload di file Livewire mediante bypass del tipo MIME. Le estensioni dei file vengono dedotte dal tipo MIME invece di essere validate dal nome file, consentendo upload .php mascherati da immagini. Colpisce Livewire < 2.12.7 e < 3.5.2. | POST /livewire/upload-file |
| CVE-2025-54068 | 9.2 Critica | RCE tramite idratazione delle proprietà di Livewire. Il processo di idratazione non riesce a sanificare i tipi di oggetto negli aggiornamenti delle proprietà dei componenti, consentendo a payload iniettati di essere eseguiti lato server. Colpisce Livewire 3.0.0-beta.1 fino a 3.6.3. | POST /livewire/message |
| CVE-2025-14894 | Critica | RCE tramite upload senza restrizioni in Livewire Filemanager. La mancanza di validazione del tipo di file e del MIME consente l'upload non autenticato di file PHP eseguibili. | POST /livewire/upload-file |
Una trappola catch-all *.php cattura anche il probing post-exploitation per i nomi di webshell comuni (ad es. accesson.php, wp-login.php, admin.php).
Prerequisiti: Python 3.11+ e uv.
git clone https://github.com/HelgeSverre/livewire-honeypot.git
cd livewire-honeypot
# Installa le dipendenze
uv sync
# Avvia il web server (solo cattura, Docker non necessario)
DATA_DIR=./data uv run uvicorn honeypot.main:app --reload --port 8000
# In un secondo terminale — avvia il worker sandbox (richiede Docker)
DATA_DIR=./data uv run python -m honeypot.worker
# Esegui i test
uv run pytest tests/ -v
Il web server funziona in modo autonomo — cattura e archivia tutto anche senza il worker sandbox attivo. Avvia il worker quando vuoi l'analisi automatica dei payload.
Nota: La directory
src/è nel Python path tramitepyproject.toml(src-layout), quindihoneypot.main:apppunta asrc/honeypot/main.py.
Ti serviranno:
Il deploy completo è un singolo comando una volta che il VPS esiste. Lo script gestisce ogni passaggio da "droplet nudo" a "servizio in esecuzione con TLS" — pacchetti apt, utenti e gruppi, venv Python, immagine sandbox, nginx, certbot e regole firewall.
# 1. Crea un droplet da $6/mese (Ubuntu 24.04, 1 GB di RAM è sufficiente).
# Su DigitalOcean:
doctl compute droplet create veritron-honeypot \
--size s-1vcpu-1gb \
--image ubuntu-24-04-x64 \
--region fra1 \
--ssh-keys "$(doctl compute ssh-key list --format ID --no-header | head -1)" \
--wait
# 2. Punta il record A del tuo dominio all'IP del droplet.
# Aspetta che il DNS risolva prima di continuare.
dig +short your-domain.example # dovrebbe restituire l'IP del droplet
# 3. Copia il progetto sul droplet.
rsync -az --exclude='.git' --exclude='.venv' --exclude='data' \
./ root@<droplet-ip>:/opt/honeypot/
# 4. Esegui lo script di bootstrap. Passare il tuo dominio abilita la TLS tramite certbot.
ssh root@<droplet-ip> 'cd /opt/honeypot && [email protected] \
bash deploy/setup.sh your-domain.example'
Questo è tutto. L'honeypot ora serve una falsa pagina di login Laravel/Livewire su HTTPS, cattura ogni richiesta su SQLite ed è pronto ad analizzare i payload nella sandbox Docker.
deploy/setup.sh è idempotente — rieseguirlo è sicuro. In ordine: