Back to Intelligence

CVE-2026-110447: Collabora Online OS Command Injection — CISA KEV Detection and Remediation Guide

SA
Security Arsenal Team
October 23, 2026
12 min read

On October 23, 2026, CISA added CVE-2026-110447 to its Known Exploited Vulnerabilities (KEV) Catalog, confirming active exploitation of a critical OS command injection vulnerability in Collabora Online's built-in CODE (Collabora Online Development Edition) server. This vulnerability allows unauthenticated attackers to execute arbitrary operating system commands on vulnerable instances, posing severe risk to any organization exposing Collabora Online to the internet or untrusted internal networks.

OS command injection in web-facing document collaboration platforms represents one of the most direct paths to full host compromise. Successful exploitation typically results in webshell deployment, lateral movement within document management infrastructure, and potential data exfiltration from integrated file storage systems. With active exploitation confirmed, organizations must treat this as an imminent threat requiring immediate remediation and comprehensive threat hunting.

Technical Analysis

Affected Products and Versions

CVE-2026-110447 affects Collabora Online installations utilizing the built-in CODE server component. This includes:

  • Collabora Online versions prior to the latest security release (exact fixed versions detailed in vendor advisory)
  • Built-in CODE server configurations where the administrative interface or document conversion endpoints are network-accessible
  • Platforms: Linux-based deployments (Ubuntu, Debian, RHEL/CentOS) and containerized deployments (Docker, Kubernetes) running vulnerable Collabora Online images

Organizations should inventory all Collabora Online deployments, including those embedded within Nextcloud, ownCloud, or standalone installations. Special attention must be paid to instances directly exposed to the internet or accessible from untrusted network segments.

Vulnerability Mechanics and Attack Chain

From a defender's perspective, CVE-2026-110447 is a classic OS command injection flaw occurring within the document processing pipeline of the built-in CODE server. The vulnerability exists in how the server handles user-supplied input during document conversion or administrative operations, failing to properly sanitize shell metacharacters before passing arguments to underlying system commands.

The typical attack chain unfolds as follows:

  1. Initial Access: The attacker identifies an exposed Collabora Online instance, often via internet-wide scanning or reconnaissance against known document collaboration portals.
  2. Exploitation: Crafted HTTP requests are sent to vulnerable endpoints (commonly administrative interfaces, document conversion services, or WebSocket upgrade handlers) containing injected shell metacharacters (e.g., ;, |, backticks, $()).
  3. Command Execution: The Collabora Online server process (typically running as the cool or collabora user) executes the injected command with the privileges of the service account.
  4. Persistence: Attackers commonly deploy webshells to the web-accessible directory, establish reverse shells, or install legitimate-but-unauthorized remote access tools.
  5. Lateral Movement: From the compromised Collabora host, attackers pivot to internal file shares, domain controllers, or cloud storage integrations.

Exploitation requires no authentication in many configurations, significantly lowering the barrier for opportunistic attackers and automated exploitation campaigns.

Exploitation Status

  • CISA KEV Status: Added October 23, 2026
  • Active Exploitation: Confirmed in-the-wild by CISA and multiple security vendors
  • BOD 26-04 Compliance: Federal Civilian Executive Branch (FCEB) agencies must remediate within the timeline specified in Binding Operational Directive 26-04

Given the KEV listing, organizations should assume scanning and exploitation attempts are ongoing against internet-facing instances.

Detection & Response

SIGMA Detection Rules

The following Sigma rules target observable behaviors associated with post-exploitation of Collabora Online instances. Deploy these to your SIEM with appropriate log source mappings.

YAML
---
title: Collabora Online CODE Server Process Spawning Suspicious Shell Commands
id: 8f2a1b3c-9d4e-4f5a-8b6c-7d8e9f0a1b2c
status: experimental
description: Detects the Collabora Online built-in server process (coolwsd) spawning shell commands or script interpreters, indicative of command injection exploitation.
references:
  - https://www.cisa.gov/news-events/alerts/2026/10/23/cisa-adds-one-known-exploited-vulnerability-catalog-0
  - https://attack.mitre.org/techniques/T1059/004/
author: Security Arsenal
date: 2026/10/24
tags:
  - attack.execution
  - attack.t1059.004
logsource:
  category: process_creation
  product: linux
detection:
  selection_parent:
    ParentImage|endswith:
      - '/coolwsd'
      - '/coolforkit'
  selection_suspicious:
    Image|endswith:
      - '/bash'
      - '/sh'
      - '/dash'
      - '/zsh'
      - '/python'
      - '/python3'
      - '/perl'
      - '/php'
      - '/nc'
      - '/ncat'
      - '/netcat'
      - '/curl'
      - '/wget'
  condition: selection_parent and selection_suspicious
