{"id":"CVE-2026-54569","summary":"SENAITE.CORE: Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection') and Missing Authorization in senaite.core","details":"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.","aliases":["GHSA-jrw6-7x4q-w25j"],"modified":"2026-08-28T11:47:27.162418226Z","published":"2026-08-26T15:28:19.919Z","database_specific":{"cna_assigner":"GitHub_M","cwe_ids":["CWE-862","CWE-95"],"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54569.json"},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54569.json"},{"type":"ADVISORY","url":"https://github.com/senaite/senaite.core/security/advisories/GHSA-jrw6-7x4q-w25j"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54569"},{"type":"FIX","url":"https://github.com/senaite/senaite.core/commit/a24d65e99a17ac43c5374ed9f0a60d0fe60d2f74"},{"type":"FIX","url":"https://github.com/senaite/senaite.core/commit/ef4b6d73575b0fbc0edc6114e5e025089aaf9eb7"},{"type":"FIX","url":"https://github.com/senaite/senaite.core/pull/2903"},{"type":"FIX","url":"https://github.com/senaite/senaite.core/pull/2919"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/senaite/senaite.core","events":[{"introduced":"3ba7b2dd1c64106633d669832aa17241b207dc09"},{"fixed":"a24d65e99a17ac43c5374ed9f0a60d0fe60d2f74"},{"fixed":"ef4b6d73575b0fbc0edc6114e5e025089aaf9eb7"}],"database_specific":{"source":["AFFECTED_FIELD","REFERENCES"],"extracted_events":[{"introduced":"2.0.0"},{"last_affected":"2.6.0"}]}}],"versions":["v2.6.0","v2.5.0","v2.4.0","v2.3.0","v2.2.0","v2.1.0","v2.0.0"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-54569.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"}]}