CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-54735

CVE-2026-54735: Critical Server-Side Request Forgery (SSRF) in Prebid Server Bidder Adapters

Alon Barad
Alon Barad
Software Engineer

Jul 29, 2026·6 min read·2 visits

Executive Summary (TL;DR)

Prebid Server versions prior to 4.4.0 fail to validate or sanitize dynamic host and subdomain parameters within several bidder adapters. This allows unauthenticated remote attackers to manipulate the destination of outbound HTTP requests by supplying control characters in OpenRTB requests.

CVE-2026-54735 is a critical Server-Side Request Forgery (SSRF) vulnerability in Prebid Server's bidder adapters, allowing unauthenticated remote attackers to route HTTP requests to arbitrary locations, including internal local host loopbacks and cloud provider metadata endpoints.

Vulnerability Overview

Prebid Server is a cloud-based server-side header bidding platform designed to execute real-time ad auctions. To fetch bids, it communicates with multiple downstream advertising endpoints through dedicated bidder adapters. The application exposes endpoints like /openrtb2/auction to ingest publisher-supplied OpenRTB bid request structures.

Prior to version 4.4.0, the server-side request architecture did not enforce proper security boundaries on parameters provided within the bid request object. Specifically, multiple bidder adapters accepted dynamically configured connection endpoints, subdomains, and hostnames directly from unauthenticated API clients.

Because these adapters trusted client-supplied input without parsing or validation, they allowed attackers to manipulate outbound transport requests. The resulting Server-Side Request Forgery (SSRF) vulnerability, tracked as CVE-2026-54735, carries a CVSS base score of 10.0 and allows unauthenticated remote attackers to control the target authority of internal outbound HTTP calls.

Root Cause Analysis

The root cause of CVE-2026-54735 lies in the handling of dynamic bidder-specific parameters inside the OpenRTB imp[].ext.<bidder> path. Certain bidder adapters require custom routing parameters, such as host, account, zone, endpoint, or pbsHost, to dynamically direct bid queries to partner-specific geographic clusters or instances.

During the request-building phase, affected adapters used Go-based macro expansion or simple string concatenation to construct outbound target URLs. The core implementation invoked functions like macros.ResolveMacros with the user-supplied string directly populated into the template. No validation or character-class restriction was enforced on these string parameters before their insertion into the URL template.

When an adapter processes a template like https://{{.Host}}.bidding-service.com/rtb, the parser expects a simple subdomain. However, if the Host value contains path-traversal characters, query separators, or fragment specifiers, the underlying URL parser redirects the destination authority. Characters like /, ?, #, or @ allow an attacker to redefine the protocol host and path components of the generated URL, completely overriding the intended destination.

Code-Level Patch Analysis

The patch introduced a defense-in-depth approach spanning strict regular expression validation and JSON schema restrictions. The core security logic was added to a new helper module in util/urlutil/security.go to provide deterministic validation of host strings.

package urlutil
 
import "regexp"
 
// safeHostPattern restricts host strings to alphanumeric characters, dots, and hyphens,
// with an optional port number suffix.
var safeHostPattern = regexp.MustCompile(`^[a-zA-Z0-9.-]+(:[0-9]+)?$`)
 
// IsSafeHost evaluates if the input contains only valid domain/IP and port syntax.
// It rejects characters like '/', '?', '#', '@', or protocol schemes.
func IsSafeHost(host string) bool {
	return safeHostPattern.MatchString(host)
}

This validation pattern prevents any injection of control characters. Individual bidder adapters were refactored to intercept input. For example, the AcuityAds adapter in adapters/acuityads/acuityads.go was updated to reject requests before resolving the endpoint macro.

// adapters/acuityads/acuityads.go
func (a *AcuityAdsAdapter) buildEndpointURL(params *openrtb_ext.ExtAcuityAds) (string, error) {
+	if !urlutil.IsSafeHost(params.Host) {
+		return "", &errortypes.BadInput{Message: "Invalid Host"}
+	}
	endpointParams := macros.EndpointTemplateParams{Host: params.Host, AccountID: params.AccountID}
	return macros.ResolveMacros(a.endpoint, endpointParams)
}

