☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Drupal logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 3.3 CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:L/I:L/A:N 🐛 CWE-267
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-81161

CVE-2026-81161 Privilege Escalation in Drupal
📅 PUBLISHED: 2026-09-02 00:00 UTC 🔄 UPDATED: 2026-09-26 06:09 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.21%
👁️
0.21% probability
5.2× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1068
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: USA License: Open Source
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS VECTOR BREAKDOWN 3.3
AV: N Attack Vector Network
AC: H Attack Complexity High
PR: H Privileges Required High
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: L Integrity Low
A: N Availability None
3.3
THREAT LEVEL
INTEL SOURCES NVD EPSS HOW WE SCORE →
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Threat Intelligence Report: CVE-2026-81161

Executive Summary

CVE-2026-81161 is an unpatched privilege escalation vulnerability affecting the Drupal contrib module Content Moderation Notifications in versions 0.0.0 through 3.9.0. The vulnerability is classified as CWE-267 (Privilege Defined With Unsafe Actions), indicating that the module defines permissions or roles with associated actions that can be abused to escalate privileges within a Drupal site. No CVSS score, EPSS score, or vendor patch currently exists, and no public proof-of-concept or exploit code has been identified. Organizations running Drupal sites with the Content Moderation Notifications module version 3.9.0 or earlier are at risk of privilege escalation by authenticated low-privilege users.

⚡ 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

Technical Analysis

The NVD description identifies this as a "Privilege Defined With Unsafe Actions" vulnerability (CWE-267). This weakness class indicates that a software product defines a privilege (such as a role, permission, or capability) that is associated with actions that carry inherent security risks — often allowing a user who legitimately holds that privilege to perform operations beyond their intended scope.

In the context of a Drupal contrib module like Content Moderation Notifications, the module extends Drupal's Content Moderation system by sending notifications (e.g., email or message digests) when content undergoes state transitions (e.g., draft → published, published → archived). The module likely defines new permissions such as "administer content moderation notifications" or "configure notification settings," which are then associated with unsafe actions through Drupal's permission and role system.

The vulnerability mechanism is likely as follows:

  1. The module defines a permission that grants access to a configuration or administrative interface.
  2. That interface performs actions that are considered "unsafe" — potentially allowing the holder to modify notification settings, change recipient lists, alter email templates (potentially enabling server-side template injection), or manipulate the module's stored configuration in ways that escalate privileges.
  3. Because the permission is granted to roles that should only have limited access, a user holding this privilege can exploit the unsafe action to reach functionality reserved for higher-privilege accounts (e.g., site administrators).

Drupal's permission system relies on a YAML-based permission registration (typically in the module's .permissions.yml file) and access checks performed through controller methods or form access handlers. A common flaw in this class occurs when:

  • An "access administration pages" check is omitted from a route definition.
  • A permission is granted too broadly (e.g., to "authenticated user" rather than a specific administrative role).
  • A form or route accepts user-supplied configuration without sufficient validation or sanitization.

Insufficient technical detail is available from the NVD description to identify the exact vulnerable function, route, or permission name. The description does not enumerate which specific permission or action is problematic. Analysts should audit the module's permission definitions and route access callbacks to identify unsafe action bindings.

Exploitation Scenarios

Preconditions: The attacker must be an authenticated user on a Drupal site running Content Moderation Notifications ≤ 3.9.0. The attacker's role must hold a permission defined by this module that exposes an unsafe action. The site must have the module enabled and content moderation workflows configured.

Attack Chain:

  1. Reconnaissance and Target Identification:

    • An attacker identifies Drupal sites by fingerprinting the CMS (e.g., via CHANGELOG.txt, generator meta tags, or Drupal-specific HTTP response headers).
    • The presence of the Content Moderation Notifications module can be inferred through the site's module list, public usage of notification features, or by probing known module-specific URLs (e.g., configuration pages under /admin/config/).
    • If the module is exposed in /admin/modules or via the site's status report, the attacker confirms the version.
  2. Triggering the Vulnerability (Vulnerability-Class Level):

    • The attacker authenticates with a low-privilege account.
    • They navigate to the module's configuration or administration interface, which is misconfigured to be accessible to their role due to the unsafe permission definition.
    • Because the permission is "defined with unsafe actions," the module may not properly enforce granular access checks — the attacker accesses functionality that performs state-changing operations (e.g., modifying notification policies, changing workflow state triggers, or adjusting routing of notification content).
  3. Exploitation/Payload Execution (Vulnerability-Class Level):

    • At the class level, the attacker manipulates configuration objects or submits crafted form data that alters the module's behavior.
    • If the unsafe action is template-related, the attacker could inject server-side template markup that executes arbitrary PHP when rendered (Drupal uses Twig with restricted autoescaping; if the module renders raw Twig from configuration, RCE is possible).
    • If the unsafe action grants the ability to reassign roles or alter user permissions indirectly through workflow configuration, the attacker can escalate their own privileges.
  4. Post-Exploitation Impact:

    • Successful exploitation grants the attacker administrative privileges or the ability to influence content moderation in ways they should not control.
    • Depending on the depth of the unsafe action (e.g., if the attacker achieves server-side template injection), full remote code execution on the web server could be possible.
    • With administrative access, the attacker can install additional modules, exfiltrate the database, pivot to the underlying operating system, or deface the website.

