Firefox · DOM
CVE-2025-5271
Logic Error in DOM
Overview
Low
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
nsIChanneldom/security/nsCSPUtils.h |
modified | |
nsCSPHostSrcdom/security/nsCSPUtils.h |
modified |
Files Changed
dom/base/ChromeUtils.cppdom/base/ChromeUtils.hdom/chrome-webidl/ChromeUtils.webidldom/security/nsCSPUtils.cppdom/security/nsCSPUtils.h
Patch
diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp
index 0e73fd32f4c..bd6dd143216 100644
--- a/dom/base/ChromeUtils.cpp
+++ b/dom/base/ChromeUtils.cpp
@@ -2585,4 +2585,11 @@ void ChromeUtils::AndroidMoveTaskToBack(GlobalObject& aGlobal) {
#endif
}
+already_AddRefed<nsIContentSecurityPolicy> ChromeUtils::CreateCSPFromHeader(
+ GlobalObject& aGlobal, const nsAString& aHeader, nsIURI* aSelfURI,
+ nsIPrincipal* aLoadingPrincipal, ErrorResult& aRv) {
+ return CSP_CreateFromHeader(aHeader, aSelfURI, aLoadingPrincipal,
+ aRv);
+}
+
} // namespace mozilla::dom
diff --git a/dom/base/ChromeUtils.h b/dom/base/ChromeUtils.h
index 7c700415831..bb5a5721ac3 100644
--- a/dom/base/ChromeUtils.h
+++ b/dom/base/ChromeUtils.h
@@ -331,6 +331,10 @@ class ChromeUtils {
static void AndroidMoveTaskToBack(GlobalObject& aGlobal);
+ static already_AddRefed<nsIContentSecurityPolicy> CreateCSPFromHeader(
+ GlobalObject& aGlobal, const nsAString& aHeader, nsIURI* aSelfURI,
+ nsIPrincipal* aLoadingPrincipal, ErrorResult& aRv);
+
private:
// Number of DevTools session debugging the current process
static std::atomic<uint32_t> sDevToolsOpenedCount;
diff --git a/dom/chrome-webidl/ChromeUtils.webidl b/dom/chrome-webidl/ChromeUtils.webidl
index e0d953da57a..1fd0519864c 100644
--- a/dom/chrome-webidl/ChromeUtils.webidl
+++ b/dom/chrome-webidl/ChromeUtils.webidl
@@ -788,6 +788,9 @@ partial namespace ChromeUtils {
// Equivalent to pressing the home button. Exclusively for testing.
[ChromeOnly]
undefined androidMoveTaskToBack();
+
+ [Throws]
+ ContentSecurityPolicy createCSPFromHeader(DOMString header, URI selfURI, Principal loadingPrincipal);
};
/*
diff --git a/dom/security/nsCSPUtils.cpp b/dom/security/nsCSPUtils.cpp
index 8750dfa730e..62107bb635b 100644
--- a/dom/security/nsCSPUtils.cpp
+++ b/dom/security/nsCSPUtils.cpp
@@ -415,6 +415,28 @@ CSPDirective CSP_ContentTypeToDirective(nsContentPolicyType aType) {
return nsIContentSecurityPolicy::DEFAULT_SRC_DIRECTIVE;
}
+already_AddRefed<nsIContentSecurityPolicy> CSP_CreateFromHeader(const nsAString& aHeaderValue, nsIURI* aSelfURI,
+ nsIPrincipal* aLoadingPrincipal,
+ ErrorResult& aRv) {
+ RefPtr<nsCSPContext> csp = new nsCSPContext();
+ // Hard code some default values until we have a use case where we can provide
+ // something else.
+ // When inheriting from this CSP, these values will be overwritten anyway.
+ aRv = csp->SetRequestContextWithPrincipal(aLoadingPrincipal, aSelfURI,
+ /* aReferrer */ ""_ns,
+ /* aInnerWindowId */ 0);
+ if (aRv.Failed()) {
+ return nullptr;
+ }
+
+ aRv = CSP_AppendCSPFromHeader(csp, aHeaderValue, /* aReportOnly */ false);
+ if (aRv.Failed()) {
+ return nullptr;
+ }
+
+ return csp.forget();
+}
+
nsCSPHostSrc* CSP_CreateHostSrcFromSelfURI(nsIURI* aSelfURI) {
// Create the host first
nsCString host;
diff --git a/dom/security/nsCSPUtils.h b/dom/security/nsCSPUtils.h
index f66fc083fba..2c5cbda1fbd 100644
--- a/dom/security/nsCSPUtils.h
+++ b/dom/security/nsCSPUtils.h
@@ -13,6 +13,7 @@
#include "nsString.h"
#include "nsTArray.h"
#include "nsUnicharUtils.h"
+#include "mozilla/ErrorResult.h"
class nsIChannel;
@@ -193,6 +194,10 @@ nsresult CSP_AppendCSPFromHeader(nsIContentSecurityPolicy* aCsp,
/* =============== Helpers ================== */
+already_AddRefed<nsIContentSecurityPolicy> CSP_CreateFromHeader(const nsAString& aHeaderValue, nsIURI* aSelfURI,
+ nsIPrincipal* aLoadingPrincipal,
+ mozilla::ErrorResult& aRv);
+
class nsCSPHostSrc;
nsCSPHostSrc* CSP_CreateHostSrcFromSelfURI(nsIURI* aSelfURI);
Loading diff…
References
On This Page