
Hochinteraktiver Honeypot, der eine verwundbare Laravel/Livewire-App nachahmt. Erfasst RCE-Exploits und Webshells, die auf CVE-2024-47823, CVE-2025-54068 und CVE-2025-14894 abzielen, und analysiert sie anschließend in isolierten Docker-Containern, um IOCs zu extrahieren.
Ein High-Interaction-Honeypot, der sich als verwundbare Laravel/Livewire-Anwendung ausgibt. Er erfasst Exploit-Versuche, die auf bekannte Livewire-CVEs abzielen, speichert hochgeladene Schaddateien (Webshells) und Remote-Code-Execution-Payloads (RCE) mit SHA-256-Deduplizierung und führt sie optional in einem gesandboxten Docker-Container aus, um Indicators of Compromise (IOCs) zu extrahieren – URLs, IPs und Domains, mit denen die Malware Kontakt aufzunehmen versucht.
Das System läuft aus Sicherheitsgründen als zwei getrennte Prozesse: ein Webserver, der Payloads erfasst (kein Docker-Zugriff), und ein Sandbox-Worker, der sie in isolierten Containern analysiert.
Attacker → Nginx → FastAPI → SQLite ← Sandbox Worker (Docker)
(capture) (polls jobs, writes IOCs)
Fassade – Stellt realistische Laravel-Anmelde-/Registrierungsseiten mit Livewire-wire:-Attributen, XSRF-Tokens und X-Powered-By: PHP/8.3.12-Headern bereit. Automatisierte Scanner sehen, was wie eine echte verwundbare App aussieht.
Erfassung – Jede HTTP-Anfrage wird von einer ASGI-Middleware-Schicht transparent in SQLite protokolliert (IP, Header, Body-Hash, Zeitstempel), bevor irgendein Routing stattfindet.
Fallen – Livewire-Endpunkte akzeptieren Datei-Uploads und Komponentennachrichten genau wie das echte Framework. Payloads werden klassifiziert (PHP-Code, serialisierte Objekte, Shell-Befehle) und mit SHA-256-Deduplizierung gespeichert. Jeder interessante Payload erzeugt einen dauerhaften Auftrag in der sandbox_jobs-Warteschlange.
Sandbox – Ein separater Worker-Prozess fragt nach anstehenden Aufträgen und führt jeden Payload in einem ephemeren Docker-Container aus (nur lesbares Dateisystem, kein Netzwerk, cap_drop=ALL). Ein LD_PRELOAD-Shim fängt libc-Netzwerkaufrufe ab, um C2-Kommunikationsversuche (Command-and-Control) zu protokollieren. Der Analyzer extrahiert IOCs und bewertet potenzielle C2-Endpunkte mithilfe von Heuristiken.
| CVE | CVSS | Zusammenfassung | Fallen-Endpunkt |
|---|---|---|---|
| CVE-2024-47823 | 9.8 Kritisch | Livewire-Datei-Upload-RCE durch MIME-Typ-Umgehung. Dateierweiterungen werden anhand des MIME-Typs erraten statt anhand des Dateinamens validiert, wodurch als Bilder getarnte .php-Uploads möglich sind. Betrifft Livewire < 2.12.7 und < 3.5.2. | POST /livewire/upload-file |
| CVE-2025-54068 | 9.2 Kritisch | Livewire-Prop-Hydration-RCE. Der Hydrationsprozess bereinigt Objekttypen bei Komponenteneigenschafts-Updates nicht, sodass injizierte Payloads serverseitig ausgeführt werden können. Betrifft Livewire 3.0.0-beta.1 bis 3.6.3. | POST /livewire/message |
| CVE-2025-14894 | Kritisch | Unbeschränkter Upload-RCE im Livewire-Dateimanager. Fehlende Dateityp- und MIME-Validierung ermöglicht den nicht authentifizierten Upload ausführbarer PHP-Dateien. | POST /livewire/upload-file |
Eine *.php-Catch-all-Falle erfasst auch Post-Exploitation-Sondierungen nach gängigen Webshell-Dateinamen (z. B. accesson.php, wp-login.php, admin.php).
Voraussetzungen: Python 3.11+ und uv.
git clone https://github.com/HelgeSverre/livewire-honeypot.git
cd livewire-honeypot
# Install dependencies
uv sync
# Start the web server (capture-only, no Docker needed)
DATA_DIR=./data uv run uvicorn honeypot.main:app --reload --port 8000
# In a second terminal — start the sandbox worker (requires Docker)
DATA_DIR=./data uv run python -m honeypot.worker
# Run tests
uv run pytest tests/ -v
Der Webserver funktioniert eigenständig – er erfasst und speichert alles, auch wenn der Sandbox-Worker nicht läuft. Starten Sie den Worker, wenn Sie eine automatisierte Payload-Analyse wünschen.
Hinweis: Das Verzeichnis
src/ist überpyproject.toml(src-layout) im Python-Pfad, sodasshoneypot.main:appaufsrc/honeypot/main.pyabgebildet wird.
Sie benötigen:
Die vollständige Bereitstellung ist ein einziger Befehl, sobald die VPS existiert. Das Skript übernimmt jeden Schritt von „nacktem Droplet“ bis „Dienst läuft mit TLS“ – apt-Pakete, Benutzer und Gruppen, Python-venv, Sandbox-Image, nginx, certbot und Firewall-Regeln.
# 1. Provision a $6/mo droplet (Ubuntu 24.04, 1 GB RAM is enough).
# On 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. Point your domain's A record at the droplet IP.
# Wait for DNS to resolve before continuing.
dig +short your-domain.example # should return the droplet IP
# 3. Copy the project onto the droplet.
rsync -az --exclude='.git' --exclude='.venv' --exclude='data' \
./ root@<droplet-ip>:/opt/honeypot/
# 4. Run the bootstrap script. Passing your domain enables TLS via certbot.
ssh root@<droplet-ip> 'cd /opt/honeypot && [email protected] \
bash deploy/setup.sh your-domain.example'
Das war's. Der Honeypot liefert jetzt eine gefälschte Laravel/Livewire-Anmeldeseite über HTTPS aus, erfasst jede Anfrage in SQLite und ist bereit, Payloads in der Docker-Sandbox zu analysieren.
deploy/setup.sh ist idempotent – eine erneute Ausführung ist sicher. Der Reihe nach: