{"id":"CVE-2026-71288","summary":"Koha SQL Injection via order_by and {order}_ovalue Parameters in guided_reports.pl","details":"Koha's guided report builder (reports/guided_reports.pl) reads the `order_by` CGI parameter and, for each value, a dynamically-named `{order}_ovalue` parameter, and concatenates both directly into an SQL ORDER BY clause with no allowlist or validation: `my @order_by = $input-\u003emulti_param('order_by'); foreach my $order (@order_by) { my $value = $input-\u003eparam($order . \"_ovalue\"); $query_orderby = \" ORDER BY $order $value\"; }`. The resulting string is appended verbatim to the final query in C4::Reports::Guided (`$query .= $orderby;`) with no escaping. Since ORDER BY columns cannot be bound via prepared-statement placeholders, this requires an explicit allowlist, which does not exist. Any staff account with the low-privilege create_reports or execute_reports permission (commonly granted to non-admin library staff) can perform time-based blind SQL injection against the Koha database, which stores patron PII and staff/LDAP credentials.","modified":"2026-08-07T03:47:04.622508565Z","published":"2026-08-05T12:26:34.034Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71288.json","cna_assigner":"TuranSec","cwe_ids":["CWE-89"]},"references":[{"type":"WEB","url":"https://github.com/Koha-Community/Koha/blob/master/reports/guided_reports.pl"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/71xxx/CVE-2026-71288.json"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-71288"},{"type":"PACKAGE","url":"https://github.com/Koha-Community/Koha"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/koha-community/koha","events":[{"introduced":"0"},{"last_affected":"dacce7d3fc15860d26d06444c1f5c9a2d0d6a4a9"}],"database_specific":{"extracted_events":[{"introduced":"0"},{"last_affected":"26.05.01-1"}],"source":"AFFECTED_FIELD"}}],"versions":["v26.05.01-1","v26.05.01","v26.05.00","v25.11.00","v25.05.00-1","v25.05.00-2","v24.11.00","v24.05.00","v23.11.00","v23.05.00","v22.11.00","v22.05.00","v21.11.00","v21.05.00","v20.11.00","v20.05.00","v19.11.00","v19.05.00","v18.11.00","v18.05.00","v18.05.00-rc1","v17.11.00","v17.05.00","v16.11.00","v16.05.00","v16.05.00-beta","v3.22.00","v3.22.00-beta","v3.20.00","v3.20.00-beta","v3.18.00","v3.18.00-beta","v3.16.00","v3.16.00-rc","v3.16.00-beta","v3.14.00-beta","v3.14.00-alpha2","v3.14.00-alpha1","v3.12.00-beta1","v3.12.00-alpha2","v3.12.00-alpha","v3.08.00","v3.04.00","v3.02.00-beta","v3.02.00-alpha2","v3.02.00-alpha","v3.00.00","v3.00.00-stableRC1","v3.00.00-beta2","v3.00.00-beta","v3.00.00-alpha","R_2-4","R_2-1","R_2-0-0RC1","R_2-0-0pre5","R_2-0-0pre4","R_2-0-0pre3","R_2-0-0pre2","R_2-0-0pre1","R_1-9-3","R_1-9-2","R_1-9-1","R_1-9-0","R_1-3-3","R_1-3-2","R_1-3-1","R_1-3-0","R_1-2-2RC4"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-71288.json"}}],"schema_version":"1.8.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"}]}