/

CVE-2026-108553

Severity:

HIGH RISK

(7.5)

Cross-Site Request Forgery (CWE-352) in OpenRefine get-rows

CVE-2026-108553

Awaiting Analysis

Vulnerability type

Category:

Cross-Site Request Forgery

CWE:

CWE-352

Impact:

Remote Code Execution

Severity:

HIGH RISK

(7.5)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

OpenRefine through 3.10.1 contains a cross-site request forgery vulnerability in the get-rows command that can cause a user's active session to process attacker-controlled Jython facet expressions. If a user with access to OpenRefine visits a malicious page, the cross-origin request may result in operating system commands executing with the OpenRefine user's privileges.

OpenRefine through 3.10.1 contains a cross-site request forgery vulnerability in the get-rows command that can cause a user's active session to process attacker-controlled Jython facet expressions. If a user with access to OpenRefine visits a malicious page, the cross-origin request may result in operating system commands executing with the OpenRefine user's privileges.

Affected context

The issue occurs in OpenRefine deployments where the get-rows command accepts cross-origin requests and processes an engine parameter capable of reaching Jython facet evaluation. Risk is higher when an authenticated or otherwise active OpenRefine user can be induced to browse to an attacker-controlled page while the OpenRefine service is accessible from that browser context.

The issue occurs in OpenRefine deployments where the get-rows command accepts cross-origin requests and processes an engine parameter capable of reaching Jython facet evaluation. Risk is higher when an authenticated or otherwise active OpenRefine user can be induced to browse to an attacker-controlled page while the OpenRefine service is accessible from that browser context.

Exploit preconditions

  • Attack surface: OpenRefine's web interface and the get-rows command
  • Required access: A victim must have an active or authenticated OpenRefine session, depending on deployment controls
  • Trigger point: Processing of a cross-origin GET request containing attacker-controlled command parameters
  • Why exploitation is possible: The request may be accepted without adequate cross-site request validation, allowing server-side evaluation of Jython facet expressions under the OpenRefine user's privileges
  • Attack surface: OpenRefine's web interface and the get-rows command
  • Required access: A victim must have an active or authenticated OpenRefine session, depending on deployment controls
  • Trigger point: Processing of a cross-origin GET request containing attacker-controlled command parameters
  • Why exploitation is possible: The request may be accepted without adequate cross-site request validation, allowing server-side evaluation of Jython facet expressions under the OpenRefine user's privileges

Why this happens

The vulnerability results from insufficient cross-site request forgery protection on a stateful or command-processing HTTP endpoint. When the application relies on browser credentials without requiring an unpredictable request token or equivalent origin validation, a different site may cause the browser to submit a request on the user's behalf. Because the endpoint can process Jython facet expressions, the CSRF flaw can extend beyond unauthorized request execution to operating system command execution. This behavior maps to CWE-352: Cross-Site Request Forgery (CSRF).

The vulnerability results from insufficient cross-site request forgery protection on a stateful or command-processing HTTP endpoint. When the application relies on browser credentials without requiring an unpredictable request token or equivalent origin validation, a different site may cause the browser to submit a request on the user's behalf. Because the endpoint can process Jython facet expressions, the CSRF flaw can extend beyond unauthorized request execution to operating system command execution. This behavior maps to CWE-352: Cross-Site Request Forgery (CSRF).

Potential impact

  • An attacker may cause unauthorized OpenRefine actions through a victim's browser session
  • Server-side Jython expressions could execute operating system commands
  • The OpenRefine service account or host environment could be compromised
  • Sensitive project data may be exposed, altered, or destroyed
  • A compromised instance could be used for further network access or lateral movement
  • An attacker may cause unauthorized OpenRefine actions through a victim's browser session
  • Server-side Jython expressions could execute operating system commands
  • The OpenRefine service account or host environment could be compromised
  • Sensitive project data may be exposed, altered, or destroyed
  • A compromised instance could be used for further network access or lateral movement

General mitigation guidance

Mitigation generally focuses on enforcing request authenticity and reducing the authority of command-processing endpoints.

Common defensive patterns include:

  • Requiring robust, unpredictable CSRF tokens for browser-initiated requests that use session credentials
  • Validating request origins or trusted hosts as a defense-in-depth control
  • Avoiding state-changing or command-executing behavior on cross-origin GET requests
  • Separating expression evaluation from browser-accessible endpoints where practical
  • Running OpenRefine with a dedicated least-privilege operating system account
  • Restricting network exposure and requiring an authenticated administrative boundary
  • Applying secure cookie attributes and narrowly scoped session handling

