
PoC für CVE-2026-1961 — Command Injection im WebSocket-Proxy von Foreman (lib/ws_proxy.rb) über einen nicht bereinigten Compute-Resource-Hostnamen, was zu RCE als der Benutzer foreman führt. Verantwortungsvoll offengelegt und gepatcht.
Proof-of-Concept für eine Befehlsinjektions-Schwachstelle im WebSocket-Proxy von Foreman (lib/ws_proxy.rb), die verantwortungsvoll an Red Hat gemeldet und gepatcht wurde.
Der WebSocket-Proxy von Foreman interpoliert einen nicht bereinigten host-Wert — der aus der API-Antwort eines Compute-Resource-Providers stammt (z. B. VMware vSphere HostSystem.name) — direkt in einen Shell-Befehl, der über Open3.popen3 ausgeführt wird. Ein Angreifer, der einen Compute-Resource-Server kontrolliert oder spoofed, mit dem eine Foreman-Instanz verbunden ist, kann beliebige Shell-Befehle injizieren und dadurch Remote-Code-Ausführung als Benutzer foreman erreichen, wenn ein Administrator die Konsole einer VM öffnet.
Eine erfolgreiche Ausnutzung gewährt Zugriff auf die Datenbank-Anmeldedaten und Verschlüsselungsschlüssel von Foreman, wodurch alle gespeicherten Infrastruktur-Anmeldedaten (vCenter, AWS, SSH-Schlüssel, API-Token) offengelegt und weiteres Pivotieren in die verwaltete Infrastruktur ermöglicht wird.
| CVE | CVE-2026-1961 |
| CWE | CWE-78 (OS Command Injection) |
| CVSS 3.1 | 8.0 (High) — AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H |
| Betroffene Komponente | lib/ws_proxy.rb |
| Betroffene Versionen | Foreman bis einschließlich 3.18.0 (bestätigt auf 3.17.0; Codepfad unverändert seit 2020) |
| Behoben in | Foreman 3.18.1, 3.17.2, 3.16.3 |
| Authentifizierung erforderlich | Keine (der Angreifer betreibt den bösartigen Server; der Foreman-Administrator authentifiziert sich bei diesem im Rahmen des normalen Workflows) |
| Benutzerinteraktion | Administrator klickt auf Console bei einer VM (normaler Workflow) |
| Advisory | https://access.redhat.com/security/cve/cve-2026-1961 |
In lib/ws_proxy.rb:44 wird der Host-Parameter direkt in einen Shell-Befehlstring interpoliert:
cmd = "websockify --daemon --idle-timeout=#{idle_timeout} --timeout=#{timeout} #{port} #{host}:#{host_port}"
host stammt aus der API-Antwort der Compute-Resource und wird nie bereinigt, bevor er über Open3.popen3 an eine Shell übergeben wird.
malicious_vsphere_server.py implementiert eine minimale vSphere-SOAP-API — ausreichend, um Authentifizierung und VM-Aufzählung zu handhaben — und gibt einen vergifteten HostSystem.name-Wert zurück, der eine Shell-Metazeichen-Payload enthält.
python3 malicious_vsphere_server.py
python3 malicious_vsphere_server.py
VMware<attacker_ip>user / pass)EvilDatacenter)VNCTestVMfind /tmp -name "vsphere_rce.txt" 2>/dev/null
cat /tmp/systemd-private-*/tmp/vsphere_rce.txt
foremanHoussam Sahli (Malleum)
Veröffentlicht nach dem Patch, im Rahmen einer koordinierten Offenlegung. Nur für autorisierte Sicherheitstests und Bildungszwecke bereitgestellt. Nicht gegen Systeme verwenden, die Sie nicht besitzen oder für deren Test Sie keine ausdrückliche Genehmigung haben.