Back to Intelligence

CVE-2026-119618: Apache HTTP Server RCE in mod_http2 — Detection and Remediation Guide

SA
Security Arsenal Team
November 12, 2026
12 min read

Apache has patched a critical remote code execution vulnerability in the HTTP Server mod_http2 module, tracked as CVE-2026-119618. Discovered by researchers at Anthropic and Google, this race condition flaw allows unauthenticated attackers to execute arbitrary code on vulnerable servers when HTTP/2 is enabled. Given Apache HTTP Server's ubiquity across enterprise infrastructure, cloud platforms, and managed hosting environments, the blast radius for this vulnerability is substantial.

The vulnerability affects one of the most widely deployed web server components on the internet. If your organization runs Apache HTTP Server with HTTP/2 enabled — and many do, as HTTP/2 has become the default for performance optimization — you are potentially exposed to unauthenticated remote code execution. This is the kind of vulnerability that threat actors weaponize within days of disclosure. Patching is not optional.

Technical Analysis

Affected Products and Versions

The vulnerability resides in the mod_http2 module of Apache HTTP Server. Organizations running Apache HTTP Server versions prior to the patched release with HTTP/2 enabled are affected. HTTP/2 is commonly enabled in production environments for performance benefits including multiplexing, header compression, and reduced latency — meaning many administrators may not even realize the module is active.

To determine if your Apache installation has HTTP/2 enabled, check your configuration files for:

  • Protocols h2 http/1.1 or Protocols h2 directives in httpd.conf or site configuration files
  • The presence of mod_http2 in your loaded modules (apachectl -M | grep http2 or httpd -M | grep http2)

Vulnerability Details

CVE-2026-119618 is a race condition in the mod_http2 module. Race conditions occur when multiple threads or processes access shared resources concurrently without proper synchronization, leading to unpredictable behavior. In this case, the race condition can be triggered by an unauthenticated remote attacker through specially crafted HTTP/2 requests.

The attack chain from a defender's perspective:

  1. Initial Access: Attacker sends maliciously crafted HTTP/2 frames to a vulnerable Apache HTTP Server instance
  2. Race Condition Trigger: Concurrent request processing causes a memory corruption or use-after-free condition within the mod_http2 module
  3. Code Execution: Exploitation of the corrupted memory state allows the attacker to achieve arbitrary code execution in the context of the Apache process

The critical factors that elevate severity:

  • Unauthenticated: No credentials required — any internet-facing server is a potential target
  • Remote: Exploitable over the network via standard HTTP/2 connections
  • Code Execution: Full compromise of the Apache process, typically running as www-data, apache, or a similar service account

Exploitation Status

As of this writing, the vulnerability has been responsibly disclosed by Anthropic and Google researchers. There is no confirmed public proof-of-concept exploit or reports of active in-the-wild exploitation. However, the disclosure is now public, and sophisticated threat actors — including nation-state groups and ransomware affiliates — actively monitor security advisories for high-value targets like Apache HTTP Server.

History has shown that Apache vulnerabilities are weaponized rapidly. The window between public disclosure and active exploitation for critical web server vulnerabilities is often measured in days, not weeks. Organizations should treat this as a priority-one patching event.

Detection & Response

Given the nature of this vulnerability — a race condition leading to memory corruption and potential code execution — detection focuses on identifying exploitation attempts through HTTP/2 anomalies and post-exploitation behaviors. Network-level detection may be challenging due to TLS encryption, making endpoint and log-based detection critical.

Sigma Rules

The following Sigma rules target observable behaviors associated with exploitation and post-exploitation of Apache HTTP Server vulnerabilities.

YAML
---
title: Apache Process Spawning Shell or Command Interpreter
id: 8f4a2b1c-3e5d-4f6a-9b7c-2d1e0a3b4c5d
status: experimental
description: Detects Apache HTTP Server spawning shell processes, which may indicate successful exploitation of CVE-2026-119618 or similar RCE vulnerabilities.
references:
  - https://www.securityweek.com/apache-patches-critical-http-server-rce-found-by-anthropic-google/
  - https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/02/09
