
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 so Remote-Code-Execution 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 und legt damit alle gespeicherten Infrastruktur-Anmeldedaten offen (vCenter, AWS, SSH-Schlüssel, API-Tokens) und ermöglicht die weitere Ausbreitung in die verwaltete Infrastruktur.
| 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 seit 2020 unverändert) |
| 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 im Rahmen des normalen Workflows bei diesem) |
| Benutzerinteraktion | Administrator klickt auf einer VM auf Console (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, die ausreicht, um Authentifizierung und VM-Aufzählung zu verarbeiten, und gibt einen manipulierten 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
Erwartete Ausgabe: foremanHoussam Sahli (Malleum)
Veröffentlicht nach dem Patch, im Rahmen einer koordinierten Offenlegung. Ausschließlich für autorisierte Sicherheitstests und Bildungszwecke bereitgestellt. Nicht gegen Systeme verwenden, die Ihnen nicht gehören oder für deren Test Sie keine ausdrückliche Genehmigung haben.