CVE-2026-54569: SENAITE.CORE: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection') and Missing Authorization in senaite.core
SENAITE.CORE is the core framework for the SENAITE laboratory information management system. From 2.0.0 to 2.6.0, the SENAITE.CORE JSON API permits unauthenticated remote code execution through a two-request chain involving missing authorization and unsafe evaluation. The state-changing routes in src/bika/lims/jsonapi/update.py, including update, update_many, remove, doActionFor, doActionFor_many, and getusers, do not enforce the senaite.core: Access JSON API permission before resolving attacker-selected objects. In src/bika/lims/jsonapi/init.py, set_fields_from_request passes raw request values for RecordsField and RecordField instances to eval() before field mutator write-permission checks execute. An anonymous attacker can discover the bika_setup object identifier through @@uuid, send a value such as RejectionReasons to /@@API/update, and execute arbitrary Python in the Zope worker before a later mutation failure rolls back ZODB changes. The same unsafe evaluation pattern is present in src/senaite/core/browser/fields/record.py and src/senaite/core/browser/fields/records.py. Successful exploitation can expose or modify laboratory data, files, and accounts and can disrupt the service.
Security readout for executives and security teams
Plain-English summary
An unauthenticated attacker who can reach a vulnerable SENAITE JSON API may run arbitrary Python inside the application worker. This could expose or alter laboratory records, files, and accounts or interrupt service. No user interaction or existing account is required.
Executive priority
Treat this as an emergency remediation item for every affected deployment, especially systems reachable from the internet. The vulnerability requires no credentials and may compromise sensitive laboratory operations. Prioritize containment, vendor-guided patching, exposure review, and compromise assessment.
Technical view
SENAITE.CORE 2.0.0 through 2.6.0 lacks authorization checks on state-changing JSON API routes. A two-request chain can select an object and pass raw RecordField or RecordsField input into eval() before write-permission checks, enabling remote code execution even when the later database mutation fails and rolls back.
Likely exposure
Deployments running senaite.core 2.0.0 through 2.6.0 are affected when the JSON API is reachable by an unauthenticated attacker. Internet exposure creates the greatest urgency, but internal access still presents lateral-movement and insider risk.
Exploitation context
The source bundle describes a practical, low-complexity, unauthenticated attack chain with complete confidentiality, integrity, and availability impact. However, the CVE is not listed as KEV, and the supplied evidence does not establish active exploitation in the wild.
Researcher notes
A failed or rolled-back ZODB mutation does not negate compromise because Python execution occurs earlier. Similar unsafe evaluation patterns are reported in two browser field modules. The supplied sources identify linked fixes but do not state a confirmed fixed release version, so exact upgrade guidance must be verified with the vendor.
Mitigation direction
Check the vendor advisory and apply its corrected release or linked patches without delay.
Until remediated, restrict the SENAITE JSON API to trusted networks and authenticated access controls.
Consider isolating affected systems from untrusted networks while remediation is tested.
If compromise is suspected, preserve evidence and rotate credentials or secrets accessible to the application worker.
Validation and detection
Inventory senaite.core versions and identify every deployment running 2.0.0 through 2.6.0.
Confirm unauthenticated clients cannot access state-changing JSON API routes after remediation.
Verify permission enforcement occurs before attacker-selected object resolution.
Confirm raw RecordField and RecordsField values are no longer dynamically evaluated.
Review application and proxy logs for unusual anonymous JSON API access or chained object-selection activity.
Inspect laboratory data, files, accounts, and worker processes for unexplained changes or anomalies.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · medium confidence lookup
CWE-862: Authorization and privilege behavior lookup
Authorization weaknesses can support privilege escalation and valid-account review, depending on exploit path. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
Code execution and unsafe deserialization weaknesses often justify reviewing execution behavior and process telemetry. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
The CVE wording references code or command execution, so execution technique review may help defensive triage. This is a Glexia inferred lookup path, not an official MITRE, ATT&CK, or CVE Program mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
1ADP providers
6Source links
SSVC decision data
CISA-ADPCISA Coordinator
Timestamp
Version
2.0.3
Exploitation: pocAutomatable: yesTechnical Impact: total
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-862 · source CWE mapping
Missing Authorization
Missing Authorization represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.
Improper Neutralization of Directives in Dynamically Evaluated Code
Improper Neutralization of Directives in Dynamically Evaluated Code represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.