tags:
  - attack.execution
  - attack.t1059
  - attack.initial_access
logsource:
  category: process_creation
  product: linux
detection:
  selection_parent:
    ParentImage|endswith:
      - '/apache2'
      - '/httpd'
  selection_child:
    Image|endswith:
      - '/bash'
      - '/sh'
      - '/dash'
      - '/zsh'
      - '/python'
      - '/python3'
      - '/perl'
      - '/php'
      - '/nc'
      - '/ncat'
      - '/netcat'
      - '/curl'
      - '/wget'
  condition: selection_parent and selection_child
falsepositives:
  - Legitimate CGI scripts or PHP-FPM child processes
  - Log rotation scripts triggered by Apache
level: high
---
title: Apache Process Writing to Suspicious Locations
id: 9c5d3e2a-4f6b-5a7c-8d9e-1f2a3b4c5d6e
status: experimental
description: Detects Apache HTTP Server writing files to sensitive system directories, which may indicate webshell deployment or persistence establishment following RCE exploitation.
references:
  - https://www.securityweek.com/apache-patches-critical-http-server-rce-found-by-anthropic-google/
  - https://attack.mitre.org/techniques/T1505/
author: Security Arsenal
date: 2026/02/09
tags:
  - attack.persistence
  - attack.t1505.003
  - attack.defense_evasion
logsource:
  category: file_event
  product: linux
detection:
  selection:
    Image|endswith:
      - '/apache2'
      - '/httpd'
    TargetFilename|contains:
      - '/var/www/html/'
      - '/var/www/'
      - '/srv/www/'
      - '/htdocs/'
      - '/public_html/'
  filter_extensions:
    TargetFilename|endswith:
      - '.html'
      - '.htm'
      - '.css'
      - '.js'
      - '.jpg'
      - '.png'
      - '.gif'
      - '.ico'
  condition: selection and not filter_extensions
falsepositives:
  - Content management systems performing legitimate file operations
  - Application deployment processes
level: medium
---
title: Suspicious Network Connection from Apache Process
id: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects Apache HTTP Server initiating outbound network connections to non-standard ports or suspicious destinations, which may indicate reverse shell activity or C2 communication following exploitation.
references:
  - https://www.securityweek.com/apache-patches-critical-http-server-rce-found-by-anthropic-google/
  - https://attack.mitre.org/techniques/T1071/
author: Security Arsenal
date: 2026/02/09
tags:
  - attack.command_and_control
  - attack.t1071
  - attack.exfiltration
logsource:
  category: network_connection
  product: linux
detection:
  selection:
    Image|endswith:
      - '/apache2'
      - '/httpd'
  filter_standard_ports:
    DestinationPort:
      - 80
      - 443
      - 53
  filter_internal:
    DestinationIp|startswith:
      - '10.'
      - '172.16.'
      - '172.17.'
      - '172.18.'
      - '172.19.'
      - '172.20.'
      - '172.21.'
      - '172.22.'
      - '172.23.'
      - '172.24.'
      - '172.25.'
      - '172.26.'
      - '172.27.'
      - '172.28.'
      - '172.29.'
      - '172.30.'
      - '172.31.'
      - '192.168.'
  condition: selection and not filter_standard_ports and not filter_internal
falsepositives:
  - Legitimate outbound API calls from web applications
  - Health check or monitoring connections
level: medium

KQL — Microsoft Sentinel / Defender

The following KQL queries are designed for Microsoft Sentinel environments ingesting Linux syslog data and network security logs. These queries hunt for exploitation indicators and post-exploitation behaviors.

