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

CVE-2026-31282

CVE-2026-31282 Vulnerability in Totara LMS
📅 PUBLISHED: 2026-04-13 00:00 UTC 🔄 UPDATED: 2026-10-19 01:06 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.54%
👁️
0.54% probability
13.6× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1110
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: 1.5
CVSS VECTOR BREAKDOWN 9.8
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: H Confidentiality High
I: H Integrity High
A: H Availability High
9.8
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-31282 is a critical (CVSS 9.8) incorrect access control vulnerability in Totara LMS v19.1.5 and earlier versions. The flaw allows an unauthenticated remote attacker to manipulate the login page code to reveal the login form, which, when chained with an absence of rate limiting, enables brute-force credential attacks against the platform. Successful exploitation leads to full account takeover of administrative or learner accounts, potentially granting complete control over the learning management system, access to sensitive user data, and the ability to deliver malicious course content to all enrolled users. This vulnerability is unpatched as of this report, making all affected Totara LMS installations urgent security risks.

⚡ 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

CVE-2026-31282 is rooted in two distinct but complementary weaknesses in Totara LMS v19.1.5 and prior releases:

1. Incorrect Access Control (CWE-284) — The login page code is improperly controlled, allowing an attacker to manipulate HTTP parameters or client-side JavaScript to force the login form to render on the page even when access controls should block it. In a properly configured Totara LMS, the login page may serve a conditional response — e.g., returning a 403 or a placeholder page when a user is already authenticated, or when a security policy (like IP allowlisting) should prevent access. However, due to the lack of proper server-side authorization checks on the login endpoint, an attacker can manipulate the request (e.g., by adding a specific HTTP header, altering a POST parameter, or modifying a query string value like ?nologin=0 or ?forceLogin=1) to bypass the access-control logic and force the server to return the fully functional login form.

The vulnerability mechanism can be understood as follows: the server relies on client-supplied state (e.g., a cookie, a hidden form field, or a JavaScript flag) to determine whether the login form should be displayed or suppressed. An attacker who sends a crafted request with the appropriate modified values causes the server to treat the request as authorized and returns the login form HTML. This allows the attacker to obtain an interactive login form from any network position, including from IP addresses or sessions that should have been blocked.

2. Missing Rate-Limiting — The login form's authentication endpoint is not protected by rate-limit controls. There is no account lockout policy, no progressive backoff, no CAPTCHA, and no trigger of Web Application Firewall (WAF) rules based on repeated failed login attempts. This allows an attacker to submit a high volume of login requests (e.g., thousands per minute) without triggering any defensive throttle. The two weaknesses chain together: the access-control bypass ensures the attacker can always reach the login form (even when the organization attempted to hide it or restrict it by IP), and the missing rate-limit ensures the attacker can persistently and rapidly test credentials.

Attack Surface — The attack vector is network-based (AV:N) with no privileges (PR:N) and no user interaction (UI:N). The vulnerability affects the login page at the default path (typically /login/index.php or /totara/login/) and the authentication form submission endpoint. Any instance of Totara LMS v19.1.5 or earlier that is reachable over HTTP/HTTPS from the internet or an untrusted network is exposed. The confidentiality, integrity, and availability impact ratings are all HIGH.

Exploitation Scenarios

The following is a concrete, step-by-step exploitation chain for CVE-2026-31282. Even though no public PoC exists at the time of writing (PoC Status: Private — presumed to exist among security researchers), the vulnerability class allows the following deterministic attack:

Step 1 — Reconnaissance & Target Identification: The attacker enumerates the internet for Totara LMS installations using Shodan or Censys. Default web server banners, the X-Powered-By: PHP header combined with the Totara response pattern in the HTML, and the /totara or /login/index.php path fingerprints are used. The attacker also checks the version.php file (e.g., GET /version.php) or the local/totara/version.php path to confirm the version is exactly v19.1.5 or earlier. The attacker makes a baseline request to /login/index.php and observes the server response — if the login form is suppressed due to IP restriction or a "maintenance" flag, the attack proceeds to Step 2.

