Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach public Piwigo gallery with ratings enabled
-
DeliveryCall pwg.images.filteredSearch.create with crafted ratings[]
-
ExploitOpen returned search URL to execute query
-
ExecutionObserve error/time-based responses
-
ImpactExtract database contents
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the Piwigo rating feature to be ENABLED (the vulnerable rating-bound filter clause is only built when rating is enabled) and the pwg.images.filteredSearch.create web API endpoint to be reachable by anonymous guests - both true in typical public gallery deployments. No authentication (PR:N), no user interaction (UI:N), and no non-default client configuration are needed beyond ratings being on. The attack targets Piwigo 17.0.0beta1 and all earlier versions. The primary limiting factor is that galleries with ratings disabled are not exploitable, and that as of this review no fixed version has been shipped so patched binaries are not yet distributable (mitigation is disabling ratings or applying the upstream commits). |
| Impact | The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N, base 9.1 Critical) describes a network-reachable, unauthenticated, low-complexity SQL injection requiring no user interaction - a genuinely dangerous combination. The technical detail supports the network/unauthenticated claims: an anonymous guest calls the pwg.images.filteredSearch.create web API and then opens the returned search URL. I assess the I:H component as overstated: the flaw lives in the upper-bound concatenation of a rating value inside a SELECT WHERE clause ( |
| Exploit ScenarioDerived | An unauthenticated attacker who can reach a public Piwigo gallery (17.0.0beta1 or earlier) with the rating feature enabled sends a pwg.images.filteredSearch.create request containing a crafted ratings[] value; the raw value is stored in the search rules and concatenated as the SQL upper rating bound. The attacker then opens the returned search URL to trigger the query, using error-based or time-based responses to extract database contents such as user credentials and session data. No public exploit code is identified at time of analysis, but the fix commits are public and the attack requires no authentication or user interaction. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
Unauthenticated SQL injection in Piwigo 17.0.0beta1 and earlier lets anonymous guests read arbitrary database contents through the public photo-search flow whenever the rating feature is enabled. An attacker calls pwg.images.filteredSearch.create with a crafted ratings[] value and then opens the returned search URL; because only the lower rating bound is integer-cast while the raw upper bound is concatenated directly into the SQL filter, error-based and blind extraction - plus database-dependent time delays - become possible over the network with no credentials or user interaction. The independent assessment rates confidentiality impact as High with no Integrity or Availability impact, and upstream fixes exist only as commits (9755d88, aede490) with no released patched version identified at time of analysis; no public exploit code or confirmed active exploitation was identified.
RemediationAI
No vendor-released patched version has been identified; the available fix is upstream commits 9755d88edf38b94bafdedb0b3aba7304a94e2e5c and aede490a0b3a6c246f1f4689ca86c8fee377a7ae, which apply intval() to the rating upper bound and add '^\d+$' validation of the ratings[] parameter respectively - administrators are advised to apply these commits or wait for the next tagged Piwigo release that incorporates them, and to monitor the advisory at https://github.com/Piwigo/Piwigo/security/advisories/GHSA-hq29-8hhx-5jwc. Until a patched build is available, the most effective compensating control is to disable the rating feature entirely (Administration → Configuration → Options → rating/photo-rating setting), which prevents the vulnerable rating-bound filter clause from ever being constructed; the trade-off is loss of user rating functionality across the gallery. If ratings must remain enabled, restrict or block anonymous access to ws.php and specifically to the pwg.images.filteredSearch.create method at the reverse proxy or WAF layer (for example, reject unauthenticated POSTs to ws.php with method=pwg.images.filteredSearch.create, or block requests whose ratings[] values are not strictly numeric), accepting that this may break legitimate guest search features; coordinate any such rule carefully because the method name is also used by normal client search workflows. Requiring authentication for the web-service endpoint reduces exposure but changes gallery behaviour for anonymous visitors and may break integrations.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Piwigo is a PHP-based open-source photo gallery. The vulnerability is a classic CWE-89 SQL injection arising from asymmetric input handling in the search filter builder. In include/functions_search.inc.php, the rating filter clause was constructed as '(rating_score >= '.(intval($r)-1).' AND rating_score < '.$r.')' - the lower bound is passed through intval(), but the upper bound '$r' is concatenated raw into the SQL string. The attacker-controlled value originates in include/ws_functions/pwg.images.php, where the ws_images_filteredSearch_create() web-service handler accepts a ratings[] array parameter, stores it unvalidated in the persisted search rules, and returns a search URL; opening that URL triggers the vulnerable clause construction in the public search flow. The upstream fix (commit 9755d88) wraps the upper bound in intval(), and a second commit (aede490) adds a '^\d+$' preg_match validation loop in the web-service handler that rejects non-numeric ratings values with WS_ERR_INVALID_PARAM. The affected component is versioned generically as cpe:2.3:a:piwigo:piwigo:*:*:*:*:*:*:*:*, i.e. all Piwigo versions up to and including 17.0.0beta1. Exploitation requires the rating feature to be enabled so that the rating-bound filter clause is reached, and the anonymous-reachable pwg.images.filteredSearch.create API to be exposed - both default conditions in typical public galleries.
Know when Piwigo gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Unauthenticated network SQLi (PR:N/AV:N/AC:L) in a SELECT WHERE clause yields high-confidence data extraction (C:H) but no demonstrated write, so I:N; time-delay is not a durable availability impact (A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Piwigo is a full featured open source photo gallery application for the web. In 17.0.0beta1 and earlier, when rating is enabled, an unauthenticated guest can call pwg.images.filteredSearch.create with a crafted ratings[] value and then open the returned search URL. include/ws_functions/pwg.images.php stores the unvalidated value in the search rules, and include/functions_search.inc.php integer-casts only the lower rating bound while concatenating the raw value as the SQL upper bound. This allows error-based or blind extraction of database information and database-dependent time delays through the public search flow. No fixed version is available as of this review.
Technical POC Analysis
CWE-89: SQL Injection.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Piwigo 17.0.0beta1 and earlier, whenever the photo-rating feature is enabled, can be made to hand over arbitrary database contents to anyone who can reach the site's public photo-search page. No credentials or user interaction are required, and the vendor has so far provided only source-code commits rather than a packaged release, leaving organizations that run Piwigo for public galleries, digital asset libraries or intranet image portals exposed while they wait. Because the data at risk sits in the same database as Piwigo's user accounts and site configuration, leadership should assume any sensitive or regulated content stored there is exposed until the vulnerable rating path is closed.
No vendor-released patch identified at time of analysis (upstream source fixes exist only as commits 9755d88 and aede490). Interim mitigations: disable the photo-rating feature to remove the vulnerable code path; if ratings must remain enabled, block or restrict the pwg.images.filteredSearch.create endpoint at the WAF or reverse proxy, rate-limit the photo-search flow, monitor logs for crafted ratings[] parameters and the search URLs they generate, and run Piwigo against a least-privilege database account so any extraction is bounded to what that account can read.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
Directory traversal vulnerability in install.php in Piwigo before 2.4.7 allows remote attackers to read and delete arbit
Cross-site request forgery (CSRF) vulnerability in the LocalFiles Editor plugin in Piwigo before 2.4.7 allows remote att
SQL injection vulnerability in the administrative backend in Piwigo through 2.9.1 allows remote users to execute arbitra
Piwigo 13.6.0 is vulnerable to SQL Injection via in the "profile" function. Rated critical severity (CVSS 9.8), this vul
Piwigo 13.6.0 is vulnerable to SQL Injection via /admin/permalinks.php. Rated critical severity (CVSS 9.8), this vulnera
Piwigo 11.4.0 allows admin/user_list_backend.php order[0][dir] SQL Injection. Rated critical severity (CVSS 9.8), this v
admin.php?page=account_billing in Piwigo 2.9.5 has XSS via the vat_number, billing_name, company, or billing_
admin.php?page=notification_by_mail in Piwigo 2.9.5 has XSS via the nbm_send_html_mail, nbm_send_mai
Cross-site request forgery (CSRF) vulnerability in Piwigo through 2.9.1 allows remote attackers to hijack the authentica
Cross-site request forgery (CSRF) vulnerability in Piwigo through 2.9.1 allows remote attackers to hijack the authentica
Cross-site request forgery (CSRF) vulnerability in Piwigo through 2.9.1 allows remote attackers to hijack the authentica
admin/configuration.php in Piwigo 2.9.2 has CSRF. Rated high severity (CVSS 8.8), this vulnerability is remotely exploit
EUVD-2026-87136
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB