
CVE-2026-1961 PoC — Foreman의 WebSocket 프록시(lib/ws_proxy.rb)에서 정제되지 않은 컴퓨트 리소스 호스트명을 통한 명령어 주입으로, foreman 사용자 권한으로 RCE에 이르는 취약점. 책임 있는 공개 및 패치 완료.
Foreman의 WebSocket 프록시(lib/ws_proxy.rb)에 존재하는 명령 주입 취약점에 대한 개념 증명(PoC)으로, Red Hat에 책임 있게 공개되어 패치되었습니다.
Foreman의 WebSocket 프록시는 정제되지 않은 host 값 — 컴퓨트 리소스 제공자의 API 응답(예: VMware vSphere HostSystem.name)에서 가져온 — 을 Open3.popen3를 통해 실행되는 셸 명령에 직접 삽입합니다. Foreman 인스턴스가 연결하는 컴퓨트 리소스 서버를 제어하거나 스푸핑할 수 있는 공격자는 임의의 셸 명령을 주입하여, 관리자가 VM의 Console을 열 때 foreman 사용자 권한으로 원격 코드 실행을 달성할 수 있습니다.
성공적인 익스플로잇은 Foreman의 데이터베이스 자격 증명과 암호화 키에 대한 접근을 허용하여, 저장된 모든 인프라 자격 증명(vCenter, AWS, SSH 키, API 토큰)을 노출시키고 관리되는 인프라로의 추가 피벗팅을 가능하게 합니다.
| CVE | CVE-2026-1961 |
| CWE | CWE-78 (OS 명령 주입) |
| CVSS 3.1 | 8.0 (높음) — AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H |
| 영향받는 구성 요소 | lib/ws_proxy.rb |
| 영향받는 버전 | Foreman 3.18.0 이하 (3.17.0에서 확인됨; 코드 경로는 2020년 이후 변경되지 않음) |
| 수정된 버전 | Foreman 3.18.1, 3.17.2, 3.16.3 |
| 인증 필요 여부 | 없음 (공격자가 악성 서버를 실행하며, Foreman 관리자는 정상 워크플로의 일부로 이에 인증함) |
| 사용자 상호작용 | 관리자가 VM에서 Console을 클릭 (정상 워크플로) |
| 권고문 | https://access.redhat.com/security/cve/cve-2026-1961 |
lib/ws_proxy.rb:44에서 host 매개변수가 셸 명령 문자열에 직접 삽입됩니다:
cmd = "websockify --daemon --idle-timeout=#{idle_timeout} --timeout=#{timeout} #{port} #{host}:#{host_port}"
host는 컴퓨트 리소스 API 응답에서 오며, Open3.popen3를 통해 셸로 전달되기 전에 정제되지 않습니다.
malicious_vsphere_server.py는 최소한의 vSphere SOAP API — 인증과 VM 열거를 처리할 수 있을 정도 — 를 구현하고, 셸 메타문자 페이로드를 포함하는 오염된 HostSystem.name 값을 반환합니다.
python3 malicious_vsphere_server.py
python3 malicious_vsphere_server.py
VMware<attacker_ip>user / pass)EvilDatacenter 로드)VNCTestVM 찾기find /tmp -name "vsphere_rce.txt" 2>/dev/null
cat /tmp/systemd-private-*/tmp/vsphere_rce.txt
foremanHoussam Sahli (Malleum)
패치 이후 공개되었으며, 조정된 공개 절차를 따랐습니다. 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하지 않았거나 명시적 테스트 허가를 받지 않은 시스템에 사용하지 마십시오.