Additionally, JSON schemas were updated to block invalid inputs at the initial parsing layer. In static/bidder-params/acuityads.json, the property definition was hardened.

{
  "host": {
    "type": "string",
    "description": "Network host to send request",
    "minLength": 1,
    "pattern": "^[a-zA-Z0-9.-]+(:[0-9]+)?$"
  }
}

Exploitation & Proof-of-Concept Analysis

Exploitation of CVE-2026-54735 is straightforward and does not require active authentication sessions. An attacker targets the /openrtb2/auction endpoint of a vulnerable Prebid Server deployment and submits an OpenRTB payload referencing an affected adapter.

By supplying an input value like evil.com/path?redirect=http://attacker.com# for the host parameter of the acuityads adapter, the resulting outbound request is redirected to the attacker's server. The trailing path .bidding-service.com/rtb is discarded because the fragment character # designates it as a client-side fragment rather than part of the request path.

An alternative variation leverages the vulnerability to query local endpoints or metadata services. If the host parameter is set to localhost:8080, the Prebid Server's outbound HTTP client will target internal administrative services. Because Prebid Server is often deployed inside container environments, this enables host reconnaissance and connection manipulation.

Impact & Risk Assessment

The impact of this vulnerability is critical, leading to a complete compromise of the outbound trust boundary. A successful attack allows unauthenticated remote request forgery against any network service reachable by the Prebid Server instance.

In containerized environments such as Kubernetes or cloud provider instances (AWS, GCP, Azure), the Prebid Server can be leveraged to query the cloud metadata service. On AWS, for instance, targeting 169.254.169.254 could expose sensitive temporary credentials, IAM roles, and configuration parameters if the IMDSv1 interface is enabled.

Furthermore, this vulnerability acts as a pipeline to bypass network perimeters. Attackers can perform internal port scanning, trigger state changes on internal microservices that lack authentication, or exfiltrate local environment information. Due to the wide distribution of Prebid Server in the ad tech ecosystem, the potential exposure across ad exchanges is broad.

Fix Completeness & Limitations

While the introduced validation checks successfully mitigate syntax injection vectors, they are not a complete security solution against all forms of SSRF. The regular expression check ^[a-zA-Z0-9.-]+(:[0-9]+)?$ evaluates the syntax of the input, but it does not resolve the hostname to verify its target network.

Consequently, the patch does not prevent an attacker from supplying an authorized syntax that points to an unauthorized destination. Inputting 127.0.0.1, localhost, or private network addresses (such as 10.0.0.1) is syntactically valid under this regex and will pass the Go and JSON schema checks.

To guarantee complete protection, the application layer checks must be complemented by transport-layer restrictions. Without strict IP blocklisting on the outbound dialer of the Go HTTP client, DNS rebinding attacks and direct internal routing are still possible. Security teams must ensure that outbound network connections are restricted at the operating system or gateway level.

Official Patches

prebidValidation checks on host and subdomain parameters
prebidValidation checks commit

Fix Analysis (1)

Technical Appendix

CVSS Score
10.0/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Affected Systems

Prebid Server

Affected Versions Detail

Product
Affected Versions
Fixed Version
prebid-server
prebid
< 4.4.04.4.0
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v3.110.0 (Critical)
Exploit StatusProof of Concept available
CISA KEV StatusNot listed
ImpactServer-Side Request Forgery, Local Host Enumeration, Credential Disclosure

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web application receives a user-supplied URL or host parameters, fails to properly validate, restrict, or sanitize the input, and subsequently issues an outbound request to that destination.

Known Exploits & Detection

GitHub security advisory test casesJSON test vectors demonstrating invalid-host.json and invalid-account.json structures used to verify the fixes in AcuityAds and Adhese adapters.

Vulnerability Timeline

Fix commit merged to prebid-server main branch
2026-06-05
Prebid Server version 4.4.0 containing the fix is released
2026-06-15
GitHub Security Advisory published
2026-07-29
CVE-2026-54735 assigned and listed publicly
2026-07-29

References & Sources

  • [1]GitHub Security Advisory GHSA-4p3g-4hcj-wpvx

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•CVE-2026-54693
8.2

