SECURITYHIGHCVE-2026-86290

Unauthenticated SQL Injection Hits SourceCodester Online Voting System

CVE-2026-86290: an unauthenticated SQL injection in SourceCodester's Online Voting System via ajax.php's Category parameter, PoC public.

Dylan H.

Security Team

September 8, 2026
3 min read
Unauthenticated SQL Injection Hits SourceCodester Online Voting System

Affected Products

  • SourceCodester Online Voting System 1.0

Executive Summary

A SQL injection vulnerability, CVE-2026-86290, has been disclosed in SourceCodester Online Voting System 1.0. The flaw lives in /voting/ajax.php?action=save_category, where the Category parameter is passed into a database query without sanitization. The vulnerability is remotely exploitable, requires no authentication, and a public exploit is already available.

CVSS 3.1 Score: 7.3 (High)


Vulnerability Overview

AttributeValue
CVE IDCVE-2026-86290
CVSS 3.1 Score7.3 (High)
CVSS 4.0 Score6.9 (Medium)
TypeSQL Injection (CWE-89)
Attack VectorNetwork — remote, unauthenticated
Affected Endpoint/voting/ajax.php?action=save_category
Affected ParameterCategory
Exploit AvailabilityPublic exploit published on GitHub
AssignerVulDB

Affected Versions

ProductAffected VersionsFixed Version
SourceCodester Online Voting System1.0None available

No vendor patch currently exists for this product.


Technical Details

The save_category action within ajax.php accepts a Category value and concatenates it directly into an SQL statement without parameterization or escaping. Because the endpoint enforces no session or authentication check, any remote, unauthenticated visitor can reach it directly.

1. Attacker sends a crafted request to
   /voting/ajax.php?action=save_category with a malicious
   Category parameter
2. No authentication or session cookie is required to reach
   the endpoint
3. The unsanitized value is concatenated directly into the
   backing SQL query
4. A crafted payload allows extraction, modification, or
   deletion of database contents

Exploitation is rated as easy by VulDB, with technical details and a working proof-of-concept exploit already publicly available.

Impact of Successful Exploitation

ImpactDescription
Data ExfiltrationDump voter, candidate, and administrator records from the underlying database
Data TamperingInsert, modify, or delete voting categories and related records
Election IntegrityManipulate category or ballot data used by the voting workflow
Credential ExposureRecovered database credentials could be reused against other systems

Mitigation

  1. Restrict access to /voting/ajax.php at the web server or firewall level until a fix is available.
  2. Rewrite the query behind the save_category action to use prepared statements with bound parameters instead of string concatenation.
  3. Enforce authentication on all ajax.php actions that modify data — save_category currently accepts unauthenticated requests.
  4. Validate the Category input server-side, rejecting unexpected characters and enforcing type/length constraints.
  5. Apply WAF rules to catch common SQLi patterns (UNION SELECT, OR 1=1, quote-based probing) targeting this endpoint.
  6. Minimize database account privileges for the web application to limit the blast radius of a successful injection.

This disclosure follows a broader pattern of SQL injection issues surfacing across SourceCodester products in recent weeks, including a related but distinct flaw in the same vendor's Class and Exam Timetabling System. Administrators running any SourceCodester PHP application should treat unauthenticated ajax.php endpoints as unaudited and likely vulnerable until proven otherwise.


Detection Indicators

IndicatorDescription
Requests to /voting/ajax.php?action=save_category without a valid sessionAuthentication-bypass or injection probing
Quote characters, UNION SELECT, or OR 1=1 in the Category parameter of logged requestsInjection attempt
Unexpected changes to voting category recordsPossible successful exploitation

References