Feb 18, 2026·5 min read·15 visits
Freeform < 4.1.22 and < 5.5.9 bundles an old version of Axios vulnerable to SSRF. Update immediately to flush out the stale asset.
A classic supply chain vulnerability affecting Solspace Freeform for Craft CMS. The plugin distributes precompiled JavaScript assets containing an outdated, vulnerable version of the Axios HTTP client (CVE-2024-39338). This creates a scenario where developers update their top-level dependencies, unaware that a 'zombie' library within a plugin's binary blob remains susceptible to Server-Side Request Forgery (SSRF) and protocol confusion attacks.
Modern web development is a Russian Nesting Doll of dependencies. You audit your composer.json, you scan your package.json, and you pat yourself on the back for a job well done. But what about the code you didn't write and can't see in your manifest files? That's where GHSA-RWR8-XRPW-9QF5 lives.
Solspace Freeform, a heavyweight form builder for Craft CMS, committed the cardinal sin of bundling: shipping precompiled assets (minified JavaScript) that baked in an old version of the axios library. While your project might be running the latest and greatest security patches, the compiled freeform.js sitting in your public web root is essentially a time capsule, running a version of Axios older than 1.7.5.
This is a textbook "Zombie Dependency." It's dead code to you—you don't maintain it—but it's very much alive to an attacker who knows it's there. The specific rot in this zombie? CVE-2024-39338, a nasty little flaw in how Axios handles protocol-relative URLs, opening the door to Server-Side Request Forgery (SSRF) scenarios if used in specific environments.
To understand why this matters, we have to look at the underlying vulnerability in Axios (CVE-2024-39338). The issue lies in how the library parses URLs. Developers often assume that if they don't type http:// or https://, the library will treat the input as a path relative to the current domain (e.g., /api/submit).
However, prior to version 1.7.5, Axios had a blind spot. If an attacker supplied a URL starting with // (double slash), Axios would interpret this as a protocol-relative URL. In a browser, //attacker.com inherits the current protocol (http or https). But in server-side contexts (like Node.js wrappers or SSR environments often used alongside modern CMS front-ends), this behavior allows the request to escape the intended host entirely.
It’s a logic gap. The code essentially says, "Oh, you want to go to //localhost:8080/admin? Sure thing!" bypassing any validation logic that only checked for explicit protocol schemes like http: or file:. It turns a constrained API call into an open proxy.
We don't have a simple diff of Freeform's source code because the vulnerability exists inside a minified distribution file, but we can reconstruct the crime scene based on the Axios fix.
Here is the logic flaw in the vulnerable Axios versions:
// Vulnerable Logic (Conceptual)
function isAbsoluteURL(url) {
// Failed to account for protocol-relative //
return /^[a-z][a-z0-9+.-]*:/.test(url);
}Because //example.com doesn't start with a scheme (like http:), the check fails, and Axios treats it as valid input for certain request paths, which the underlying adapter then resolves as a remote request.
In the patched version (Axios 1.7.5+), the validation is tightened to recognize that // effectively acts as an absolute URL in network contexts:
// The Fix in Axios 1.7.5
function isAbsoluteURL(url) {
// Now catches // as an absolute URL indicator
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
}Freeform's mistake was not in writing bad code, but in freezing bad code in time. By compiling their assets and not updating the build pipeline, they shipped the vulnerable logic above to thousands of Craft CMS installations.
How do we weaponize this in a Form Builder? Freeform is designed to take user input and send it places—CRMs, mailing lists, or custom API endpoints. It uses Axios for these AJAX requests.
The Attack Vector:
Imagine a Freeform implementation that allows a user (or an admin) to define a webhook URL or a redirection endpoint. If the system relies on Axios to validate or fetch data from that endpoint, an attacker can supply //169.254.169.254/latest/meta-data/.
/thank-you).freeform.js bundle sees //169... and treats it as a valid request, inheriting the protocol.Even without full SSRF, the ability to redirect AJAX requests unpredictably can break CORS policies and leak CSRF tokens to external domains.
This isn't a vulnerability you can patch by editing a file line. You cannot easily patch a minified Webpack bundle unless you are a glutton for punishment. The only reliable path forward is to replace the vendor's distribution files entirely.
Solspace has released the fix in:
These versions were rebuilt with an updated package.lock that pulls in Axios 1.7.5 or higher.
> [!WARNING]
> Cache Clearing is Mandatory.
> Simply running composer update is not enough. Browser caches and CDNs (Cloudflare, Fastly) often hold onto the old .js files aggressively. You must purge your asset caches to ensure the new, secure bundle is actually being served to your users.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
solspace/craft-freeform Solspace | < 4.1.22 | 4.1.22 |
solspace/craft-freeform Solspace | < 5.5.9 | 5.5.9 |
| Attribute | Detail |
|---|---|
| Vulnerability Type | Supply Chain / Bundled Dependency |
| Underlying Flaw | SSRF via Axios (CVE-2024-39338) |
| Affected Component | Precompiled JS Assets (dist/) |
| Attack Vector | Network (Protocol-Relative URL Injection) |
| CVSS | 5.4 (Medium) |
| Exploit Maturity | Proof of Concept (PoC) |
CVE-2026-70666 is a critical Server-Side Request Forgery (SSRF) vulnerability in Netflix Lemur's ACME certificate management integration. Prior to version 1.9.3, the system allowed authority-role users to bypass initial ACME URL allowlist validations when updating an existing authority. Additionally, the underlying ACME network client blindly parsed and connected to dynamic endpoint URLs supplied in JSON responses from the configured ACME directory, allowing attackers to route arbitrary JWS-signed requests to internal services or cloud metadata endpoints.
A security vulnerability in Netflix Lemur, a TLS certificate management framework, allows authenticated operators to bypass Server-Side Request Forgery (SSRF) mitigations. The issue exists within the certificate revocation verification workflow, specifically inside the CRL and OCSP retrieval logic. By exploiting HTTP redirects or DNS rebinding (Time-of-Check Time-of-Use) mechanisms, an attacker can coerce the server into issuing arbitrary network requests to internal services, such as the cloud instance metadata service (IMDS) or loopback addresses. This bypass neutralizes previous network-boundary validation logic and allows blind read/write SSRF targeting internal infrastructure resources.
Netflix Lemur, an open-source TLS certificate management framework, is affected by a Server-Side Request Forgery (SSRF) vulnerability. This vulnerability arises from an incomplete patch for a previous security flaw, CVE-2026-55166. While Lemur version 1.9.2 validated the ACME directory URL against an allowlist during authority creation, it failed to perform the same checks when updating existing authorities. An authenticated user possessing an authority role can exploit this omission to replace the directory URL with internal or cloud metadata endpoints. During subsequent certificate issuance, the Lemur backend executes unauthorized requests, potentially leaking sensitive metadata or credentials.
An authorization bypass and information disclosure vulnerability in Netflix Lemur before version 1.9.3 allows authenticated, low-privilege users to retrieve raw destination configurations, exposing plaintext credentials such as SFTP passwords and private key passphrases.
Netflix Lemur before 1.9.3 contains a missing authorization vulnerability (CWE-862, CWE-639) when handling certificate creation, upload, or modification. Authenticated non-read-only users can manipulate the replaces parameter to silence expiration notifications and hijack certificate rotation tasks for arbitrary targets, leading to unauthorized TLS certificate deployment and traffic interception.
CVE-2026-71317 is a critical Broken Object-Level Authorization (BOLA) / Missing Authorization vulnerability in Netflix Lemur versions prior to 1.9.3. When the self-service authority creation option is enabled (ADMIN_ONLY_AUTHORITY_CREATION = False), Lemur allows authenticated non-read-only users to request the creation of a subordinate Certificate Authority (sub-CA) chained to any internal parent authority, even if the requesting user lacks administrative or usage permissions over that parent CA. This allows attackers to generate subordinate CAs signed by trusted root certificates, exposing private keys and compromising the organizational PKI trust chain.