CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-5326

CVE-2026-5326: Insecure Direct Object Reference (IDOR) in SourceCodester Leave Application System

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 28, 2026·5 min read·5 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can bypass administrative access boundaries to read sensitive employee records and administrative data by manipulating the numeric ID parameter inside '/index.php?page=manage_user'.

An Insecure Direct Object Reference (IDOR) vulnerability exists in SourceCodester Leave Application System 1.0 within the User Information Handler component. The application processes client-supplied database identifiers via URL parameters without executing proper authorization checks or session validation. This allows remote, unauthenticated attackers to view sensitive administrative and employee records by altering the 'id' parameter.

Vulnerability Overview

The SourceCodester Leave Application System 1.0 is a PHP-based web application designed to manage employee time-off requests, staff records, and administrative duties. The system relies on an SQLite3 database backend to retrieve and store records. Due to a design oversight in the user access architecture, the dynamic routing system exposes an open attack surface to unauthenticated web clients.

This vulnerability is cataloged as CVE-2026-5326. It centers on the User Information Handler loaded via the routing path '/index.php?page=manage_user'. The component is designed to show profile details of specific accounts based on the value passed to the 'id' query parameter.

Because the system is deployed with public-facing administrative routes, the lack of session protection on these pathways directly exposes private user records. Any remote actor can issue request parameters targeting specific database indices, resulting in unauthorized data exposure.

Root Cause Analysis

The underlying security flaw is classified under CWE-639 (Authorization Bypass Through User-Controlled Key) and CWE-285 (Improper Authorization). The failure occurs because the web application's design does not couple database lookups to the server-side session authentication tokens of the active request.

When a request containing the parameter 'id' is directed to the application, the backend retrieves the value directly from the global HTTP '$_GET' array. The software then uses this untrusted integer value to construct a query and locate the corresponding row within the SQLite3 database.

The application code lacks any condition to determine if the active session possesses the permission to access the requested profile. It does not verify whether the requesting user is an administrator, nor does it confirm if the request matches the session owner's ID. This complete authorization void allows unauthenticated users to enumerate database records step-by-step.

Code Analysis

The vulnerable code path highlights the mechanism where client inputs flow into raw queries without security validation filters. The dynamic template engine processes parameters without verifying authorization states.

// Vulnerable Implementation
// Location: index.php / manage_user.php
 
if (isset($_GET['id'])) {
    // Input is fetched directly from the client without verification
    $user_id = $_GET['id']; 
    
    // The application queries the SQLite3 database using the unsanitized ID
    $query = "SELECT * FROM users WHERE id = :id";
    $stmt = $db->prepare($query);
    $stmt->bindValue(':id', $user_id, SQLITE3_INTEGER);
    $result = $stmt->execute();
    
    // Fetch the sensitive user record and render it
    $user_data = $result->fetchArray(SQLITE3_ASSOC);
    
    // Security Flaw: There is no check to verify if the requester has permission to view $user_id
}

To repair this vulnerability, developers must implement session ownership validation controls. The following patch verifies the active session identifier and checks the user's role before querying the database engine.

// Patched Implementation
// Location: index.php / manage_user.php
 
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
 
// Step 1: Enforce active session authentication
if (!isset($_SESSION['user_id'])) {
    http_response_code(401);
    exit("Access Denied: Unauthenticated access attempt.");
}
 
if (isset($_GET['id'])) {
    $requested_id = intval($_GET['id']);
    $current_user_id = intval($_SESSION['user_id']);
    $current_user_role = $_SESSION['role'] ?? 'employee';
 
    // Step 2: Ensure session owner matching or administrative privilege
    if ($requested_id !== $current_user_id && $current_user_role !== 'admin') {
        http_response_code(403);
        exit("Access Denied: You do not have permissions to access this resource.");
    }
 
    // Step 3: Secure database query execution after authorization success
    $query = "SELECT * FROM users WHERE id = :id";
    $stmt = $db->prepare($query);
    $stmt->bindValue(':id', $requested_id, SQLITE3_INTEGER);
    $result = $stmt->execute();
    $user_data = $result->fetchArray(SQLITE3_ASSOC);
}

Exploitation Methodology

Exploiting this flaw is highly reliable and requires no active pre-conditions like session state hijacking or credential guessing. The attack vector consists entirely of changing the 'id' parameter in HTTP GET requests.

An attacker begins by sending a standard request to retrieve a valid URL path. The original query is structured to access a specific profile. The attacker alters the numeric value of the 'id' parameter to targeted numbers like '1', which represents the system administrator account.

The SQLite3 database processes the query and returns the record for the administrator profile. This profile is rendered by the template, leaking administrative usernames, email details, and operational records. Attackers can automate the extraction process by executing sequential loops that query multiple IDs.

Impact Assessment

The concrete security impact of CVE-2026-5326 is restricted to a complete compromise of read confidentiality. The vulnerability does not provide an direct channel to write data, modify configuration files, or execute binary code on the hosting server system.

However, the lack of data integrity controls does not diminish the overall severity. Threat actors can harvest employee emails, full names, and organizational hierarchies. This information is valuable for organizing credential harvesting attacks and targeted social engineering schemes.

The vulnerability carries a CVSS base score of 5.3 under CVSS v3.1 and 6.9 under CVSS v4.0. The ease of remote execution and the zero required privileges make this flaw an attractive target for automated scraping campaigns.

Remediation & Secure Coding Guidance

Since there is no vendor patch available for this software, administrators must manually review the code files to correct the logic. Implementing session-based query limits is the most effective approach to remediate the vulnerability.