KQL — Microsoft Sentinel / Defender
// Hunt for Apache processes spawning shells or command interpreters (post-exploitation indicator)
let ApacheProcesses = dynamic(["/usr/sbin/apache2", "/usr/sbin/httpd", "/usr/local/apache2/bin/httpd"]);
let ShellProcesses = dynamic(["/bin/bash", "/bin/sh", "/bin/dash", "/bin/zsh", "/usr/bin/python", "/usr/bin/python3", "/usr/bin/perl", "/usr/bin/php", "/bin/nc", "/usr/bin/ncat", "/usr/bin/curl", "/usr/bin/wget"]);
Syslog
| where Facility == "auth" or Facility == "local0" or SyslogMessage has "execve"
| where SyslogMessage has_any (ApacheProcesses)
| where SyslogMessage has_any (ShellProcesses)
| extend ParentProcess = extract(@"PPID=(\d+)", 1, SyslogMessage)
| extend ChildProcess = extract(@"exe=\"([^\"]+)\"", 1, SyslogMessage)
| extend CommandLine = extract(@"proctitle=(.+)$", 1, SyslogMessage)
| project TimeGenerated, Computer, ProcessName, ChildProcess, CommandLine, SyslogMessage
| order by TimeGenerated desc

// Hunt for suspicious outbound connections from Apache processes via CEF network logs
CommonSecurityLog
| where DeviceVendor == "Linux" or DeviceProduct has "Apache"
| where SourceProcessName has_any ("apache2", "httpd")
| where DestinationPort !in (80, 443, 53, 8080, 8443)
| where not(ipv4_is_private(DestinationIP))
| summarize ConnectionCount = count(), 
             UniqueDestinations = dcount(DestinationIP), 
             DestinationPorts = make_set(DestinationPort, 10)
    by SourceIP, SourceHostName, DestinationIP, bin(TimeGenerated, 1h)
| where UniqueDestinations > 3 or ConnectionCount > 50
| order by TimeGenerated desc

// Hunt for HTTP/2 anomalies and potential exploitation attempts via web server logs
// Requires Apache access logs ingested via Syslog or custom connector
Syslog
| where SyslogMessage has "HTTP/2" or SyslogMessage has "h2"
| where SyslogMessage has_any ("PRI *", "SETTINGS", "WINDOW_UPDATE", "CONTINUATION")
| extend ClientIP = extract(@"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", 1, SyslogMessage)
| summarize RequestCount = count(), 
             DistinctMethods = dcount(extract(@"\"(\w+)\s", 1, SyslogMessage)),
             FirstSeen = min(TimeGenerated),
             LastSeen = max(TimeGenerated)
    by ClientIP, Computer, bin(TimeGenerated, 15m)
| where RequestCount > 500 or DistinctMethods > 5
| order by RequestCount desc

// Hunt for file writes by Apache process to web directories (webshell deployment)
SecurityEvent
| where EventID == 4663
| where ProcessName has_any ("apache2", "httpd")
| where ObjectName has_any ("www", "htdocs", "public_html", "webroot")
| where not(ObjectName has_any (".html", ".htm", ".css", ".js", ".jpg", ".png", ".gif", ".ico", ".log", ".tmp"))
| project TimeGenerated, Computer, SubjectUserName, ProcessName, ObjectName, AccessMask
| order by TimeGenerated desc

Velociraptor VQL

The following VQL artifacts hunt for post-exploitation indicators on Apache servers.

VQL — Velociraptor
-- Hunt for suspicious processes spawned by Apache (post-exploitation indicator)
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE (Exe =~ 'apache2' OR Exe =~ 'httpd')
   AND (Name =~ 'bash|sh|dash|zsh|python|python3|perl|php|nc|ncat|curl|wget')
ORDER BY CreateTime DESC

