GHSA-3735-5339-xfwx: Poweradmin has Host Header Injection in OIDC redirect_uri, SAML ACS/SLO URL, and Logout Redirect Construction.
Summary
Poweradmin v4.3.2 uses the attacker-controlled HTTP_HOST request header as the
authoritative source for building callback URLs in its OIDC, SAML, and logout
authentication flows without any validation. An unauthenticated attacker can poison
the redirect_uri sent to the Identity Provider, causing the IdP to redirect the
victim's authorization code to an attacker-controlled server - resulting in full
account takeover with no credentials required.
Three independent code paths are affected:
- Primary (Critical): OidcService::getCallbackUrl() - redirect_uri poisoning
- Secondary (High): SamlConfigurationService::getBaseUrl() - SAML ACS/SLO URL poisoning
- Tertiary (Medium): LogoutController::getBaseUrl() - post-logout redirect poisoning
Details
*Root Cause*
The application constructs absolute URLs dynamically from HTTP_HOST rather than
from a trusted configured base URL. The header is fully client-controlled and is not
validated before use in any authentication flow.
Poweradmin's own codebase contains the correct pattern -
DocsController::getValidatedHost() (line 244) calls isValidHostname() before
using the value - but this was never applied to authentication flows.
Primary: lib/Application/Service/OidcService.php (~line 460)
private function getCallbackUrl(): string
{
$scheme = $this->detectScheme();
// HTTP_HOST taken directly with zero validation
$host = $this->request->getServerParam('HTTP_HOST', 'localhost');
$basePrefix = $this->configManager->get('interface', 'base_url_prefix', '');
return $scheme . '://' . $host . $basePrefix . '/oidc/callback';
}
HTTP_HOST is embedded verbatim as redirect_uri in the OAuth 2.0 authorization
request sent to the IdP. HTTP_X_FORWARDED_PROTO is similarly used unvalidated
for scheme detection.
Secondary: lib/Application/Service/SamlConfigurationService.php (~line 134)
private function getBaseUrl(): string
{
$configuredBaseUrl = $this->configManager->get('interface', 'base_url', '');
if (!empty($configuredBaseUr
Details
Original advisory: https://github.com/advisories/GHSA-3735-5339-xfwx
Exploitation outlook
EPSS (FIRST.org) estimates each CVE’s probability of exploitation in the next 30 days — here is the CSIRTS.com read on those numbers.
- Low exploitation riskCVE-2026-545880.31% 30-day exploitation probability — currently an unlikely target, but scores change as exploit code circulates. Riskier than 24% of all scored CVEs.
Referenced CVEs
| CVE | CSIRTS overview | External |
|---|---|---|
| CVE-2026-54588 | coverage & exploitation status | NVD · CVE.org |
More from GitHub Security Advisories
- mediumGHSA-jr6p-8pjj-mfx6: Capsule has an incomplete fix of CVE-2026-22872: TenantResource RawItems and Generators s…2026-07-31
- mediumGHSA-68cj-mvg9-rgm2: Capsule: CapsuleConfiguration NodeMetadata regex fields lack webhook validation, allowing…2026-07-31
- mediumGHSA-ff84-5f28-78qj: re2: Out-of-bounds heap read in `exec`/`test`/`match` via attacker-influenced `lastIndex`…2026-07-31
- mediumGHSA-6hxr-mr5r-9836: re2: Global `String.prototype.match` with an empty-matchable pattern never advances → inf…2026-07-31
- mediumGHSA-x83g-979r-f5fh: Sylius Mollie Plugin has unauthenticated IDOR that leaks order token and customer PII2026-07-31