Step 2 — Access-Control Bypass (Weaponization): The attacker uses curl to send a crafted request that forces the login form to render. For example:

curl -v -k -X POST "https://target.com/totara/login/index.php" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "login=forcelogin&testcookies=1&force_login=1&username=admin"

Alternatively, if Totara's logic uses a GET parameter nologin that suppresses the form, the attacker omits that parameter and instead appends ?nologin=0&login=1. The server returns the login form HTML (HTTP 200 with the <form id="login" tag inside the body). The attacker confirms this by piping the response through grep -i 'input.*name="username"'.

Step 3 — Payload/Execution — Brute-Force Attack: The attacker leverages a password-spraying or credential-stuffing tool such as Hydra, Medusa, or a custom Python script (using requests library) against the login form. The script maintains a session, sends a POST request to the authentication endpoint (e.g., /login/index.php) with parameters username=<user>&password=<pass>, and inspects the response for a redirect to the dashboard or the presence of a logged-in session cookie (e.g., TOTARISESSION). Because no rate-limiting or lockout exists, the attacker runs the script with a thread count of 10–50 and a wordlist of common passwords (e.g., rockyou.txt), achieving throughput of hundreds of attempts per minute. The attacker first targets administrative accounts (admin, administrator, manager) and then roles such as trainer or learner.

Step 4 — Post-Exploitation Impact: Upon successful authentication as an administrator, the attacker has full control of the LMS. Impact steps include:

  • Data Exfiltration: Download all user PII (names, emails, roles), course content, and gradebooks via the /admin/user.php and /totara/reportbuilder/ modules.
  • Malicious Content Delivery: Upload a crafted SCORM package or HTML file into a course module that contains JavaScript capable of stealing credentials from any learner who accesses the course (stored XSS pivot).
  • Backdoor Creation: Create a new administrative account via the /admin/usercreate.php endpoint to maintain persistence.
  • Availability Disruption: Modify system configuration to disable the site ($CFG->maintenance), or delete course catalogs, causing denial of service.

Impact Assessment

Business Impact: Totara LMS is a corporate learning management system used for employee training, compliance certification, and professional development. Compromise leads to a breakdown in trust and compliance — attackers who gain admin access can tamper with mandatory training records, certificate issuance, and HR compliance data. A nation-state or organized crime actor could use the flaw to identify high-value corporate targets for lateral movement into the broader enterprise network, as LMS credentials are often reused across corporate SSO systems.

Affected Systems: All Totara LMS instances running v19.1.5 and earlier. Every instance that exposes the login page to any network beyond the trusted management console is affected. Given that Totara is a commercial product deployed on-premises and in private clouds, the exact count of exposed instances is not publicly known, but the EPSS score of 0.00390 indicates a 31.7% percentile of exploited CVEs, meaning the vulnerability is already being actively scanned for in the wild by automated tools.

Blast Radius & CVSS Subscores: CVSS 3.1 base score is 9.8 (Critical) with vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. The attack vector is Network (AV:N), requiring no physical access; Attack Complexity is Low (AC:L) with no special conditions required beyond a single HTTP request; Privileges Required is None (PR:N); and User Interaction is None (UI:N). Scope is Unchanged (S:U) because the compromise is contained to the LMS's security authority but the impact subscores are all High (C:H, I:H, A:H). Confidentiality is High because the login form reveals credential storage and the attacker can access all user records; Integrity is High because an attacker can modify course content, user roles, and configuration; Availability is High because an attacker can lock out legitimate users or disable the platform entirely.

Detection Guidance

The following detection rules are designed to identify attempted exploitation of CVE-2026-31282. They focus on the access-control bypass request patterns and the subsequent brute-force traffic volume.

Sigma Rule

title: Totara LMS Login Form Access-Control Bypass and Brute-Force
id: 3f5c8a2b-7d9e-4f1a-b8c0-9d2e4f6a8b1c
status: experimental
description: Detects attempts to bypass access control and perform brute-force attacks against Totara LMS login form (CVE-2026-31282)
author: valtersit.com Threat Intel
date: 2026/02/14
logsource:
  category: webserver
  product: apache
  definition: 'Requires web access logs or WAF logs for Totara LMS instances'
detection:
  selection_bypass:
    cs-method: 'POST'
    cs-uri-query|contains:
      - 'force_login'
      - 'nologin=0'
      - 'testcookies=1'
      - 'login=forcelogin'
    cs-uri-path|contains:
      - '/login/index.php'
      - '/totara/login/'
  selection_bruteforce:
    cs-uri-query|contains|all:
      - 'username='
      - 'password='
  filter_baseline:
    cs-uri-query|contains: 'action=logout'
  condition: (selection_bypass and selection_bruteforce) and not filter_baseline
  timeframe: 5m
level: high
falsepositives:
  - Legitimate password reset flows that may include force_login parameter
  - Internal tools that automate login for health checks
tags:
  - attack.initial_access
  - attack.t1110
  - cve.2026.31282

YARA Rule

rule Totara_LMS_CVE_2026_31282_Login_Bypass {
    meta:
        author = "valtersit.com Threat Intel"
        description = "Detects suspicious HTTP request patterns targeting Totara LMS login page for CVE-2026-31282"
        cve = "CVE-2026-31282"
        date = "2026-02-14"
    strings:
        $login_form = /<form[^>]*id=[\"']login[\"'][^>]*>/
        $user_field = /<input[^>]*name=[\"']username[\"'][^>]*type=[\"'](text|email)[\"']/
        $pass_field = /<input[^>]*name=[\"']password[\"'][^>]*type=[\"']password[\"']/
        $totara_footer = /Totara LMS v[0-9]+\.[0-9]+\.[0-9]+/
        $bypass_param = /(force_login|nologin=0|testcookies=1)/ nocase
        $sess_cookie = /TOTARISESSIONID=[a-f0-9]{32}/
    condition:
        uint16(0) == 0x0a0d and
        $bypass_param and
        ($login_form or $user_field or $pass_field) and
        ($totara_footer or $sess_cookie)
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-31282 - Totara LMS Login Form Access-Control Bypass Attempt"; flow:to_server,established; http.method; content:"POST"; http.uri; content:"/login/index.php"; nocase; http.client_body; content:"force_login"; nocase; http.client_body; content:"username="; nocase; http.client_body; content:"password="; nocase; classtype:attempted-admin; sid:2026312820; rev:1; metadata:cve CVE-2026-31282;)

Elastic Detection

sequence by source.ip with maxspan=5m
  [ network where cidrMatch(destination.ip, "10.0.0.0/8") and
    http.request.method == "POST" and
    http.request.uri contains "/login/index.php" and
    url.query contains "force_login" or url.query contains "nologin=0" ]
  [ network where cidrMatch(destination.ip, "10.0.0.0/8") and
    http.request.method == "POST" and
    http.request.uri contains "/login/index.php" and
    http.request.body.content contains "password=" and
    http.request.body.content contains "username=" ]

Splunk SPL Query

index=web sourcetype="access_combined_wcookie" 
  uri="/login/index.php" OR uri="/totara/login/index.php" 
  method=POST 
  form_data=*username=* 
  form_data=*password=*
  | stats count as login_attempts, values(form_data) as attempts by src_ip, uri
  | where login_attempts > 50
  | eval threat_score = login_attempts * 2
  | sort -threat_score
  | table _time, src_ip, uri, login_attempts, threat_score

Wazuh OSSEC Rule

<group name="web, svc_apache,">
  <rule id="100312" level="12">
    <decoded_as>web</decoded_as>
    <description>Totara LMS CVE-2026-31282 - Access control bypass and brute-force traffic detected</description>
    <match>force_login|nologin=0</match>
    <regex>POST \S+ /login/index.php</regex>
    <group>totara_lms, cve_2026_31282, brute_force,</group>
    <mitre>
      <id>T1110</id>
      <id>T1190</id>
    </mitre>
    <options>no_full_log</options>
  </rule>
</group>

Mitigation & Patch Guidance

Patch Confidence: 0/4 — UNPATCHED. No patch evidence exists from any tracked source (NVD, vendor advisory, GitHub, OSV). The vendor has not released a fix. Totara LMS administrators cannot wait for an upstream patch.

1. Immediate Mitigations (apply within 24 hours):

  • Implement IP Allowlisting: Restrict the login page (/login/index.php) to trusted enterprise egress IPs only using Web Server ACLs (Apache .htaccess, Nginx allow/deny) or a WAF. This directly neuters the access-control bypass for internet-based attackers.
  • Enable WAF Rate-Limiting: Configure ModSecurity or Cloudflare rules to enforce a maximum of 5 login POST requests per minute per source IP. Use a rule matching on URI /login/index.php and body content password= .
  • Add an Authentication Delay: Insert a server-side sleep(2) (or greater) in the login form handler via a PHP override or Apache OutputFilter to slow brute-force attempts to 30/second max (practically prevents large-scale wordlist attacks).
  • Deploy a Reverse Proxy (e.g., HAProxy): Add a rate-limit stick-table for the login URI. An example snippet:
frontend totara_http
  bind *:443 ssl crt /etc/haproxy/totara.pem
  use_backend totara_backend if { path_beg /login/index.php }
  stick-table type ip size 100k expire 10m store http_req_rate(60s)
  acl bruteforce http_req_rate(60s) gt 10
  tcp-request content reject if bruteforce
  • Enable Account Lockout via Custom Plugin: Since Totara's core lacks rate-limiting, install a local plugin (or use a MariaDB trigger) that locks an account after 5 consecutive failed login attempts for 30 minutes.

2. Patch/Upgrade Steps:

  • Monitor the Totara security advisory page (https://totara.community/mod/forum/view.php?id=1140) closely. The current fix path is unknown; do NOT downgrade to an older version as all versions ≤19.1.5 are vulnerable.
  • If a new version (e.g., v19.1.6) is released, apply it immediately after testing in staging.
  • As a temporary measure, consider migrating to a forked or compatible LMS to guarantee patched code.

3. Long-Term Hardening:

  • Enforce Multi-Factor Authentication (MFA) on all accounts, especially administrators. Use Totara's SSO integration with Azure AD or Okta to delegate authentication outside the vulnerable form.
  • Regularly audit access logs for any force_login or nologin=0 query strings.
  • Subscribe to CISA KEV updates; if this CVE is later added, prioritize remediation at the "Exploited in the Wild" level.
  • Conduct quarterly credential-stuffing simulation tests (e.g., using custom scripts) to verify rate-limiting and lockout behavior.
  • Segment the LMS from the corporate domain to prevent lateral movement if credentials are compromised.

References

  1. NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-31282 (CWE-284, CVSS 9.8)
  2. Totara Community Security Forum: https://totara.community/mod/forum/view.php?id=1140 (monitor for pending patch advisory)
  3. FIRST EPSS Score: https://www.first.org/epss/ — CVE-2026-31282 (EPSS 0.00390, 31.7% percentile)
  4. MITRE ATT&CK — T1190 Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
  5. CISA Known Exploited Vulnerabilities Catalog: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (CVE-2026-31282 currently NOT listed; monitor for updates)

Known Threat Actor Campaigns: As of this publication, there is no public evidence of active in-the-wild exploitation of CVE-2026-31282. However, the EPSS score percentile (31.7%) indicates that the vulnerability is being actively analyzed and scanned by threat intelligence platforms, suggesting that automated exploit development and scanning are likely underway. Enterprise teams should treat this as a high-risk unpatched vulnerability and respond accordingly.

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-31282/ · 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.