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

CVE-2026-102586

CVE-2026-102586 Cross-Site Scripting in Moodle
📅 PUBLISHED: 2026-09-30 00:00 UTC 🔄 UPDATED: 2026-10-11 22:59 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 distinct-origin 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.28%
👁️
0.28% probability
6.9× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1189
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Affected: Moodle — upgrade to patched release
CVSS VECTOR BREAKDOWN 4.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
4.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-102586 is a cross-site scripting (XSS) vulnerability in Moodle caused by insufficient sanitization of username input on the password reset page. A remote, unauthenticated attacker can craft a malicious password reset link that, when accessed by a victim, executes arbitrary script in the victim's browser. With a CVSS base score of 4.3 and a required user interaction component, the vulnerability primarily threatens session integrity and client-side data confidentiality rather than direct server 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 resides in Moodle's password reset workflow. According to the NVD description, the application fails to sufficiently sanitize username input that is supplied on the password reset page. This is classified as CWE-79 (Improper Neutralization of Input During Web Page Generation, commonly "Cross-Site Scripting"). The CVSS vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N confirms the following characteristics:

  • Attack Vector (AV:N): Exploitable remotely over the network, consistent with a web-facing Moodle instance.
  • Attack Complexity (AC:L): No specialized conditions or race windows are required.
  • Privileges Required (PR:N): The attacker does not need an account or authentication to deliver the malicious link.
  • User Interaction (UI:R): Successful exploitation requires a victim to access a crafted password reset link.
  • Scope (S:U): The impact remains within the security authority of the vulnerable component.
  • Confidentiality (C:L): Limited confidentiality impact, typically limited to data accessible in the victim's browser context (e.g., session tokens, page content).
  • Integrity (I:N) / Availability (A:N): No direct integrity or availability impact is scored.

The attack surface is the unauthenticated password reset page. Because input validation on the username field is insufficient, attacker-controlled content can be reflected into the generated HTML response and rendered by the victim's browser. The precise parameter name, reflection point, and encoding context are not specified in the provided NVD description, so the report does not assert them; the mechanism is described strictly at the vulnerability-class level.

The core issue is improper neutralization of user-supplied input during web page generation, which allows script execution in the victim's browser. This maps to the classic reflected XSS pattern: malicious input is embedded in a URL or request, the server fails to sanitize it correctly, and the response is interpreted as executable markup by the client.

Exploitation Scenarios

No public proof-of-concept, exploit code, or Nuclei template is available for this CVE. The attack chain below is inferred strictly from the vulnerability class (reflected XSS) and the details provided in the NVD description. No specific function names, file paths, or parameter names are asserted because none appear in the source intelligence.

  1. Reconnaissance / Target Identification. The attacker identifies a Moodle instance accessible over the network. Because the flaw is in the password reset page, the attacker locates that page and begins probing how username input is reflected in the response.

  2. Triggering the Flaw Class. The attacker supplies input containing HTML/JavaScript control characters into the username field used by the password reset flow. Due to insufficient sanitization, this input is reflected into the returned page without adequate neutralization, allowing the browser to interpret it as active content. The attacker packages this as a specially crafted password reset link.

  3. Payload / Execution Method. The attacker delivers the crafted link to an unauthenticated victim through phishing, social engineering, or another lure. When the victim opens the link, their browser loads the vulnerable Moodle page and renders the injected content as script in the security context of the Moodle origin. Execution occurs client-side, in the victim's browser, with no server-side authentication required by the attacker.

  4. Post-Exploitation Impact. Given the limited confidentiality subscore, the realistic impact is theft or manipulation of browser-accessible data tied to the Moodle origin, such as session information or page content, and potentially the redirection or manipulation of the victim's browsing experience. The NVD description does not establish arbitrary code execution on the server, broad data exfiltration, or account takeover; no such claims should be made.

It is important to stress: the description does not identify the exact sanitization routine, the affected template, or the affected version range. Exploitation specifics beyond those above would be speculative and are deliberately omitted.

Impact Assessment

The CVSS score is 4.3 (Medium). The vector AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N indicates the vulnerability is remotely reachable and easy to attempt, but constrained by the need for a victim to interact with a crafted link. The confidentiality impact is limited, and there is no scored integrity or availability impact. Blast radius is confined to users who access the malicious password reset link; their browser session in the Moodle origin is the primary exposure. Because the vulnerability is unauthenticated from the attacker's perspective, any user of an affected Moodle deployment—students, instructors, administrators—could be a potential target if lured to the link. This creates a plausible social engineering vector against privileged Moodle users, even though the CVSS scope remains unchanged. There is no evidence of impact to the underlying server, database, or other systems, and no evidence of exploit-in-the-wild activity.

Detection Guidance

Sigma Rule