-- Hunt for recently created or modified files in web directories (webshell detection)
LET web_dirs = SELECT * FROM foreach(row=[
    '/var/www/html/**',
    '/var/www/**',
    '/srv/www/**',
    '/usr/local/apache2/htdocs/**',
    '/home/*/public_html/**'
], query={
    SELECT FullPath, Size, Mtime, Atime, Ctime
    FROM glob(globs=row._value)
    WHERE Mtime > now() - 86400
      AND NOT FullPath =~ '\\.(html|htm|css|js|jpg|png|gif|ico|svg|woff|woff2|ttf|eot)$'
})
SELECT * FROM web_dirs ORDER BY Mtime DESC

-- Hunt for suspicious network connections from Apache processes
SELECT Pid, Name, Status, Laddr, Raddr, 
       process_info.Username AS Username,
       process_info.Exe AS Executable
FROM netstat()
WHERE Name =~ 'apache2|httpd'
  AND NOT Raddr.IP =~ '^(10\\.|172\\.(1[6-9]|2[0-9]|3[01])\\.|192\\.168\\.|127\\.)'
  AND NOT Raddr.Port IN (80, 443, 53)
ORDER BY Raddr.Port

-- Check Apache HTTP/2 module status and version
LET modules = SELECT * FROM execve(
    argv=['apachectl', '-M'], 
    length=100000
)
SELECT Stdout, Stderr
FROM modules
WHERE Stdout =~ 'http2'

Remediation Script

The following Bash script checks for HTTP/2 enablement, identifies the Apache version, and provides guidance on patching. Run this on affected systems to assess exposure.

Bash / Shell
#!/bin/bash
# CVE-2026-119618 Apache HTTP Server mod_http2 RCE Assessment Script
# Run with: sudo bash apache_cve_check.sh

echo "=============================================="
echo "CVE-2026-119618 Apache mod_http2 RCE Assessment"
echo "=============================================="
echo ""

# Check if Apache is installed
if ! command -v apache2 &> /dev/null && ! command -v httpd &> /dev/null; then
    echo "[INFO] Apache HTTP Server not found on this system."
    exit 0
fi

# Detect Apache binary
APACHE_BIN=""
if command -v apache2 &> /dev/null; then
    APACHE_BIN="apache2"
elif command -v httpd &> /dev/null; then
    APACHE_BIN="httpd"
fi

echo "[INFO] Apache binary detected: $APACHE_BIN"
echo ""

# Get Apache version
echo "=== Apache Version ==="
$APACHE_BIN -v 2>/dev/null || apachectl -v 2>/dev/null || httpd -v 2>/dev/null
echo ""

# Check if mod_http2 is loaded
echo "=== HTTP/2 Module Status ==="
if $APACHE_BIN -M 2>/dev/null | grep -q "http2" || apachectl -M 2>/dev/null | grep -q "http2"; then
    echo "[WARNING] mod_http2 is LOADED - System may be vulnerable to CVE-2026-119618"
    HTTP2_ENABLED=true
else
    echo "[OK] mod_http2 is not loaded"
    HTTP2_ENABLED=false
fi
echo ""

# Check for HTTP/2 protocol configuration
echo "=== HTTP/2 Configuration Check ==="
CONFIG_PATHS=("/etc/apache2" "/etc/httpd" "/usr/local/apache2/conf" "/opt/apache2/conf")
FOUND_H2_CONFIG=false

for path in "${CONFIG_PATHS[@]}"; do
    if [ -d "$path" ]; then
        echo "[INFO] Checking $path for HTTP/2 configuration..."
        if grep -r "Protocols.*h2" "$path" 2>/dev/null; then
            FOUND_H2_CONFIG=true
            echo "[WARNING] HTTP/2 protocol configuration found in $path"
        fi
    fi
done

if [ "$FOUND_H2_CONFIG" = false ]; then
    echo "[OK] No explicit HTTP/2 protocol configuration found in standard paths"
fi
echo ""

# Check listening ports
echo "=== Listening Ports ==="
if command -v ss &> /dev/null; then
    ss -tlnp 2>/dev/null | grep -E "apache|httpd"
elif command -v netstat &> /dev/null; then
    netstat -tlnp 2>/dev/null | grep -E "apache|httpd"
