🔴 The Short Version
Imagine handing a trusted employee access to a locked room where they can only read files — but they figure out a secret passage that leads straight to the master control panel for the entire building. That is essentially what this vulnerability allows inside one of the world's most widely deployed open-source business management platforms.
Who Is at Risk — and How Many People Is That?
ERPNext, built on the Frappe Framework, is used by thousands of organizations globally — from small manufacturing firms in Southeast Asia to mid-sized nonprofits in Europe and North America. It manages payroll, inventory, accounting, customer data, and purchasing all in one place. According to Frappe's own public metrics, the platform has been downloaded and deployed by organizations across more than 150 countries.
If your company runs ERPNext version 13.4.0 and you have staff members with "System Manager" level access — a role routinely granted to IT administrators and power users — your server and everything on it is potentially at risk. That means employee salary records, customer financial data, vendor contracts, and any other file the server can touch.
What the Attacker Actually Does
ERPNext allows administrators to write small automation scripts — think of them as mini-programs that run inside the software to handle custom business logic, like automatically sending an invoice when an order is placed. To keep things safe, these scripts are supposed to run inside a "sandbox," a walled-off environment where the script can only do limited, approved things and cannot touch the rest of the computer.
The problem is that this sandbox has a hidden door. By writing a specially crafted script and navigating to the built-in server-script editor in ERPNext, an attacker can peer through the walls of that sandbox using a technique that examines the program's own internal memory — essentially asking the software "what were you doing a moment ago, and what tools do you have access to?" From there, the attacker climbs up through the software's own call history until they reach a level where they can issue raw operating system commands: copy files, create new user accounts, send data to an outside server, or delete everything.
The most chilling part? This doesn't require any hacking of the login system. The attacker is already a legitimate, logged-in user. This is the insider threat scenario that keeps IT security teams awake at night — or the scenario where a phished admin account becomes the keys to the kingdom.
Mechanism: The exploit accesses the
gi_frame attribute of a generator object to traverse CPython's call stack frames, eventually reaching an unrestricted scope containing builtins. From there, os.popen() is invoked to achieve arbitrary OS command execution. RestrictedPython's attribute access restrictions fail to blocklist generator frame attributes, leaving the call stack traversal path open.Entry Point:
/app/server-script endpoint (authenticated POST)Affected Version: ERPNext 13.4.0 / Frappe Framework (RestrictedPython integration)
CVSS: 8.8 (High) — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE: CWE-693 (Protection Mechanism Failure), CWE-94 (Code Injection)
Has Anyone Been Attacked Yet?
As of the time of writing, there is no confirmed evidence of this vulnerability being actively exploited in the wild. No ransomware groups or threat actors have been publicly linked to campaigns leveraging CVE-2023-54345. However, the attack path is well-defined and requires no exotic tooling — anyone with knowledge of Python internals and a System Manager account could reproduce it. Security researchers typically measure the window between a published CVE and the first exploitation attempts in days, not weeks. The clock is ticking.
The vulnerability was catalogued and assigned a CVE identifier through standard disclosure processes. Organizations running the affected version should treat this as urgent, even in the absence of confirmed attacks. The combination of a high CVSS score, a clear exploitation pathway, and the sensitive nature of ERP data makes this a high-priority remediation target.
What You Should Do Right Now
-
Update ERPNext immediately. Check your current version by navigating to Settings → About inside ERPNext. If you are on version 13.4.0, update to the latest stable release via the Frappe bench tool using
bench update --reset. As of the latest Frappe releases, version 14.x and 15.x branches contain architectural improvements to script sandboxing. Verify your specific patch level against the official Frappe GitHub releases page. - Audit and restrict System Manager role assignments. Log in as Administrator and navigate to Settings → User List. Filter by the "System Manager" role and review every account that holds it. Remove the role from any user who does not strictly require it. Consider implementing multi-factor authentication (MFA) for all System Manager accounts immediately — this raises the bar for an attacker who has stolen credentials.
-
Review and disable server scripts if not in active use. Navigate to Settings → Server Script and audit every script listed. Disable or delete any script that is not actively required for business operations. If your organization does not use custom server scripts at all, consider disabling the feature at the system level by setting
server_script_enabled = 0in yoursite_config.jsonfile, then restarting your bench instance. This removes the attack surface entirely until a patch is confirmed applied.
sandbox-escape restricted-python frame-introspection remote-code-execution authentication-required erpnext frappe-framework CVE-2023-54345