These controls reduce the chance that a user session can be abused and limit damage if a request reaches the service.

Mitigation generally focuses on enforcing request authenticity and reducing the authority of command-processing endpoints.

Common defensive patterns include:

  • Requiring robust, unpredictable CSRF tokens for browser-initiated requests that use session credentials
  • Validating request origins or trusted hosts as a defense-in-depth control
  • Avoiding state-changing or command-executing behavior on cross-origin GET requests
  • Separating expression evaluation from browser-accessible endpoints where practical
  • Running OpenRefine with a dedicated least-privilege operating system account
  • Restricting network exposure and requiring an authenticated administrative boundary
  • Applying secure cookie attributes and narrowly scoped session handling

These controls reduce the chance that a user session can be abused and limit damage if a request reaches the service.

How teams detect issues like this

Organizations commonly look for:

  • Static analysis findings on endpoints that process session-authenticated requests without CSRF protections
  • Code review signals such as command-capable GET handlers, missing token validation, and absent origin checks
  • Web logs showing unusual cross-origin requests to the get-rows command or unexpected engine parameters
  • Policy checks requiring CSRF defenses on state-changing or expression-evaluating routes
  • Runtime monitoring for unexpected child processes or operating system commands launched by the OpenRefine service

Automated security scanning and code review tools may help identify missing request-validation controls, but findings should be verified against the application's authentication and browser-access model.

Organizations commonly look for:

  • Static analysis findings on endpoints that process session-authenticated requests without CSRF protections
  • Code review signals such as command-capable GET handlers, missing token validation, and absent origin checks
  • Web logs showing unusual cross-origin requests to the get-rows command or unexpected engine parameters
  • Policy checks requiring CSRF defenses on state-changing or expression-evaluating routes
  • Runtime monitoring for unexpected child processes or operating system commands launched by the OpenRefine service

Automated security scanning and code review tools may help identify missing request-validation controls, but findings should be verified against the application's authentication and browser-access model.

Sources

SourceLink
github.comgithub.com/OpenRefine/OpenRefine
github.comgithub.com/OpenRefine/OpenRefine/blob/bde8a36dc188f7846aeafc2910969e7d0fbc8e7c/extensions/jython/src/com/google/refine/jython/JythonEvaluable.java#L142
github.comgithub.com/OpenRefine/OpenRefine/blob/bde8a36dc188f7846aeafc2910969e7d0fbc8e7c/main/src/com/google/refine/commands/row/GetRowsCommand.java#L174-L186
github.comgithub.com/OpenRefine/OpenRefine/blob/bde8a36dc188f7846aeafc2910969e7d0fbc8e7c/modules/core/src/main/java/com/google/refine/browsing/facets/ListFacet.java#L327-L339
github.comgithub.com/OpenRefine/OpenRefine/issues/7999
vulncheck.comvulncheck.com/advisories/openrefine-through-3.10.1-csrf-to-rce-via-get-rows-command

Frequently asked

questions

It can be triggered remotely through a victim's browser when the OpenRefine service is reachable and the victim has the necessary active or authenticated session.

The attacker may not need the victim's credentials directly, but exploitation generally depends on a user with suitable OpenRefine access being induced to visit a malicious page.

Require strong CSRF protections and origin validation, avoid command-capable behavior on cross-origin GET requests, and separate expression evaluation from browser-facing endpoints where possible.

Apply a consistent CSRF policy to session-based endpoints, review all browser-accessible command handlers, monitor for unexpected process execution, and run services with minimal operating system privileges.

It can be triggered remotely through a victim's browser when the OpenRefine service is reachable and the victim has the necessary active or authenticated session.

The attacker may not need the victim's credentials directly, but exploitation generally depends on a user with suitable OpenRefine access being induced to visit a malicious page.

Require strong CSRF protections and origin validation, avoid command-capable behavior on cross-origin GET requests, and separate expression evaluation from browser-facing endpoints where possible.

Apply a consistent CSRF policy to session-based endpoints, review all browser-accessible command handlers, monitor for unexpected process execution, and run services with minimal operating system privileges.

Find out what's already
exploitable in your codebase.