{"uuid": "a17c4ed7-aa25-488b-a575-b5c32ef56ed3", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "2a075640-a300-48a4-bb44-bc6130783b9b", "vulnerability": "CVE-2026-39987", "type": "exploited", "source": "https://t.me/poxek/6047", "content": "Pre-auth RCE \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0432 marimo (Python notebook framework) \u2014 CVE-2026-39987\n#RCE #CVE #Marimo #Python #WebSocket #AppSec\n\n\u0412 Marimo \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430. \u041a\u0430\u043a \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438, \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 /terminal/ws \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438: WebSocket-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438 \u0441\u0435\u0441\u0441\u0438\u0439, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 pty.fork() \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 shell. \u041a\u043e\u0440\u0435\u043d\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2014 AuthenticationMiddleware \u0438\u0437 Starlette \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u043e \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 WebSocket-\u0430\u043f\u0433\u0440\u0435\u0439\u0434, \u0430 \u0441\u0430\u043c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 validate_auth() \u043f\u0435\u0440\u0435\u0434 websocket.accept().\n\n\u041f\u043e\u0434 \u0443\u0433\u0440\u043e\u0437\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Marimo \u2264 0.22.x. \u0424\u0438\u043a\u0441 \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u0432 0.23.0.\n\n\u267e\ufe0f\u0418\u043c\u043f\u0430\u043a\u0442\u267e\ufe0f\n\n\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0431\u0430\u0433\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u041e\u0421, \u043a\u0440\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a .env, API-\u043a\u043b\u044e\u0447\u0430\u043c \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u043a\u0430\u043a \u0442\u043e\u0447\u043a\u0443 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435.\n\n\u267e\ufe0f\u0410\u0442\u0430\u043a\u0430\u267e\ufe0f\n\n\u25aa\ufe0f\u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043f\u043e \u0441\u0435\u0442\u0438 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 Marimo \u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u043c WebSocket-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a ws://TARGET:/terminal/ws \u0438\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 wss://-URL\n\u25aa\ufe0f\u042d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 websocket.accept() \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043b\u0438\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0443 (PTY)\n\u25aa\ufe0f\u041f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0440\u044f\u043c\u043e \u0447\u0435\u0440\u0435\u0437 WebSocket, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 id, whoami, ls -la, cat /etc/passwd. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u0430\u043a \u043f\u043b\u0430\u0446\u0434\u0430\u0440\u043c \u0434\u043b\u044f lateral movement.\n\n\u267e\ufe0f\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f in wild\u267e\ufe0f\n\n\u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c Sysdig TRT, \u0447\u0435\u0440\u0435\u0437 9 \u0447\u0430\u0441\u043e\u0432 41 \u043c\u0438\u043d\u0443\u0442\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 advisory \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f. \u0417\u0430 3 \u0434\u043d\u044f (11\u201314 \u0430\u043f\u0440\u0435\u043b\u044f) \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e 662 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442-\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 11 IP \u0438\u0437 10 \u0441\u0442\u0440\u0430\u043d. \u0410\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u043d\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 NKAbuse \u2014 Go-\u0431\u044d\u043a\u0434\u043e\u0440 \u0441 C2 \u0447\u0435\u0440\u0435\u0437 NKN blockchain, \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0439 Kubernetes-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 kagent \u0438 \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 typosquatted Hugging Face Space vsccode-modetx.\n\n\u267e\ufe0f\u0417\u0430\u0449\u0438\u0442\u0430\u267e\ufe0f\n\n\u25aa\ufe0f\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 Marimo \u0434\u043e \u0432\u0435\u0440\u0441\u0438\u0438 0.23.0 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435\n\u25aa\ufe0f\u041d\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Marimo \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f VPN, \u043f\u0440\u043e\u043a\u0441\u0438 \u0441 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u0431\u0440\u0430\u043d\u0434\u043c\u0430\u0443\u044d\u0440\u0430\n\u25aa\ufe0f\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 Marimo \u0432 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 \u043f\u043e\u0434 non-root user\n\n\ud83d\udd17\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\n\n\ud83c\udf1a @poxek | \ud83d\udcf2 MAX |\ud83c\udf1a \u0411\u043b\u043e\u0433 | \ud83d\udcfa YT | \ud83d\udcfa RT | \ud83d\udcfa VK", "creation_timestamp": "2026-04-23T11:23:05.000000Z"}