Skip to main content
Vulnerability Database/CVE-2026-97182

CVE-2026-97182: Halo CMS SpEL Handler RCE Vulnerability

CVE-2026-97182 is a remote code execution vulnerability in halo-dev Halo CMS affecting versions up to 2.25.4 and 2.26.1. The flaw exists in the SpEL Handler component. This post covers technical details, affected versions, impact analysis, and mitigation strategies.

Published:

CVE-2026-97182 Overview

CVE-2026-97182 affects halo-dev Halo content management system versions up to 2.25.4 and 2.26.1. The flaw resides in the ReplyNotificationSubscriptionHelper.java file within the Spring Expression Language (SpEL) Handler component. An attacker can trigger improper neutralization of input processed by the SpEL evaluator remotely over the network, without authentication or user interaction. The exploit has been publicly disclosed. The vendor was contacted prior to disclosure but did not respond. The weakness is categorized as [CWE-20] Improper Input Validation.

Critical Impact

Remote, unauthenticated attackers can submit crafted input to the SpEL handler in Halo reply notifications, resulting in limited impact to confidentiality, integrity, and availability of the affected instance.

Affected Products

  • halo-dev Halo 2.x through 2.25.4
  • halo-dev Halo 2.26.1
  • Component: application/src/main/java/run/halo/app/content/comment/ReplyNotificationSubscriptionHelper.java (SpEL Handler)

Discovery Timeline

  • 2026-09-24 - CVE-2026-97182 published to the National Vulnerability Database
  • 2026-09-24 - Last updated in NVD database

Technical Details for CVE-2026-97182

Vulnerability Analysis

The vulnerability resides in Halo's reply notification subscription workflow. The ReplyNotificationSubscriptionHelper class evaluates expressions using Spring Expression Language (SpEL) without adequately neutralizing untrusted input. When input flows into the SpEL evaluator, an attacker can influence how the expression is parsed and interpreted.

Halo is a widely deployed open-source Java-based CMS. The affected code path is reachable through comment and reply features, which are commonly exposed to unauthenticated visitors. Because the exploit has been publicly disclosed, defenders should assume opportunistic probing against internet-facing Halo instances.

The weakness is classified under [CWE-20] Improper Input Validation. The practical impact depends on the SpEL evaluation context, parser mode, and any sandboxing applied by the application. In Halo's configuration, the issue yields low-level impact across confidentiality, integrity, and availability rather than full remote code execution.

Root Cause

The root cause is improper neutralization of attacker-controlled input before it is passed to a SpEL expression evaluator. The helper method constructs or evaluates expressions using fields that originate from user-submitted comment and subscription data. Without strict allow-listing or use of a restricted SimpleEvaluationContext, expressions can reference methods or properties beyond the intended scope.

Attack Vector

The attack is performed remotely over the network. No authentication or user interaction is required. An attacker submits a crafted reply or subscription payload containing SpEL metacharacters to a vulnerable Halo endpoint. The server-side helper processes the input, and the SpEL evaluator interprets the attacker-controlled fragment during notification handling.

For technical specifics, refer to the VulDB entry for CVE-2026-97182 and the public technical write-up.

Stop Remote Code Execution Before It Runs

Singularity™ Endpoint detects and blocks exploit attempts at machine speed, including zero-days and novel attack techniques.

Stop Exploit Attempts

Detection Methods for CVE-2026-97182

Indicators of Compromise

  • Inbound HTTP requests to Halo comment, reply, or subscription endpoints containing SpEL syntax such as #{...}, T(...), new ..., or references to java.lang.Runtime.
  • Unusual outbound connections from the Halo JVM process shortly after comment submission.
  • Exceptions or stack traces in Halo logs referencing SpelEvaluationException, SpelParseException, or ReplyNotificationSubscriptionHelper.

Detection Strategies

  • Deploy WAF rules that inspect comment and subscription payloads for SpEL metacharacter patterns and block or alert on matches.
  • Enable verbose application logging around the ReplyNotificationSubscriptionHelper class and alert on expression evaluation failures.
  • Correlate HTTP POST activity against Halo endpoints with child process creation or new outbound network sockets from the Java process.

Monitoring Recommendations

  • Monitor the Halo application logs and reverse-proxy access logs for repeated requests containing expression syntax from a single source.
  • Track baseline process and network behavior of the Halo JVM to surface deviations after comment or notification events.
  • Alert on new or unexpected classes loaded by the JVM during request handling to catch expression-driven reflection abuse.

How to Mitigate CVE-2026-97182

Immediate Actions Required

  • Inventory Halo deployments and identify any instance running 2.25.4, 2.26.1, or earlier 2.x releases.
  • Restrict public access to comment and subscription endpoints until a fixed release is applied, using authentication or network ACLs where feasible.
  • Deploy WAF signatures that block SpEL metacharacters in request bodies targeting Halo endpoints.
  • Review Halo application logs for prior exploitation attempts dating back to the disclosure.

Patch Information

At the time of publication, no vendor-released patch is referenced in the NVD entry, and the vendor did not respond to pre-disclosure contact. Monitor the halo-dev GitHub project and the VulDB advisory for updated releases and apply the fixed version as soon as it is published.

Workarounds

  • Disable the comment and reply notification subscription feature in Halo administration settings until a patched release is installed.
  • Place Halo behind a reverse proxy or WAF that strips or rejects SpEL syntax such as #{, T(, and new java. from user-submitted fields.
  • Run the Halo JVM under a least-privilege service account with egress filtering to limit the impact of successful expression evaluation.
bash
# Example nginx snippet to block common SpEL patterns in comment submissions
location ~* ^/apis/.*comment {
    if ($request_body ~* "(#\{|T\(|new\s+java\.|Runtime\.getRuntime)") {
        return 403;
    }
    proxy_pass http://halo_backend;
}

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.