Important note: No public PoC exists for this CVE. This attack chain is inferred from the vulnerability class (CWE-267) and typical Drupal module architecture. The absence of a vendor patch (confidence 0/4) suggests the flaw may be actively exploitable in the wild or under coordinated disclosure.

Impact Assessment

  • Business Impact: Privilege escalation within a Drupal administrative context can lead to full site takeover, data breach, defacement, or use of the server as a pivot point for network intrusion. For organizations relying on Drupal for public-facing content or e-commerce, this could result in regulatory penalties (GDPR, HIPAA, PCI-DSS) if personal data is exposed.
  • Affected Systems: All Drupal sites using the Content Moderation Notifications module, versions 0.0.0 through 3.9.0 inclusive. The module is commonly used on sites with editorial workflows where content must be approved before publication.
  • Blast Radius: Because this is a Drupal contrib module, the module is deployed alongside Drupal core. The attack surface is the web application layer; however, successful exploitation that reaches PHP code execution enlarges the blast radius to include the hosting server and any connected backend systems (databases, file storage, adjacent internal services).
  • CVSS Assessment: No CVSS vector or score has been assigned by the vendor or NVD. Per scoring guidelines, CWE-267 privilege escalation vulnerabilities with authenticated access requirements typically score between 6.5 and 8.8 depending on the privilege level required and the impact achieved. The absence of a published score does not negate risk; analysts should treat this as a high-severity issue.

Detection Guidance

Sigma Rule

Sigma rules target log sources. For a Drupal web application vulnerability, detection should focus on web server access logs (Apache/Nginx) and Drupal watchdog logs, which record user access to administrative endpoints.

title: Drupal Content Moderation Notifications - Privilege Escalation Attempt
id: 4f8e6c0d-4b2a-4c6e-9d4e-1a2b3c4d5e6f
status: experimental
description: >
  Detects low-privilege Drupal users accessing administrative configuration
  endpoints associated with the Content Moderation Notifications module,
  possibly indicating exploitation of CVE-2026-81161.
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2026-81161
author: Valtersit Threat Intelligence
date: 2026/01/15
logsource:
  category: webserver
  product: drupal
detection:
  selection_endpoints:
    cs-method:
      - 'GET'
      - 'POST'
    cs-uri-stem|contains:
      - '/admin/config/content/moderation_notifications'
      - '/admin/config/people/content_moderation_notifications'
      - '/admin/structure/moderation_notifications'
      - '/admin/modules'  # Module info may be probed during recon
  selection_low_priv:
    cs-username|re:
      - '^(?!admin).*'   # Non-admin user
  condition: selection_endpoints and selection_low_priv
fields:
  - clientip
  - cs-username
  - cs-uri-stem
  - cs-method
falsepositives:
  - Legitimate administrative users with delegated permission to manage notifications
level: high

YARA Rule

YARA rules are useful for scanning web root files for malicious or modified module code, or for scanning response bodies for signs of exploitation (injected payloads).

