
CVE-2026-39987에 대한 개념 증명 익스플로잇으로, Marimo의 /terminal/ws WebSocket 엔드포인트에서 발생하는 사전 인증 RCE로, 인증 없이 PTY 셸 접근을 제공합니다.
Marimo <= 0.20.4은 /terminal/ws WebSocket 엔드포인트의 인증 전 RCE 취약점의 영향을 받습니다.
해당 엔드포인트는 애플리케이션 모드와 터미널 지원 여부를 확인하지만, WebSocket 연결을 수락하기 전에 인증을 검증하지 않습니다. 그런 다음 PTY 셸을 생성하여 인증되지 않은 공격자가 Marimo 프로세스의 권한으로 명령을 실행할 수 있게 합니다.
validate_auth()를 호출하는 다른 WebSocket 엔드포인트와 달리, 취약한 터미널 엔드포인트는 연결을 직접 수락합니다:
if app_state.mode != SessionMode.EDIT:
await websocket.close(...)
return
if not supports_terminal():
await websocket.close(...)
return
await websocket.accept()
child_pid, fd = pty.fork()
인증 확인이 누락되어 인증되지 않은 사용자가 PTY에 접근할 수 있습니다.
<= 0.20.4포함된 CVE-2026-39987.py 클라이언트는 다음에 연결합니다:
/terminal/ws
대화형 모드:
python3 CVE-2026-39987.py -i
단일 명령:
python3 CVE-2026-39987.py "id"
스크립트에서 DEFAULT_HOST를 교체하여 대상을 구성하세요.
성공적인 악용 시 인증되지 않은 PTY 셸과 Marimo 서버 사용자 권한으로 임의 명령 실행이 가능해질 수 있습니다.