Every parameter-driven query inside the user information templates must run through an validation block. This block compares the parameter against the user's session variables. If the request comes from an external user or does not match the active session, the application must reject the transaction and log an authentication warning.

Additional defense measures include wrapping database lookups in a secure routing filter. Replacing raw database primary keys with non-sequential identifiers like Universally Unique Identifiers (UUIDs) also reduces the success rate of automated parameter enumeration attacks.

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
EPSS Probability
0.40%
Top 67% most exploited

Affected Systems

SourceCodester Leave Application System 1.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
Leave Application System
SourceCodester
1.0None
AttributeDetail
CWE IDCWE-639 / CWE-285
Attack VectorNetwork (Remote)
Required PrivilegesNone (Unauthenticated)
CVSS v4.0 Base Score6.9 (Medium)
EPSS Score0.00404
CISA KEV StatusNot Listed
Exploit StatusProof-of-Concept Publicly Available

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1020Automated Exfiltration
Exfiltration
T1548Abuse Elevation Control Mechanism
Privilege Escalation
CWE-639
Authorization Bypass Through User-Controlled Key

The system fails to check whether the actor is authorized to access the specific object referenced by a user-controlled key.

Known Exploits & Detection

Medium WriteupOriginal writeup detailing the discovery and manual confirmation of the IDOR vulnerability.

Vulnerability Timeline

Initial disclosure of the IDOR vulnerability by security researcher Hemant Raj Bhati.
2026-03-16
Official CVE record published by VulDB.
2026-04-02
VulDB entry cataloged (VDB-354657) and NVD indexation initiated.
2026-04-02
CVE record details updated on CVE.org.
2026-04-03
Finalized record modification at NVD.
2026-06-17

References & Sources

  • [1]Insecure Direct Object Reference (IDOR) in Leave Application System PHP SQLite3
  • [2]VulDB Advisory Entry
  • [3]VulDB CTI Indicators Feed
  • [4]VulDB Submission Record
  • [5]Product Source Portal
  • [6]CVE.org Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•3 days ago•GHSA-7PPR-R889-MCF2
7.5

GHSA-7PPR-R889-MCF2: Unbounded WebSocket Message Aggregation in http4s-blaze-server leads to Denial of Service

An uncontrolled resource consumption vulnerability exists in the Scala-based http4s-blaze-server package of the http4s/blaze library. The vulnerability allows remote, unauthenticated attackers to cause an Out of Memory Error (OOM) and JVM crash by streaming a continuous sequence of small or empty WebSocket continuation frames with the FIN bit set to 0. This bypasses typical payload size checks because of the JVM's per-object allocation overhead, leading to rapid heap exhaustion with minimal network bandwidth.

Alon Barad
Alon Barad
7 views•5 min read
•3 days ago•GHSA-95CV-R8X4-VH75
7.6

GHSA-95cv-r8x4-vh75: Path Traversal Vulnerability in OpenList Batch Rename Handler

A critical path traversal vulnerability has been identified in the OpenList Go-based backend package. The vulnerability exists within the batch rename handler because the application does not validate the source filename parameter before constructing filesystems paths. This omission allows authenticated users to escape their designated directory and rename files in sibling paths.

Amit Schendel
Amit Schendel
10 views•7 min read
•3 days ago•GHSA-P6PH-3JX2-3337
4.3

GHSA-P6PH-3JX2-3337: Horizontal Privilege Escalation and Metadata Information Disclosure via Bleve Search in OpenList

OpenList version 4.2.3 and prior is vulnerable to an authorization bypass and metadata leakage. When configured with the Bleve search engine backend, OpenList fails to perform separator-aware path matching when validating tenant containment. This allows authenticated users to access sibling directories sharing similar name prefixes. Furthermore, the search backend returns unfiltered global result counts, leaking existence verification data of unauthorized files via side-channel analysis.

Amit Schendel
Amit Schendel
8 views•5 min read
•3 days ago•GHSA-86CX-WWF4-PHQ4
6.5

GHSA-86cx-wwf4-phq4: Path Prefix Confusion Authorization Bypass in OpenList

An authorization bypass vulnerability in OpenList version 4.2.3 and below allows authenticated users to read arbitrary files outside of their designated base directories due to an insecure path prefix check using Go's standard strings.HasPrefix function.

Amit Schendel
Amit Schendel
8 views•6 min read
•3 days ago•CVE-2026-16584
7.0

CVE-2026-16584: Security Policy Bypass in AWS API MCP Server via Startup Initialization Failure

A security policy bypass vulnerability exists in the AWS API MCP Server (awslabs-aws-api-mcp-server) from version 0.2.13 through 1.3.46. When the server fails to load the read-only operations index during startup (due to transient network failures, file permission issues, or other exceptions), it logs a warning but continues running in an insecure, degraded state. Under this condition, the security policy engine fails open, silently skipping all subsequent security checks and consent prompts for the lifetime of the process. This permits unauthorized mutating AWS CLI commands to execute via indirect prompt injection attacks.

Amit Schendel
Amit Schendel
12 views•7 min read
•3 days ago•GHSA-6V4M-FW66-8R4X
6.5

GHSA-6V4M-FW66-8R4X: Path Disclosure and Shell Expansion Bypass in Shescape

An incomplete escaping vulnerability in the npm package 'shescape' allows unauthenticated users to trigger dynamic shell expansions, absolute path disclosure, and command block break-outs on Unix and Windows systems.

Alon Barad
Alon Barad
6 views•7 min read