rule Drupal_Content_Moderation_Notifications_CVE_2026_81161
{
    meta:
        author = "Valtersit Threat Intelligence"
        description = "Detects suspicious patterns in Content Moderation Notifications module files or web traffic indicating exploitation of CVE-2026-81161"
        date = "2026-01-15"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-81161"
        severity = "high"
        cve = "CVE-2026-81161"

    strings:
        // Look for eval or system calls in the module's PHP, indicating injected code
        $eval       = /\beval\s*\(/ nocase
        $system     = /\bsystem\s*\(/ nocase
        $passthru   = /\bpassthru\s*\(/ nocase
        $shell_exec = /shell_exec\s*\(/ nocase
        $assert     = /\bassert\s*\(/ nocase
        $base64     = /base64_decode\s*\(/ nocase

        // Module-specific paths that may be altered
        $mod_permissions = /content_moderation_notifications\.permissions\.yml/
        $mod_routing     = /content_moderation_notifications\.routing\.yml/
        $module_dir      = /modules\/contrib\/content_moderation_notifications/

        // Unsafe user-supplied config in POST data
        $post_config_key = /recipient|email_template|notification_policy/i

    condition:
        uint16(0) == 0x3C3F  // "<?"
        and 2 of ($eval, $system, $passthru, $shell_exec, $assert, $base64)
        and 1 of ($mod_permissions, $mod_routing)
        or
        $module_dir and 2 of ($eval, $system, $passthru, $shell_exec, $assert, $base64)
}

Suricata IDS Rule

Suricata rules detect network-level indicators. Drupal admin actions are over HTTP/HTTPS, so this rule focuses on HTTP headers and URI patterns indicative of exploitation attempts.

alert http any any -> $HOME_NET any (msg:"CVE-2026-81161 - Drupal Content Moderation Notifications Privilege Escalation Attempt"; flow:established,to_server; content:"/admin/config/content/moderation_notifications"; http_uri; content:"POST"; http_method; content:"Content-Type|3a| application/x-www-form-urlencoded"; http_header; pcre:"/recipient\s*=\s*[^&]{1,500}/Pi"; sid:81161001; rev:1; metadata:attack_target Web_Server, deployment Perimeter, cve CVE-2026-81161, signature_severity Critical, created_at 2026_01_15, updated_at 2026_01_15;)

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-81161 - Drupal Content Moderation Notifications Exfil Attempt - Large Config Object"; flow:established,to_client; content:"200"; http_stat_code; content:"recipient"; http_server_body; pcre:"/([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\s*,\s*){5,}/Pi"; threshold:type both, track by_src, count 1, seconds 60; sid:81161002; rev:1; metadata:attack_target Web_Server, deployment Perimeter, cve CVE-2026-81161, signature_severity Critical, created_at 2026_01_15, updated_at 2026_01_15;)

Note: Network traffic may be TLS-encrypted, rendering these rules ineffective for HTTPS-only deployments. In such cases, rely on the Sigma rule (web server logs) or Drupal watchdog analysis.

Elastic Detection

Elastic EQL rules are well-suited for correlating authentication events with subsequent administrative actions.

// EQL Query - Sequence based detection
sequence by user.name
    with maxspan=5m
    [ authentication where event.action == "authentication_success" and
      user.name != "admin" and
      event.outcome == "success" and
      winlog.event_id == 4624 ]
    [ auditd where process.name == "php-fpm" or process.name == "apache2" or process.name == "nginx" and
      file.path like "*content_moderation_notifications*" ]
    [ web where http.request.method == "POST" and
      url.path like "/admin/config/content/moderation_notifications*" or
      url.path like "/admin/structure/moderation_notifications*" ]

Splunk SPL Query

Splunk SPL for web access logs and Drupal watchdog integration:

index=web sourcetype=access_combined user!="admin" 
    [search index=web sourcetype=access_combined 
        (uri="/admin/config/content/moderation_notifications*" OR uri="/admin/structure/moderation_notifications*")
        | dedup clientip 
        | fields clientip] 
    uri="/admin/config/content/moderation_notifications*" 
    | stats count by clientip, user, uri, method, status
    | sort -count
    | table _time clientip user uri method status count
    | rename clientip as "Source IP", user as "Username", uri as "Requested URI", method as "HTTP Method", status as "Response Code", count as "Request Count"

Alternative query using Drupal watchdog log index:

index=drupal source="/var/log/drupal/watchdog.log*"
    | spath input=message path=message
    | search message="access denied" OR message="user.*permission"
    | regex message="(?i)moderation_notifications"
    | eval severity=case(
        match(message,"(?i)fatal|error") , "high",
        match(message,"(?i)warning"), "medium",
        true, "low")
    | table _time host source user message severity
    | sort - _time

Wazuh OSSEC Rule

Wazuh OSSEC rules are XML-based and trigger on log file content. This rule monitors Apache access logs for attempts to reach the module's administrative endpoints by non-admin users.

<group name="drupal, web, cve_2026_81161,">
  <rule id="100811" level="12">
    <decoded>cve-2026-81161</decoded>
    <field name="url" type="pcre2">(?i)(/admin/config/content/moderation_notifications|/admin/structure/moderation_notifications)</field>
    <field name="user_agent" type="pcre2">(?i)(curl|wget|python|nikto|sqlmap)</field>
    <description>CVE-2026-81161: Drupal Content Moderation Notifications admin endpoint accessed by automated tool (user agent: $(user_agent)) from IP: $(srcip)</description>
    <group>drupal,web_application_attack,</group>
    <mitre>
      <id>T1068</id>
    </mitre>
  </rule>

  <rule id="100812" level="15">
    <decoded>cve-2026-81161</decoded>
    <field name="url" type="pcre2">(?i)/admin/config/content/moderation_notifications</field>
    <field name="method" type="pcre2">(?i)(POST|PUT)</field>
    <description>CVE-2026-81161: POST/PUT to Content Moderation Notifications config page - potential exploitation attempt from IP: $(srcip) user: $(user)</description>
    <group>drupal,web_application_attack,</group>
    <mitre>
      <id>T1068</id>
    </mitre>
  </rule>
</group>

Note: Wazuh requires a decoder to extract fields like url, srcip, and user from the log format. Refer to Wazuh's Apache decoder documentation for proper field extraction configuration.

Mitigation & Patch Guidance

Patch Confidence: 0/4 — UNPATCHED. No vendor fix exists at the time of this report.

Immediate Mitigations (apply first)

  1. Disable the Content Moderation Notifications module if it is not critical to operations: drush pm:uninstall content_moderation_notifications. This eliminates the vulnerable attack surface entirely.
  2. If the module cannot be disabled, restrict access to its administrative endpoints via Drupal's .htaccess (Apache) or nginx.conf. Block all requests to /admin/config/content/moderation_notifications* from non-administrative IP ranges.
  3. Review and revoke any permissions that the module defines from non-administrator roles. Navigate to /admin/people/permissions and identify permissions containing "content moderation notifications" — remove these from authenticated-user and other low-privilege roles.
  4. Enable two-factor authentication (TFA) for all accounts with any administrative role to increase the difficulty of account takeover-based exploitation.

Patch/Upgrade Steps

  1. Monitor the module's official Drupal.org project page (https://www.drupal.org/project/content_moderation_notifications) for a security release addressing CVE-2026-81161.
  2. When a fixed version becomes available (expected to be 3.9.1 or 4.0.0), upgrade immediately:
    • composer update drupal/content_moderation_notifications
    • or drush pm:update content_moderation_notifications
  3. Run drush updatedb and drush cache:rebuild after updating.
  4. Until a patch exists, set up a standing task to re-check for patches weekly. Do not assume the issue is resolved until the vendor formally announces a fix.

Long-Term Hardening

  1. Apply the principle of least privilege across all Drupal roles. Audit all contrib module permissions quarterly. Remove "authenticated user" permission grants that are not strictly required.
  2. Deploy a Web Application Firewall (WAF) with rules specifically blocking access to Drupal /admin/config/ paths from non-admin source IPs.
  3. Harden the underlying OS/PHP stack: set allow_url_fopen=Off and disable_functions to block exec, system, shell_exec, passthru, popen, and proc_open if not needed.
  4. Enforce routine backups of both the Drupal codebase and database to enable rapid recovery if a compromise is detected.
  5. Subscribe to the Drupal Security Advisories mailing list and monitor the module's issue queue for security discussions.
  6. Segment administrative interfaces behind a VPN or allowlist so that only known admin IPs can access admin/* paths.

References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-81161
  2. Drupal Module Project Page (Content Moderation Notifications): https://www.drupal.org/project/content_moderation_notifications
  3. CWE-267 Reference: https://cwe.mitre.org/data/definitions/267.html
  4. Drupal Security Advisory Policy: https://www.drupal.org/drupal-security-team/security-advisory-process
  5. MITRE ATT&CK — T1068 (Exploitation for Privilege Escalation): https://attack.mitre.org/techniques/T1068/

Threat Actor Activity / Exploit-in-the-Wild Evidence: None identified at the time of this report. No public proof-of-concept code, in-the-wild exploitation reports, or threat actor campaign references exist for CVE-2026-81161. The CISA KEV catalog does not list this CVE. Security teams should nonetheless treat this as an exploitable risk given (a) the module is unpatched, and (b) Drupal sites are frequently targeted by automated scanning campaigns that enumerate installed modules. Organizations using Content Moderation Notifications should prioritize the mitigations listed above before an exploit is publicly released.


Report generated by Valtersit Threat Intelligence.
Last updated: 2026-01-15.
Monitoring status: Active — pending vendor patch and exploit disclosures.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

product:Drupal
http.title:"Drupal"
http.html:"Content Moderation Notifications"
http.html:"/modules/contrib/content_moderation_notifications"
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-81161/ · 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.