CVE-2024-28253
Published: 15 March 2024
Summary
CVE-2024-28253 is a critical-severity Code Injection (CWE-94) vulnerability in Open-Metadata Openmetadata. Its CVSS base score is 9.4 (Critical).
Operationally, ranked in the top 0.2% of CVEs by exploit likelihood; it is not currently listed in the CISA KEV catalog.
Deeper analysis
OpenMetadata, a platform for metadata discovery and governance, contains a SpEL expression injection vulnerability (CWE-94) in the policy-handling code path. The `CompiledRule::validateExpression` method is invoked from `PolicyRepository.prepare`, which is reached via `EntityRepository.prepareInternal` during `EntityResource.createOrUpdate`. Because the authorization check occurs after this preparation step, an attacker-supplied expression can be evaluated before any access control is enforced.
An unauthenticated attacker can trigger the flaw by sending a PUT request to `/api/v1/policies`, which is handled by `PolicyResource.createOrUpdate`. Successful exploitation yields remote code execution on the server, with the issue carrying a CVSS 3.1 score of 9.4 reflecting network-accessible attack with no required credentials or user interaction.
The vulnerability was reported as GHSL-2023-252 and has been fixed in OpenMetadata 1.3.1; the project states there are no known workarounds and recommends immediate upgrade. The associated EPSS score stands at 0.9292 with no material post-disclosure rise indicated.
EU & UK References
- 🇪🇺 ENISA EUVD: EUVD-2024-1147
Vulnerability details
OpenMetadata is a unified platform for discovery, observability, and governance powered by a central metadata repository, in-depth lineage, and seamless team collaboration. `CompiledRule::validateExpression` is also called from `PolicyRepository.prepare`. `prepare()` is called from `EntityRepository.prepareInternal()` which, in turn, gets called from `EntityResource.createOrUpdate()`.…
more
Note that even though there is an authorization check (`authorizer.authorize()`), it gets called after `prepareInternal()` gets called and therefore after the SpEL expression has been evaluated. In order to reach this method, an attacker can send a PUT request to `/api/v1/policies` which gets handled by `PolicyResource.createOrUpdate()`. This vulnerability was discovered with the help of CodeQL's Expression language injection (Spring) query and is also tracked as `GHSL-2023-252`. This issue may lead to Remote Code Execution and has been addressed in version 1.3.1. Users are advised to upgrade. There are no known workarounds for this vulnerability.
- CWE(s)
Related Threats
No named actor attribution yet. ATT&CK technique mapping in progress for this CVE.
Affected Assets
Mitigating Controls
Likely Mitigating Controls AI
Per-CVE control mapping for this CVE has not run yet; the list below is derived from the weakness types (CWEs) cited in the NVD entry.
Makes persistent code injection into loaded programs impossible when the executable image itself resides on hardware-protected read-only media.
Dynamically generated code can be produced and executed inside the isolated chamber, preventing host compromise from code-injection payloads.
Validates inputs used in dynamic code generation to block injected directives.
Directly prevents execution of attacker-supplied code written into data memory regions.