falsepositives:
  - Legitimate document conversion scripts or administrative maintenance
level: high
---
title: Collabora Online Web Directory Webshell Creation
id: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects creation of script files in Collabora Online web-accessible directories, a common post-exploitation behavior following command injection.
references:
  - https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/10/24
tags:
  - attack.persistence
  - attack.t1505.003
logsource:
  category: file_event
  product: linux
detection:
  selection_paths:
    TargetFilename|startswith:
      - '/usr/share/coolwsd/browser/'
      - '/opt/collaboraoffice/'
      - '/var/www/html/'
      - '/srv/www/'
  selection_extensions:
    TargetFilename|endswith:
      - '.php'
      - '.jsp'
      - '.jspx'
      - '.asp'
      - '.aspx'
      - '.py'
      - '.pl'
      - '.sh'
  condition: selection_paths and selection_extensions
falsepositives:
  - Legitimate administrative updates or template deployments
level: medium
---
title: Collabora Online Suspicious Outbound Network Connections
id: 2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e
status: experimental
description: Identifies Collabora Online server processes initiating unexpected outbound network connections, potentially indicating C2 communication or reverse shell establishment.
references:
  - https://attack.mitre.org/techniques/T1071/001/
author: Security Arsenal
date: 2026/10/24
tags:
  - attack.command_and_control
  - attack.t1071.001
logsource:
  category: network_connection
  product: linux
detection:
  selection:
    Image|endswith:
      - '/coolwsd'
      - '/coolforkit'
    DestinationIp|re: '^(?!10\.|172\.(1[6-9]|2[0-9]|3[01])\.|192\.168\.|127\.|::1|fe80::)'
  filter_ports:
    DestinationPort:
      - 443
      - 80
  condition: selection and not filter_ports
falsepositives:
  - Software update mechanisms, legitimate cloud storage synchronization
level: medium

Microsoft Sentinel KQL Hunt Queries

Deploy these queries in Microsoft Sentinel or Defender to hunt for exploitation indicators and post-compromise behavior.

KQL — Microsoft Sentinel / Defender
// Hunt 1: Collabora processes spawning suspicious child processes
let suspicious_procs = dynamic(["bash", "sh", "python", "python3", "perl", "nc", "ncat", "curl", "wget"]);
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName has_any ("coolwsd", "coolforkit", "loolwsd")
| where FileName has_any (suspicious_procs)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, InitiatingProcessCommandLine, AccountName, FolderPath
| order by TimeGenerated desc;

// Hunt 2: Network connections from Collabora processes to non-standard ports
let collabora_procs = dynamic(["coolwsd", "coolforkit", "loolwsd"]);
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName has_any (collabora_procs)
| where RemotePort !in (80, 443, 8080, 8443, 9980)
| where not(RemoteIP startswith "10." or RemoteIP startswith "192.168." or RemoteIP startswith "172.")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteIP, RemotePort, RemoteUrl, InitiatingProcessCommandLine
| order by TimeGenerated desc;

// Hunt 3: File creation in Collabora web directories
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where FolderPath has_any ("coolwsd", "collabora", "loolwsd", "/var/www/", "/usr/share/coolwsd/")
| where FileName endswith ".php" or FileName endswith ".sh" or FileName endswith ".py" or FileName endswith ".jsp"
| where not(FolderPath has "templates" or FolderPath has "systemplate")
| project TimeGenerated, DeviceName, FolderPath, FileName, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| order by TimeGenerated desc;

Velociraptor VQL Hunt

For endpoint forensics and rapid triage of potentially compromised Collabora Online servers, deploy this VQL artifact.

VQL — Velociraptor
-- Hunt for suspicious child processes of Collabora Online server processes
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime,
       dict(Pid=Ppid, Name=Name) as ParentInfo
FROM pslist()
WHERE Name =~ "coolwsd|coolforkit|loolwsd"
   OR Exe =~ "/usr/bin/cool|/opt/collabora"
   OR CommandLine =~ "bash|sh|python|perl|nc|curl|wget"

Remediation and Verification Script

Use the following Bash script to inventory Collabora Online installations, check for suspicious artifacts, and prepare for patching. Note: This script identifies vulnerable configurations and indicators of compromise but does not automatically patch systems. Always test in a controlled environment first.