fi
echo ""

# Package version check for common distributions
echo "=== Package Version Information ==="
if command -v dpkg &> /dev/null; then
    echo "[Debian/Ubuntu] Apache2 package version:"
    dpkg -l apache2 2>/dev/null | grep -E "^ii" || echo "Package info not available"
elif command -v rpm &> /dev/null; then
    echo "[RHEL/CentOS/Fedora] httpd package version:"
    rpm -q httpd 2>/dev/null || echo "Package info not available"
fi
echo ""

# Summary and recommendations
echo "=============================================="
echo "ASSESSMENT SUMMARY"
echo "=============================================="

if [ "$HTTP2_ENABLED" = true ]; then
    echo ""
    echo "[!] RISK IDENTIFIED: mod_http2 is enabled"
    echo ""
    echo "IMMEDIATE ACTIONS REQUIRED:"
    echo "1. Update Apache HTTP Server to the latest patched version"
    echo "2. If patching is not immediately possible, temporarily disable HTTP/2:"
    echo "   - Remove or comment out 'Protocols h2' from configuration"
    echo "   - Or disable the module: sudo a2dismod http2 (Debian/Ubuntu)"
    echo "   - Restart Apache: sudo systemctl restart apache2 (or httpd)"
    echo ""
    echo "3. Monitor for exploitation attempts using the detection rules provided"
    echo ""
    echo "VENDOR REFERENCES:"
    echo "- Apache HTTP Server Security: https://httpd.apache.org/security/"
    echo "- Check your distribution's security advisory for patched packages"
else
    echo ""
    echo "[OK] mod_http2 does not appear to be enabled"
    echo ""
    echo "RECOMMENDATIONS:"
    echo "- Verify HTTP/2 is not enabled in virtual host configurations"
    echo "- Keep Apache updated as a general security practice"
    echo "- Review the Apache security page for any additional patches"
fi

echo ""
echo "Assessment complete."

Remediation

Immediate Actions

1. Patch Apache HTTP Server

SQL
Update Apache HTTP Server to the latest patched version that addresses CVE-2026-119618. Check the [Apache HTTP Server security page](https://httpd.apache.org/security/) for the specific version numbers containing the fix. Most Linux distributions will release updated packages through their standard repositories — apply these updates immediately.

For Debian/Ubuntu systems:

Bash / Shell
sudo apt update && sudo apt upgrade apache2

For RHEL/CentOS/Fedora systems:

Bash / Shell
sudo dnf update httpd

2. Temporary Workaround (If Patching Is Delayed)

If you cannot immediately patch, disable HTTP/2 to eliminate the attack surface:

Bash / Shell
# Disable mod_http2 (Debian/Ubuntu)
sudo a2dismod http2
sudo systemctl restart apache2

# Or remove HTTP/2 from protocol configuration
# Edit your Apache configuration and remove 'h2' from Protocols directives
# Change: Protocols h2 http/1.1
# To: Protocols http/1.1

Note that disabling HTTP/2 will impact performance for clients that support it, but this is preferable to running a vulnerable server.

3. Verify Patch Application

After patching, verify the update:

Bash / Shell
# Check Apache version
apachectl -v

# Verify mod_http2 status
apachectl -M | grep http2

# Restart and validate configuration
sudo apachectl configtest && sudo systemctl restart apache2

Longer-Term Hardening

  • Inventory: Maintain an accurate inventory of all Apache HTTP Server instances, including embedded deployments in appliances and containers
  • Patch Management: Establish a rapid patching process for critical web server vulnerabilities with defined SLAs
  • Network Segmentation: Place web servers in DMZs with restricted egress to limit post-exploitation lateral movement
  • Monitoring: Deploy the detection rules provided above and ensure logs from web servers are centralized and retained
  • WAF: Consider deploying a web application firewall with virtual patching capabilities for defense-in-depth

References

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.