CVE-2026-54693: Authorization Bypass in ZITADEL Identity Management Platform

A critical authorization bypass vulnerability was identified in the ZITADEL identity management platform, tracked as CVE-2026-54693 (GHSA-jq8w-8q2f-ffm9). Due to incorrect privilege validation in self-service profile modification endpoints, standard authenticated users could obtain plaintext verification codes during email or phone number updates. This allows attackers to claim and verify arbitrary email addresses or phone numbers without controlling the underlying contact methods.

Alon Barad
Alon Barad
1 views•7 min read
•about 3 hours ago•CVE-2026-54666
8.3

CVE-2026-54666: Remote Code Execution via OpenAPI Route Path Injection in swagger-typescript-api

CVE-2026-54666 identifies a high-severity code injection vulnerability in the swagger-typescript-api code generator library. The library fails to sanitize route paths parsed from OpenAPI Specification (OAS) documents before interpolating them into generated TypeScript and JavaScript client code. When a developer processes a compromised or malicious OpenAPI specification file, the library writes unescaped string literals and dynamic execution blocks directly into backtick template literals. When the generated client's corresponding API method is executed, the embedded JavaScript executes dynamically with the privileges of the active process.

Amit Schendel
Amit Schendel
9 views•6 min read
•about 4 hours ago•CVE-2026-10702
4.3

CVE-2026-10702: JIT Miscompilation Type Confusion in Mozilla SpiderMonkey

A type confusion vulnerability exists in the optimizing JIT compilation pipeline of Mozilla SpiderMonkey (Firefox) prior to version 151.0.3. An error in the JIT compiler's Range Analysis optimization pass allows the unsafe elimination of critical type guards. Under specific execution flows, an unauthenticated remote attacker can trigger a mismatch between predicted compile-time types and actual runtime types, resulting in memory corruption and arbitrary code execution within the browser's sandbox environment.

Alon Barad
Alon Barad
3 views•9 min read
•about 4 hours ago•CVE-2026-54690
8.2

CVE-2026-54690: Server-Side Request Forgery in datamodel-code-generator Remote Schema Resolution

CVE-2026-54690 (GHSA-954p-556p-r752) is a Server-Side Request Forgery (SSRF) vulnerability in the datamodel-code-generator Python library from version 0.9.1 to 0.61.0. The library silently resolves remote JSON Schema references ($ref) over HTTP/HTTPS without verifying the target hosts or IP addresses. Because it automatically follows redirects and permits requests to local and private networks by default, an attacker can submit a crafted schema to trigger connections to internal subnets, localhost, or cloud metadata endpoints. Retrieved sensitive data is subsequently parsed and reflected in the generated Python model files, resulting in local and private data disclosure.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 5 hours ago•CVE-2026-54656
7.8

CVE-2026-54656: Arbitrary Code Execution in datamodel-code-generator via Unescaped Validator Configurations

CVE-2026-54656 is a high-severity arbitrary code execution vulnerability in the koxudaxi/datamodel-code-generator Python package. When processing validator metadata from external configuration files passed via the --extra-template-data argument, the code generator performs unescaped string interpolation into Pydantic v2 @field_validator decorators. This allows local attackers to construct malicious configuration files that inject arbitrary Python statements into generated models, executing code upon downstream import. This vulnerability has been resolved in version 0.60.2.

Alon Barad
Alon Barad
2 views•6 min read
•about 6 hours ago•CVE-2026-55391
7.5

CVE-2026-55391: Server-Side Request Forgery Bypass via DNS Rebinding in datamodel-code-generator

CVE-2026-55391 is a server-side request forgery (SSRF) bypass vulnerability in the datamodel-code-generator package. The vulnerability occurs due to a Time-of-Check to Time-of-Use (TOCTOU) race condition during DNS resolution, combined with a failure to inspect embedded IPv4-in-IPv6 address mappings. By deploying a malicious DNS server with a low Time-To-Live (TTL) configuration, an attacker can bypass private address blocklists and coerce the application to connect to internal services or local endpoints.

Alon Barad
Alon Barad
3 views•6 min read