title: Moodle Password Reset Reflected XSS Attempt
id: 8f3a1c92-6d4b-4e7a-9a2e-moodle-102586
status: experimental
description: Detects requests to Moodle password reset page containing script payloads in the username input, consistent with CVE-2026-102586.
logsource:
  category: webserver
detection:
  selection_page:
    cs-uri-stem|contains:
      - 'forgot_password'
      - 'password_reset'
      - 'lost_password'
  selection_payload:
    cs-uri-query|contains:
      - '<script'
      - '%3Cscript'
      - 'javascript:'
      - 'onerror='
      - 'onload='
      - 'alert('
  condition: selection_page and selection_payload
fields:
  - c-ip
  - cs-uri-query
  - cs-uri-stem
  - cs(User-Agent)
falsepositives:
  - Security scanners performing authorized assessments
  - Web application firewalls in monitoring mode
level: medium
tags:
  - attack.t1189
  - cve.2026.102586

YARA Rule

rule CVE_2026_102586_Moodle_XSS_Reflected
{
    meta:
        description = "Detects reflected XSS payloads targeting the Moodle password reset username parameter (CVE-2026-102586)"
        author = "Threat Intelligence"
        reference = "CVE-2026-102586"
        date = "2026-01-01"
        severity = "medium"

    strings:
        $p1 = "<script" nocase
        $p2 = "javascript:" nocase
        $p3 = "onerror=" nocase
        $p4 = "onload=" nocase
        $p5 = "forgot_password" nocase
        $p6 = "password_reset" nocase
        $enc1 = "%3Cscript" nocase
        $enc2 = "%3cscript" nocase

    condition:
        (any of ($p1, $p2, $p3, $p4, $enc1, $enc2)) and
        (any of ($p5, $p6))
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-102586 Moodle Password Reset Reflected XSS Attempt"; flow:established,to_server; http.method; content:"GET"; http.uri; content:"forgot_password"; nocase; http.uri; content:"script"; nocase; http.uri; pcre:"/(%3C|<)script|onerror=|onload=|javascript:/i"; reference:cve,2026-102586; classtype:web-application-attack; sid:2026102586; rev:1;)

Elastic Detection

sequence by source.ip with maxspan=5s
  [network where network.protocol == "http" and
    url.path : ("*forgot_password*", "*password_reset*", "*lost_password*")]
  [network where network.protocol == "http" and
    url.query : ("*<script*", "*%3Cscript*", "*onerror=*", "*onload=*", "*javascript:*")]

Splunk SPL Query

index=web sourcetype=access_combined
| where match(uri, "(?i)(forgot_password|password_reset|lost_password)")
| where match(uri, "(?i)(%3Cscript|<script|onerror=|onload=|javascript:|alert\\()")
| stats count min(_time) as first_seen max(_time) as last_seen by src_ip uri
| where count > 0
| sort - count
| convert ctime(first_seen) ctime(last_seen)

Wazuh OSSEC Rule

<group name="web,appsec,moodle,">
  <rule id="1025860" level="10">
    <if_sid>31100</if_sid>
    <url>forgot_password|password_reset|lost_password</url>
    <regex>(%3C|&lt;|<)script|onerror=|onload=|javascript:</regex>
    <description>CVE-2026-102586: Moodle password reset reflected XSS attempt</description>
    <mitre>
      <id>T1189</id>
    </mitre>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence is 0/4 — UNPATCHED, with no patch evidence from any tracked source, no vendor fix, no workarounds, and no affected-version range published in the provided intelligence.

Immediate Mitigations

  • Deploy or tune a Web Application Firewall (WAF) profile on the password reset endpoint to block script-bearing input, while recognizing that WAF filtering is a compensating control, not a fix.
  • Encode/sanitize output on the password reset page at the application layer where possible, ensuring user-supplied username input is contextually escaped before rendering (HTML entity encoding, appropriate output encoding for the reflection context).
  • Apply a strict Content-Security-Policy (CSP) to Moodle responses to reduce the likelihood of inline script execution if reflection occurs.
  • Restrict or monitor access to the password reset page for suspicious query parameters.

Patch / Upgrade Steps

  • Monitor the Moodle security advisories and the NVD entry for CVE-2026-102586 for an official fix. When released, upgrade to the patched Moodle version immediately.
  • Track Moodle's release channels and security announcement feed; the absence of a fixed version today does not preclude a future patch.

Long-Term Hardening

  • Adopt input validation and output encoding as a standard secure-coding practice across Moodle customization and plugins.
  • Enable centralized logging of web requests and retain logs for retrospective detection and threat hunting.
  • Conduct periodic security review of authentication-adjacent workflows (password reset, login, registration) where unauthenticated input reaches the browser.

References

👁️ 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:"Moodle"
title:"Moodle"
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-102586/ · 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.