Bash / Shell
#!/bin/bash
# CVE-2026-110447 Collabora Online Detection and Triage Script
# Run with root privileges for complete visibility

set -euo pipefail

LOG_FILE="/var/log/collabora_triage_$(date +%Y%m%d_%H%M%S).log"
ALERTS_FOUND=0

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

check_root() {
    if [[ $EUID -ne 0 ]]; then
        log "ERROR: This script must be run as root or with sudo"
        exit 1
    fi
}

identify_installations() {
    log "=== Identifying Collabora Online Installations ==="
    
    # Check for system packages
    if command -v dpkg &> /dev/null; then
        dpkg -l | grep -E "coolwsd|collabora|loolwsd" | tee -a "$LOG_FILE" || log "No Debian packages found"
    elif command -v rpm &> /dev/null; then
        rpm -qa | grep -E "coolwsd|collabora|loolwsd" | tee -a "$LOG_FILE" || log "No RPM packages found"
    fi
    
    # Check for running processes
    pgrep -a -f "coolwsd|coolforkit|loolwsd" | tee -a "$LOG_FILE" || log "No Collabora processes running"
    
    # Check common installation directories
    for dir in /usr/share/coolwsd /opt/collaboraoffice /usr/lib/coolwsd; do
        if [[ -d "$dir" ]]; then
            log "Found installation directory: $dir"
            find "$dir" -type f -name "*.xml" -o -name "*.json" | head -5 | tee -a "$LOG_FILE"
        fi
    done
}

check_webshells() {
    log "=== Checking for Suspicious Files in Web Directories ==="
    
    local web_dirs=("/usr/share/coolwsd/browser" "/opt/collaboraoffice" "/var/www/html")
    
    for dir in "${web_dirs[@]}"; do
        if [[ -d "$dir" ]]; then
            log "Scanning $dir for suspicious files..."
            
            # Look for recently created script files (last 7 days)
            find "$dir" -type f \( -name "*.php" -o -name "*.sh" -o -name "*.py" -o -name "*.jsp" \) \
                -mtime -7 -ls 2>/dev/null | while read -r line; do
                log "ALERT: Suspicious file found: $line"
                ((ALERTS_FOUND++))
            done
            
            # Check for files with suspicious names
            find "$dir" -type f \( -name "shell.*" -o -name "cmd.*" -o -name "backdoor.*" -o -name "c99.*" -o -name "r57.*" \) \
                -ls 2>/dev/null | while read -r line; do
                log "ALERT: Potentially malicious filename: $line"
                ((ALERTS_FOUND++))
            done
        fi
    done
}

check_process_anomalies() {
    log "=== Checking for Process Anomalies ==="
    
    # Find coolwsd processes and their children
    local cool_pids
    cool_pids=$(pgrep -f "coolwsd" || true)
    
    if [[ -n "$cool_pids" ]]; then
        for pid in $cool_pids; do
            log "Analyzing child processes of coolwsd PID $pid:"
            
            # Get child processes
            local children
            children=$(pgrep -P "$pid" || true)
            
            for child in $children; do
                local child_cmd
                child_cmd=$(ps -p "$child" -o comm=,args= 2>/dev/null || echo "Unknown")
                
                # Check for suspicious commands
                if echo "$child_cmd" | grep -qE "(bash|sh|python|perl|nc|ncat|curl|wget)"; then
                    log "ALERT: Suspicious child process detected: PID $child - $child_cmd"
                    ((ALERTS_FOUND++))
                    
                    # Capture additional context
                    ls -la "/proc/$child/exe" 2>/dev/null | tee -a "$LOG_FILE" || true
                    cat "/proc/$child/cmdline" 2>/dev/null | tr '\0' ' ' | tee -a "$LOG_FILE" || true
                    echo "" | tee -a "$LOG_FILE"
                fi
            done
        done
    else
        log "No running coolwsd processes found"
    fi
}

check_network_connections() {
    log "=== Checking Network Connections ==="
    
    local cool_pids
    cool_pids=$(pgrep -f "coolwsd" || true)
    
    if [[ -n "$cool_pids" ]]; then
        for pid in $cool_pids; do
            log "Network connections for coolwsd PID $pid:"
            ss -tunap 2>/dev/null | grep -E "pid=$pid" | while read -r conn; do
                log "  $conn"
                
                # Alert on non-standard ports or suspicious IPs
                if echo "$conn" | grep -qE ":(4444|5555|6666|7777|8888|9999|1337|31337)"; then
                    log "ALERT: Suspicious port detected in connection: $conn"
                    ((ALERTS_FOUND++))
                fi
            done
        done
    fi
}

