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

CVE-2026-87031

CVE-2026-87031 Cross-Site Scripting in Concrete CMS
📅 PUBLISHED: 2026-09-16 00:00 UTC 🔄 UPDATED: 2026-09-26 06:15 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.26%
👁️
0.26% probability
6.6× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: United States License: Open Source
VULNERABLE: Concrete Cms
CVSS VECTOR BREAKDOWN 2.7
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: H Privileges Required High
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: L Integrity Low
A: N Availability None
2.7
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-87031 is a missing authorization vulnerability (CWE-862) in the Concrete CMS REST API user creation endpoint, affecting versions 9.2.0 through 9.5.3. The endpoint (POST /ccm/api/1.0/users, the add() method of concrete/src/Api/Controller/Users.php) failed to perform a permission check before creating an account, allowing any valid OAuth token carrying the "users:add" scope — including a client_credentials token with no associated user context — to create active, validated user accounts. Created accounts bypass email verification and administrator approval and, under default registration settings, can edit page content, providing a path to stored cross-site scripting and further compromise.

⚡ 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 vulnerability is a classic missing authorization check (CWE-862) at a state-changing REST API endpoint. According to the NVD description, in Concrete CMS 9.2.0 through 9.5.3 the REST API user creation endpoint (POST /ccm/api/1.0/users) implemented in the add() method of concrete/src/Api/Controller/Users.php did not perform a permission check before creating an account.

The attack surface is the public REST API exposed by Concrete CMS at /ccm/api/1.0/. Authentication to this API is performed via OAuth tokens. The specific deficiency is that the endpoint validated only the "users:add" scope on the presented token, but did not verify that the token holder had an authenticated user context or the appropriate authorization level to perform account creation. This means a client_credentials OAuth grant — which is typically issued for machine-to-machine access without any associated user identity — was sufficient to invoke the account creation logic.

The critical consequence is that the created account was immediately active and validated, bypassing both email verification and administrator approval workflows. Because the account was created in a validated state, it inherited the privileges granted to newly registered users under the site's default registration settings. Per the description, under default registration settings these accounts could edit page content.

Because page content editing is available to the created account, an attacker can inject persistent (stored) content that is later rendered to other users, establishing a stored cross-site scripting (XSS) path. The XSS then serves as a pivot for session theft, privilege escalation against administrative users, or further compromise of the CMS instance.

The Concrete CMS security team assigned this vulnerability a CVSS v4.0 score of 2.1 with vector CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N. Note the low base score reflects the high privileges (PR:H) required to possess a token bearing the "users:add" scope, the attack prerequisites (AT:P) implied by the need for a valid OAuth token, and the limited direct confidentiality impact (VC:N). Integrity impact to the vulnerable system is low (VI:L). No values were provided for an affected versions array, OSV packages, EPSS, or a vendor fix; the patch confidence is 0/4 and the advisory explicitly frames the affected range as 9.2.0 through 9.5.3.

Insufficient technical detail is available in the provided data to describe the exact internal token validation routine, the specific authorization middleware, or the precise content-editing permission model beyond what is stated. No public PoC, Nuclei template, or exploit code was identified in the supplied data.

Exploitation Scenarios

No public PoC is available; the attack chain below is inferred from the vulnerability class (missing authorization / CWE-862) and the mechanics stated in the NVD description. Only endpoint, method, and scope names appearing verbatim in the description are used.

  1. Reconnaissance / target identification. The attacker identifies an internet-exposed Concrete CMS instance running a version in the 9.2.0 - 9.5.3 range. The REST API base path /ccm/api/1.0/ and, specifically, the user creation endpoint POST /ccm/api/1.0/users are the target. The attacker enumerates whether the API is reachable and whether OAuth token issuance is available.

  2. Obtaining or leveraging a token. The flaw is triggered by presenting any valid OAuth token carrying the "users:add" scope. Critically, per the description, this includes a client_credentials token with no associated user context. The attacker therefore does not need to compromise a human user's credentials or establish a user session; a machine-to-machine token bearing the required scope is sufficient.

  3. Triggering the missing authorization. The attacker issues a POST request to /ccm/api/1.0/users (the add() method of concrete/src/Api/Controller/Users.php) using the token. Because no permission check is performed before account creation, the request succeeds and a new account is created. The account is created in an active, validated state — bypassing email verification and administrator approval.

  4. Post-exploitation impact. Under default registration settings, the newly created account can edit page content. The attacker uses this content-editing capability to plant persistent content that is rendered to other users, establishing a stored XSS path. From there, the attacker can target higher-privileged users, attempt to steal sessions or elevate privileges, and further compromise the CMS instance. The limited integrity impact (VI:L) in the CVSS assessment reflects the direct effect of unauthorized account creation and content modification, while the stored XSS path expands the potential blast radius beyond the initial low-severity rating.

Impact Assessment

Business impact centers on unauthorized account creation, integrity loss, and a credible escalation path to stored cross-site scripting. Organizations running Concrete CMS versions 9.2.0 through 9.5.3 with the REST API exposed and OAuth tokens bearing the "users:add" scope are affected.

CVSS v4.0 vector: CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N (base score 2.1).

  • AV:N — network exploitable.
  • AC:L — low attack complexity.
  • AT:P — attack prerequisites are present (a valid OAuth token with the "users:add" scope is required).
  • PR:H — the attacker must possess high-level privileges (the scoped token).
  • UI:N — no user interaction required.
  • VC:N / VI:L / VA:N — no confidentiality or availability impact to the vulnerable system; low integrity impact.
  • SC:N / SI:N / SA:N — no subsequent system impact scored.

