CVE-2025-62617: Admidio/admidio SQL Injection Vulnerability

HIGH
Advisory Identifier: GHSA-2v5m-cq9w-fc33
CVSS 7.2
CWE-89
Published
Advisory Summary

CVE-2025-62617 is a HIGH (CVSS 7.2) sql injection vulnerability (CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')) affecting Admidio/admidio libraries in the Packagist ecosystem. The issue involves admidio vulnerable to authenticated sql injection in member assignment functionality. Remediation is available by upgrading affected packages to version 4.3.17.

CVE-2025-62617 at a Glance

CVE Identifier CVE-2025-62617
GHSA Identifier GHSA-2v5m-cq9w-fc33
Severity HIGH
CVSS v3.1 Base Score 7.2
CWE Classification CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
Affected Product Admidio/admidio
Package Ecosystem Packagist
Published Date
Last Updated

Security Impact

CVSS: 7.2

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required High (PR:H)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity High (I:H)
Availability High (A:H)

How to Fix CVE-2025-62617

To remediate this vulnerability, upgrade all affected Admidio/admidio dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

admidio/admidio fixed: 4.3.17
Upgrade admidio/admidio to 4.3.17
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for admidio/admidio

How to Check if You Are Affected

To determine whether your application is affected by CVE-2025-62617, inspect your project dependencies for Admidio/admidio:

inspect dependencies for admidio/admidio

Analyze the terminal output to locate any version of Admidio/admidio in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 4.3.17), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection'), where the product constructs all or part of an sql command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended sql command when it is sent to a downstream component. without sufficient removal or quoting of sql syntax in user-controllable inputs, the generated sql query can cause those inputs to be interpreted as sql instead of ordinary user data. In Admidio/admidio, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Summary An authenticated SQL injection vulnerability exists in the member assignment data retrieval functionality of Admidio. Any authenticated user with permissions to assign members to a role (such as an administrator) can exploit this vulnerability to execute arbitrary SQL commands. This can lead to a full compromise of the application's database, including reading, modifying, or deleting all data. The vulnerability is present in the latest version, 4.3.16. ### Details The vulnerability is located in the `adm_program/modules/groups-roles/members_assignment_data.php` script. This script handles an AJAX request to fetch a list of users for role assignment. The `filter_rol_uuid` GET parameter is not properly sanitized before being used in a raw SQL query. **File:** `adm_program/modules/groups-roles/members_assignment_data.php` ```php // ... // The parameter is retrieved from the GET request without sufficient sanitization for SQL context. $getFilterRoleUuid = admFuncVariableIsValid($_GET, 'filter_rol_uuid', 'string'); $getMembersShowAll = admFuncVariableIsValid($_GET, 'mem_show_all', 'bool', array('defaultValue' => false)); // ... $filterRoleCondition = ''; if ($getMembersShowAll) { $getFilterRoleUuid = 0; } else { // show only members of current organization if ($getFilterRoleUuid !== '') { // VULNERABLE CODE: $getFilterRoleUuid is directly concatenated into the query string. $filterRoleCondition = ' AND rol_uuid = \''.$getFilterRoleUuid . '\''; } } // ... // The vulnerable $filterRoleCondition is then used inside a subselect. $sqlSubSelect = '(SELECT COUNT(*) AS count_this FROM '.TBL_MEMBERS.' INNER JOIN '.TBL_ROLES.' ON rol_id = mem_rol_id INNER JOIN '.TBL_CATEGORIES.' ON cat_id = rol_cat_id WHERE mem_usr_id = usr_id AND mem_begin <= \''.DATE_NOW.'\' AND mem_end > \''.DATE_NOW.'\' '.$filterRoleCondition.' AND rol_valid = true AND cat_name_intern <> \'EVENTS\' AND cat_org_id = '.$gCurrentOrgId.')'; // ... ``` As shown above, the value of `$getFilterRoleUuid` is directly concatenated into the `$filterRoleCondition` variable, which is then embedded within a larger SQL query (`$sqlSubSelect`). This allows an attacker to break out of the string literal and inject arbitrary SQL commands. ### PoC (Proof of Concept) **Prerequisites:** 1. A running instance of Admidio (tested on version 4.3.16). 2. An authenticated user session with permissions to assign members to a role (e.g., the default 'admin' user). **Execution:** The vulnerability can be triggered by manipulating the `filter_rol_uuid` parameter in the request to `/adm_program/modules/groups-roles/members_assignment_data.php`. Due to the large number of parameters, the easiest way to reproduce this is by capturing a legitimate request and replaying it with `sqlmap`. 1. Log in to Admidio as an administrator. 2. Navigate to `Groups / Roles`. 3. Click the "Assign members" icon for any existing role. 4. Using a web proxy like Burp Suite, intercept the GET request made to `/adm_program/modules/groups-roles/members_assignment_data.php`. 5. Save the entire raw request to a text file (e.g., `admidio_request.txt`). 6. Run the following `sqlmap` command to confirm the time-based blind SQL injection: ```bash sqlmap -r /path/to/admidio_request.txt -p filter_rol_uuid --technique=T --dbms=mysql --current-db ``` **Result:** `sqlmap` will successfully identify and exploit the time-based blind SQL injection vulnerability. ``` --- Parameter: filter_rol_uuid (GET) Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: role_uuid=...&filter_rol_uuid=' AND (SELECT 3332 FROM (SELECT(SLEEP(5)))vqnl) AND 'ENdG'='ENdG&... --- [INFO] the back-end DBMS is MySQL back-end DBMS: MySQL >= 5.0.12 [INFO] fetching current database [INFO] retrieved: admidio current database: 'admidio' ``` This confirms that an attacker can execute arbitrary SQL queries and extract information from the database.

