CVE-2024-47880
NoneCVSS
—
EPSS
0.4%
Published
Oct 24, 2024
CISA due date
—
Cloudanix analysis
A flaw in OpenRefine lets a malicious website trick a logged-in user into running attacker code inside their OpenRefine session, which could delete projects or steal sensitive data.
- Exploitation
- Requires User Interaction
- Attacker needs
- User Interaction
- Complexity
- Low
- Impact
- Full Compromise
- Component
- Application
- Class
- XSS
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Reflected XSS in the export-rows command that echoes request content verbatim into the HTTP response along with an attacker-supplied Content-Type header, allowing script execution in the victim's browser session with the privileges of the authenticated OpenRefine user.
Why it matters to the business
Attackers can cause data loss, exfiltrate project contents or credentials, and run arbitrary expressions if Jython or Closure extensions are enabled, interrupting data-cleaning operations and exposing sensitive information stored in projects.
How an attack unfolds
An attacker creates a malicious web page that performs a cross-origin form POST to the victim's OpenRefine instance using a known valid project ID; the payload contains embedded JavaScript and a forged Content-Type header; when the authenticated user visits the page the response is rendered as executable script, enabling actions such as project deletion or expression execution.
How to fix it
Upgrade OpenRefine to version 3.8.3 or later; the GIT repository is fixed at commit d70d9114a8c021a233f0c13c73a0a7784276f2a4. Apply the same patch to any forked or embedded deployments.
How to confirm the fix worked
Confirm the installed version is 3.8.3 or newer; re-test the export-rows endpoint with a benign payload containing a script tag and verify that the response no longer reflects the payload with an attacker-controlled Content-Type.
Typical attack path
- Identify a reachable OpenRefine instance and obtain a valid project ID containing at least one row
- Host a malicious page that submits a crafted POST to the export-rows endpoint
- Include attacker-controlled JavaScript and Content-Type header in the request body
- Social-engineer an authenticated user to visit the malicious page
- Execute arbitrary actions within the victim's OpenRefine session
How to detect it
Review web-server access logs for POST requests to export-rows endpoints that contain script tags, javascript: URIs, or unusual Content-Type values; correlate with subsequent actions such as project deletion or expression execution.
- POST.*export-rows
- Content-Type:.*text/html.*script
- embedded JavaScript in export-rows response
What your security team should do
- Immediately upgrade all OpenRefine instances to 3.8.3
- Audit project IDs exposed to untrusted users and restrict access where possible
- Disable Jython and Closure extensions if not required
- Monitor web logs for unexpected POSTs to export-rows containing script-like content
The record
OpenRefine is a free, open source tool for working with messy data. Prior to version 3.8.3, the `export-rows` command can be used in such a way that it reflects part of the request verbatim, with a Content-Type header also taken from the request. An attacker could lead a user to a malicious page that submits a form POST that contains embedded JavaScript code. This code would then be included in the response, along with an attacker-controlled `Content-Type` header, and so potentially executed in the victim's browser as if it was part of OpenRefine. The attacker-provided code can do anything the user can do, including deleting projects, retrieving database passwords, or executing arbitrary Jython or Closure expressions, if those extensions are also present. The attacker must know a valid project ID of a project that contains at least one row. Version 3.8.3 fixes the issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | org.openrefine:openrefine | 0 | 3.8.3 |
| Debian:12 | openrefine | 0 | No fix |
| Debian:13 | openrefine | 0 | No fix |
| Ubuntu:22.04:LTS | openrefine | 0 | No fix |
| Ubuntu:24.04:LTS | openrefine | 0 | No fix |
| Ubuntu:24.10 | openrefine | 0 | No fix |
| Ubuntu:Pro:22.04:LTS | openrefine | 0 | 3.5.2-1ubuntu0.1~esm1 |
| Ubuntu:Pro:24.04:LTS | openrefine | 0 | 3.7.7-1ubuntu0.1~esm1 |
Related vulnerabilities
- CVE-2024-49760 OpenRefine is a free, open source tool for working with messy data. Also affects org.openrefine:openrefine
- CVE-2024-47882 OpenRefine is a free, open source tool for working with messy data. Also affects org.openrefine:openrefine
- CVE-2024-47878 OpenRefine is a free, open source tool for working with messy data. Also affects openrefine
- CVE-2024-47879 OpenRefine is a free, open source tool for working with messy data. Also affects openrefine
- CVE-2024-47881 OpenRefine is a free, open source tool for working with messy data. Also affects openrefine