check_logs_for_exploitation() {
    log "=== Checking Collabora Logs for Exploitation Attempts ==="
    
    local log_files=("/var/log/coolwsd.log" "/var/log/loolwsd.log" "/var/log/syslog" "/var/log/messages")
    
    for logfile in "${log_files[@]}"; do
        if [[ -f "$logfile" ]]; then
            log "Scanning $logfile for suspicious patterns..."
            
            # Look for shell metacharacters in requests
            grep -E "(;|\||\`|\$\()" "$logfile" 2>/dev/null | grep -E "(GET|POST|PUT)" | tail -20 | while read -r line; do
                log "POTENTIAL EXPLOITATION: $line"
                ((ALERTS_FOUND++))
            done || true
            
            # Look for common webshell names in logs
            grep -iE "(shell|cmd|backdoor|webshell)" "$logfile" 2>/dev/null | tail -10 | while read -r line; do
                log "SUSPICIOUS LOG ENTRY: $line"
                ((ALERTS_FOUND++))
            done || true
        fi
    done
}

verify_patch_level() {
    log "=== Patch Verification Information ==="
    log "Please consult the official Collabora Online security advisory for the exact fixed version numbers."
    log "Check your current version with: coolwsd --version or loolwsd --version"
    log "Ensure you are running a version released after October 2026 that addresses CVE-2026-110447."
    
    # Attempt to get version if binary exists
    if command -v coolwsd &> /dev/null; then
        log "Current coolwsd version:"
        coolwsd --version 2>&1 | tee -a "$LOG_FILE" || true
    fi
}

main() {
    log "Starting CVE-2026-110447 triage for Collabora Online"
    log "Hostname: $(hostname)"
    log "Date: $(date)"
    
    check_root
    identify_installations
    check_webshells
    check_process_anomalies
    check_network_connections
    check_logs_for_exploitation
    verify_patch_level
    
    log "=== Triage Complete ==="
    if [[ $ALERTS_FOUND -gt 0 ]]; then
        log "WARNING: $ALERTS_FOUND suspicious indicators found. Immediate incident response recommended."
        exit 2
    else
        log "No immediate indicators of compromise detected."
        log "NOTE: This does not guarantee the system is clean. Ensure patching is prioritized."
        exit 0
    fi
}

main "$@"

Remediation

Immediate Actions

  1. Isolate and Patch: Immediately patch all Collabora Online instances to the latest version addressing CVE-2026-110447. Consult the official Collabora Online security advisory for exact fixed version numbers. Prioritize internet-facing systems.

  2. Network Segmentation: Restrict network access to Collabora Online administrative interfaces (typically TCP/9980 and related WebSocket endpoints) to trusted management networks only. If external access is required, implement VPN or zero-trust network access (ZTNA) controls.

  3. CISA Deadline Compliance: Federal Civilian Executive Branch (FCEB) agencies must comply with remediation timelines specified in BOD 26-04 and the KEV Catalog entry for CVE-2026-110447. Document remediation status for audit purposes.

Configuration Hardening

  • Disable Unnecessary Features: If the built-in CODE server is not required, disable it and use a dedicated Collabora Online server behind proper access controls.
  • File System Permissions: Ensure the Collabora service account has minimal file system permissions. The account should not have write access to web-accessible directories beyond what is strictly necessary for operation.
  • SELinux/AppArmor: Enable and enforce mandatory access controls. Collabora provides SELinux policies for supported distributions; ensure they are active.

Validation and Monitoring

  • Verify Remediation: After patching, use the provided Bash script to verify no suspicious artifacts remain. Re-run the script weekly for the next 30 days to detect potential re-compromise.
  • Enhanced Logging: Enable verbose logging for Collabora Online and forward logs to your SIEM. Monitor for the detection patterns outlined in the Sigma and KQL sections.
  • Vulnerability Scanning: Update vulnerability scanners to specifically check for CVE-2026-110447. Schedule authenticated scans to verify patch levels across all Collabora deployments.

Incident Response

If the detection script or hunting queries identify indicators of compromise:

  1. Isolate: Immediately remove the affected system from the network to prevent lateral movement.
  2. Forensic Imaging: Capture volatile memory and full disk images before remediation.
  3. Credential Reset: Reset all credentials that may have been accessible from the compromised host, including service accounts and integrated cloud storage tokens.
  4. Review Integrations: Audit all systems that integrate with the compromised Collabora instance (Nextcloud, file shares, etc.) for signs of unauthorized access.

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.