CVE-2025-62617 Affected Admidio/admidio Versions

1 component(s)
Fixed Versions:
4.3.17
Product / Package Ecosystem Affected Versions Fixed Version
admidio/admidio
Packagist
< 4.3.17
4.3.17

References

Frequently Asked Questions

What is CVE-2025-62617?
CVE-2025-62617 is a security vulnerability in Admidio/admidio involving Admidio Vulnerable to Authenticated SQL Injection in Member Assignment Functionality under CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection').
Which Admidio/admidio versions are affected?
Affected versions include releases prior to 4.3.17 across affected packages: admidio/admidio.
What version fixes CVE-2025-62617?
Upgrading to 4.3.17 (or the latest patched release for your respective branch) resolves the vulnerability.
Is admidio/admidio affected?
Yes, admidio/admidio is affected in releases prior to 4.3.17. Upgrade your dependency to 4.3.17 or later.
What is the CVSS score of CVE-2025-62617?
CVE-2025-62617 has a CVSS v3.1 base score of 7.2 (HIGH) with vector string CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H.
What CWE is associated with CVE-2025-62617?
CVE-2025-62617 is classified under CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') (The product constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component. Without sufficient removal or quoting of SQL syntax in user-controllable inputs, the generated SQL query can cause those inputs to be interpreted as SQL instead of ordinary user data.).
How can I check Packagist dependencies for CVE-2025-62617?
Run the dependency tree command: 'inspect dependencies for admidio/admidio'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-2v5m-cq9w-fc33",
  "modified" : "2025-10-23T17:40:23Z",
  "published" : "2025-10-22T16:46:03Z",
  "aliases" : [ "CVE-2025-62617" ],
  "summary" : "Admidio Vulnerable to Authenticated SQL Injection in Member Assignment Functionality",
  "details" : "### Summary\n\nAn authenticated SQL injection vulnerability exists in the member assignment data retrieval functionality of Admidio. Any authenticated user with permissions to assign members to a role (such as an administrator) can exploit this vulnerability to execute arbitrary SQL commands. This can lead to a full compromise of the application's database, including reading, modifying, or deleting all data. The vulnerability is present in the latest version, 4.3.16.\n\n### Details\n\nThe vulnerability is located in the `adm_program/modules/groups-roles/members_assignment_data.php` script. This script handles an AJAX request to fetch a list of users for role assignment. The `filter_rol_uuid` GET parameter is not properly sanitized before being used in a raw SQL query.\n\n**File:** `adm_program/modules/groups-roles/members_assignment_data.php`\n```php\n// ... \n// The parameter is retrieved from the GET request without sufficient sanitization for SQL context.\n$getFilterRoleUuid = admFuncVariableIsValid($_GET, 'filter_rol_uuid', 'string');\n$getMembersShowAll = admFuncVariableIsValid($_GET, 'mem_show_all', 'bool', array('defaultValue' => false));\n\n// ... \n$filterRoleCondition = '';\nif ($getMembersShowAll) {\n    $getFilterRoleUuid = 0;\n} else {\n    // show only members of current organization\n    if ($getFilterRoleUuid !== '') {\n        // VULNERABLE CODE: $getFilterRoleUuid is directly concatenated into the query string.\n        $filterRoleCondition = ' AND rol_uuid = \\''.$getFilterRoleUuid . '\\'';\n    }\n}\n\n// ...\n// The vulnerable $filterRoleCondition is then used inside a subselect.\n$sqlSubSelect = '(SELECT COUNT(*) AS count_this\n                    FROM '.TBL_MEMBERS.'\n              INNER JOIN '.TBL_ROLES.'\n                      ON rol_id = mem_rol_id\n              INNER JOIN '.TBL_CATEGORIES.'\n                      ON cat_id = rol_cat_id\n                   WHERE mem_usr_id  = usr_id\n                     AND mem_begin  <= \\''.DATE_NOW.'\\'\n                     AND mem_end     > \\''.DATE_NOW.'\\'\n                         '.$filterRoleCondition.'\n                     AND rol_valid = true\n                     AND cat_name_intern <> \\'EVENTS\\'\n                     AND cat_org_id = '.$gCurrentOrgId.')';\n// ...\n```\n\nAs shown above, the value of `$getFilterRoleUuid` is directly concatenated into the `$filterRoleCondition` variable, which is then embedded within a larger SQL query (`$sqlSubSelect`). This allows an attacker to break out of the string literal and inject arbitrary SQL commands.\n\n### PoC (Proof of Concept)\n\n**Prerequisites:**\n1.  A running instance of Admidio (tested on version 4.3.16).\n2.  An authenticated user session with permissions to assign members to a role (e.g., the default 'admin' user).\n\n**Execution:**\nThe vulnerability can be triggered by manipulating the `filter_rol_uuid` parameter in the request to `/adm_program/modules/groups-roles/members_assignment_data.php`. Due to the large number of parameters, the easiest way to reproduce this is by capturing a legitimate request and replaying it with `sqlmap`.\n\n1.  Log in to Admidio as an administrator.\n2.  Navigate to `Groups / Roles`.\n3.  Click the \"Assign members\" icon for any existing role.\n4.  Using a web proxy like Burp Suite, intercept the GET request made to `/adm_program/modules/groups-roles/members_assignment_data.php`.\n5.  Save the entire raw request to a text file (e.g., `admidio_request.txt`).\n6.  Run the following `sqlmap` command to confirm the time-based blind SQL injection:\n\n```bash\nsqlmap -r /path/to/admidio_request.txt -p filter_rol_uuid --technique=T --dbms=mysql --current-db\n```\n\n**Result:**\n`sqlmap` will successfully identify and exploit the time-based blind SQL injection vulnerability.\n\n```\n---\nParameter: filter_rol_uuid (GET)\n    Type: time-based blind\n    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)\n    Payload: role_uuid=...&filter_rol_uuid=' AND (SELECT 3332 FROM (SELECT(SLEEP(5)))vqnl) AND 'ENdG'='ENdG&...\n---\n[INFO] the back-end DBMS is MySQL\nback-end DBMS: MySQL >= 5.0.12\n[INFO] fetching current database\n[INFO] retrieved: admidio\ncurrent database: 'admidio'\n```\nThis confirms that an attacker can execute arbitrary SQL queries and extract information from the database.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "admidio/admidio"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "4.3.17"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 4.3.16"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/Admidio/admidio/security/advisories/GHSA-2v5m-cq9w-fc33"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2025-62617"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/Admidio/admidio/commit/fde81ae869e88a3cf42201f2548d57df785a37cb"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/Admidio/admidio"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-89" ],
    "severity" : "HIGH",
    "github_reviewed" : true,
    "github_reviewed_at" : "2025-10-22T16:46:03Z",
    "nvd_published_at" : "2025-10-22T22:15:34Z"
  }
}