Blast radius: while the base score is low due to the high privilege requirement (PR:H) of holding a scoped token, the practical blast radius is elevated because client_credentials tokens are often issued to integrations and services and may be over-scoped or poorly managed. Any such token leaking or being broadly available creates a durable path to account creation and content manipulation. Because created accounts bypass verification and approval, they persist as legitimate-looking users, enabling downstream stored XSS against administrators and other users. EPSS has not yet been scored by FIRST.org and no CISA KEV listing exists.

Detection Guidance

Detection should focus on OAuth-authenticated POST requests to the user creation endpoint and the resulting creation of accounts by tokens lacking a user context.

Sigma Rule

title: Concrete CMS REST API Unauthorized User Creation (CVE-2026-87031)
id: 8f2c1b64-3d9a-4f7e-9c2a-1a7b6e5d0c31
status: experimental
description: Detects POST requests to the Concrete CMS REST API user creation endpoint that create accounts, indicating abuse of the missing permission check (CWE-862).
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2026-87031
author: valtersit.com
date: 2026/01/01
logsource:
  category: webserver
  product: apache
detection:
  selection_endpoint:
    cs-method: 'POST'
    cs-uri-stem|contains: '/ccm/api/1.0/users'
  selection_status:
    sc-status: 201
  condition: selection_endpoint and selection_status
falsepositives:
  - Legitimate administrative or automated provisioning of users via the REST API
level: medium
tags:
  - attack.t1190
  - cve.2026-87031

YARA Rule

rule CVE_2026_87031_ConcreteCMS_Unauthorized_User_Creation
{
    meta:
        description = "Detects request artifacts referencing the Concrete CMS REST API user creation endpoint abused for unauthorized account creation (CVE-2026-87031)."
        author = "valtersit.com"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-87031"
        date = "2026-01-01"

    strings:
        $ep1 = "/ccm/api/1.0/users" ascii wide nocase
        $scope1 = "users:add" ascii wide nocase
        $p1 = "POST /ccm/api/1.0/users" ascii wide nocase
        $ccm = "/ccm/api/1.0/" ascii wide nocase

    condition:
        uint16(0) == 0x4854 or  // "HT" for HTTP traffic or HAR-style logs
        any of them
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-87031 Concrete CMS REST API unauthorized user creation attempt"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/ccm/api/1.0/users"; http.uri; nocase; http.header; content:"Authorization"; nocase; classtype:attempted-admin; reference:cve,2026-87031; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-87031; sid:90087031; rev:1;)

Elastic Detection

sequence by source.ip with maxspan=30s
  [ network where http.request.method == "POST" and http.request.uri : "/ccm/api/1.0/users" and http.response.status_code == 201 ]

Splunk SPL Query

index=web sourcetype=access_combined
| rex field=uri_path "^(?<api_path>/ccm/api/1\.0/users)"
| where request_method="POST" AND status=201 AND isnotnull(api_path)
| stats count values(src_ip) as source_ips by host, api_path, status
| where count > 0

Wazuh OSSEC Rule

<group name="web,concrete_cms,cve-2026-87031,">
  <rule id="10087031" level="10">
    <if_sid>31100</if_sid>
    <field name="url">/ccm/api/1.0/users</field>
    <field name="method">POST</field>
    <description>CVE-2026-87031: Possible Concrete CMS REST API unauthorized user creation via POST /ccm/api/1.0/users</description>
    <mitre>
      <id>T1190</id>
    </mitre>
    <group>cve_2026_87031,attack,</group>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source). No vendor fix, workaround, or affected-version array is available in the provided data.

  1. Immediate mitigations
  • Block or restrict network access to the REST API path /ccm/api/1.0/ at the reverse proxy or WAF, particularly POST /ccm/api/1.0/users, unless explicitly required.
  • Audit all issued OAuth tokens and revoke/rotate any token carrying the "users:add" scope, especially client_credentials tokens with no associated user context. Apply the principle of least privilege to token scopes.
  • Disable or restrict the REST API if it is not operationally required.
  • Review and tighten default registration settings so newly created accounts cannot edit page content; disable or require administrator approval for new account content capabilities.
  1. Patch / upgrade steps
  • Monitor the Concrete CMS security advisories and the NVD entry for CVE-2026-87031 for an official patched release. As of available data, versions 9.2.0 through 9.5.3 remain affected and no patch reference is available.
  • When a fix is released, upgrade to the patched version and re-verify that the user creation endpoint enforces a permission check independent of the mere "users:add" scope.
  1. Long-term hardening
  • Enforce authorization checks on all state-changing API endpoints, validating both scope and the authenticated user context and role.
  • Harden OAuth issuance: eliminate over-scoped client_credentials tokens, enforce audience/role binding, and implement short token lifetimes with rotation.
  • Deploy input sanitization and output encoding for all CMS content to mitigate stored XSS paths; enable CSP.
  • Enable comprehensive API logging, alerting on the detections above, and periodic audit of newly created accounts against approved provisioning sources.
  • Maintain a software bill of materials and vulnerability management process to track Concrete CMS versions and advisories.

References

No public PoC, Nuclei template, or exploit code was identified. No known threat actor campaigns or exploit-in-the-wild evidence are available in the provided data. The vulnerability was reported to Concrete CMS by Winston Crooker.

👁️ 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.

http.title:"Concrete CMS"
http.html:"concrete/cdn"
http.html:"/ccm/"
http.favicon.hash:-152535184
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-87031/ · 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.