Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Unauthenticated Socket.IO handler reaches subprocess.call(shell=True) over the network with no user interaction, giving low-complexity RCE and full C/I/A impact, so PR:N and AC:L.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
4DescriptionCVE.org
LazyOwn RedTeam/APT Framework is an AI-powered C2 and red-team operations framework. Prior to 0.2.154, LazyOwn's lazyc2.py registers an unauthenticated Socket.IO input event handler that dispatches data.get('value') to LazyOwnShell.one_cmd, reaching LazyOwnShell.do_cmd and subprocess.call(command, shell=True), allowing unauthenticated remote code execution in the C2 process. This issue is fixed in 0.2.154.
AnalysisAI
Remote code execution in LazyOwn RedTeam/APT Framework (grisuno/lazyown) before 0.2.154 allows unauthenticated attackers to run arbitrary OS commands on the C2 server. The lazyc2.py component registers a Socket.IO input event handler with no authentication that passes attacker-supplied data.get('value') through LazyOwnShell.one_cmd into subprocess.call(command, shell=True), yielding full command execution in the C2 process. CVSS 9.8 (AV:N/AC:L/PR:N/UI:N) reflects unauthenticated network-reachable execution; no public exploit identified at time of analysis, though the vulnerable code path and its fix are fully disclosed in the vendor commit.
Technical ContextAI
LazyOwn is an AI-powered command-and-control (C2) and red-team operations framework written in Python, using a Flask/Flask-SocketIO web server (lazyc2.py) as its team-server interface. The root cause is CWE-306 (Missing Authentication for a Critical Function): a WebSocket/Socket.IO event handler was exposed without the @login_required / current_user.is_authenticated checks applied to the framework's other routes. Because the handler forwards the raw 'value' field to LazyOwnShell.do_cmd, which executes it via subprocess.call(..., shell=True), any client that can open a Socket.IO connection to the server reaches a shell interpreter. The affected package is identified by CPE cpe:2.3:a:grisuno:lazyown, and the fix commit both adds @login_required decorators to numerous Socket.IO handlers (connect, handle_input, pty_input, resize, etc.) and hardens credential handling with an is_insecure_credential() check and auto-generated strong credentials.
RemediationAI
Upgrade to LazyOwn 0.2.154 or later, which is the vendor-released patch (https://github.com/grisuno/LazyOwn/releases/tag/release/0.2.154); this release adds @login_required authentication to the previously unauthenticated Socket.IO handlers (connect, handle_input, pty_input, resize and others) that reached the shell sink, per commit 2e1e3a7b5da8149ae28a970b5883aefa42921652 and advisory GHSA-fr84-8cfg-59w4. If immediate upgrade is not possible, do not expose the LazyOwn C2 web/Socket.IO interface to untrusted networks: bind it to localhost or a management VLAN and place it behind a firewall or reverse proxy that requires authentication, which prevents anonymous clients from opening the Socket.IO connection at the cost of requiring VPN/bastion access for operators. Additionally, rotate to strong, non-default C2 credentials - the same patch introduces is_insecure_credential() to reject weak/empty logins (e.g. 'LazyOwn'/'admin'/'root', passwords under 12 characters), so operators should assume any instance started with default credentials was also weakly protected.
Same technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51307