Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Publicly documented default credentials are reachable over the network with no complexity, interaction, or real privilege, and grant full operator control (C:H/I:H/A:H), 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 ships default C2 credentials LazyOwn and LazyOwn in payload.json and core/payload_schema.py and passes them unchanged to lazyc2.py HTTP Basic authentication, allowing any network-reachable attacker who knows the defaults to authenticate to the C2 dashboard with operator-level access. This issue is fixed in 0.2.154.
AnalysisAI
Default-credential authentication bypass in the LazyOwn RedTeam/APT Framework (grisuno/lazyown) before 0.2.154 lets any network-reachable attacker log into the C2 dashboard using the hardcoded operator credentials 'LazyOwn'/'LazyOwn', gaining full operator-level control of the command-and-control server. The framework ships these defaults in payload.json and core/payload_schema.py and passes them unchanged into lazyc2.py's HTTP Basic authentication. No public exploit identified at time of analysis, but the credentials are trivially known from the source code, and the CVSS base score is 9.8 (Critical).
Technical ContextAI
LazyOwn is a Python-based, AI-powered command-and-control (C2) and red-team operations framework. The affected component is lazyc2.py, a Flask/SocketIO web server that fronts the operator dashboard and uses HTTP Basic authentication for access control. The credentials are sourced from static configuration (payload.json) and a schema module (core/payload_schema.py) that both hardcode the username and password 'LazyOwn', which are then handed to the server's check_auth routine as command-line arguments (sys.argv[2]/sys.argv[3]). This is a classic instance of CWE-1392 (Use of Default Credentials): the product is deployed with a well-known, publicly documented credential pair that operators are not forced to change before the service is exposed. The fix commit (2e1e3a7) adds an is_insecure_credential() check that rejects the weak/default set and auto-generates 20-character random credentials, tightens check_auth to reject empty/short passwords, and - notably - retrofits @login_required and current_user.is_authenticated guards onto numerous previously unprotected routes and SocketIO handlers (logout, banners, mitre, get_connected_clients, lazybot, lazyreport, teamserver, report, pty_input, resize, connect), indicating the exposure extended beyond just the default password to missing per-endpoint authorization.
RemediationAI
Vendor-released patch: upgrade to LazyOwn 0.2.154, which rejects default/weak credentials, auto-generates strong 20-character random credentials (written to .c2_credentials.txt) when insecure ones are detected, and adds @login_required authorization guards to previously unprotected dashboard routes and SocketIO handlers per commit 2e1e3a7 and advisory GHSA-38jf-j9x7-jf6f. If you cannot upgrade immediately, do not run lazyc2.py with the shipped 'LazyOwn'/'LazyOwn' pair - supply strong, unique credentials on the command line (sys.argv username/password), and edit payload.json and core/payload_schema.py to remove the hardcoded defaults so they are not reintroduced. Additionally, restrict network exposure of the C2 dashboard by binding it to localhost or a management VLAN and firewalling the listening port so it is not reachable from untrusted networks; the trade-off is that remote operators will then need a VPN or SSH tunnel to reach the dashboard. Review server logs for authentication from unexpected source addresses, since the defaults may already be known to third parties.
Same weakness CWE-1392 – Use of Default Credentials
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51308