Firefox · Networking
CVE-2026-109760
Logic Error in Networking
Overview
Moderate
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
SetAllowSTSnetwerk/protocol/http/HttpBaseChannel.cpp |
modified |
Files Changed
netwerk/ipc/NeckoChannelParams.ipdlhnetwerk/protocol/http/HttpBaseChannel.cppnetwerk/protocol/http/HttpChannelChild.cppnetwerk/protocol/http/HttpChannelParent.cppnetwerk/protocol/http/HttpChannelParent.hnetwerk/protocol/http/nsIHttpChannel.idl
Patch
diff --git a/netwerk/ipc/NeckoChannelParams.ipdlh b/netwerk/ipc/NeckoChannelParams.ipdlh
index fc417982e3c..63c4888c075 100644
--- a/netwerk/ipc/NeckoChannelParams.ipdlh
+++ b/netwerk/ipc/NeckoChannelParams.ipdlh
@@ -398,7 +398,6 @@ struct HttpChannelOpenArgs
uint32_t redirectMode;
int16_t priority;
bool uploadStreamIsStreaming;
- bool allowSTS;
bool resumeAt;
bool allowSpdy;
bool allowHttp3;
diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp
index ec1cb9bcc9c..b2d86d03eaf 100644
--- a/netwerk/protocol/http/HttpBaseChannel.cpp
+++ b/netwerk/protocol/http/HttpBaseChannel.cpp
@@ -2222,6 +2222,12 @@ HttpBaseChannel::GetAllowSTS(bool* value) {
NS_IMETHODIMP
HttpBaseChannel::SetAllowSTS(bool value) {
+ // This controls whether the parent process honors HSTS for this channel, so
+ // it must not be settable from a content process.
+ if (!XRE_IsParentProcess()) {
+ MOZ_ASSERT(value == true, "allowSTS = false is parent process only");
+ return NS_OK;
+ }
ENSURE_CALLED_BEFORE_CONNECT();
StoreAllowSTS(value);
return NS_OK;
@@ -5310,7 +5316,6 @@ nsresult HttpBaseChannel::SetupReplacementChannel(nsIURI* newURI,
}
}
- // convey the LoadAllowSTS() flags
rv = httpChannel->SetAllowSTS(LoadAllowSTS());
MOZ_ASSERT(NS_SUCCEEDED(rv));
diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp
index dc4ca09f651..56a2b56c419 100644
--- a/netwerk/protocol/http/HttpChannelChild.cpp
+++ b/netwerk/protocol/http/HttpChannelChild.cpp
@@ -2542,7 +2542,6 @@ nsresult HttpChannelChild::ContinueAsyncOpen() {
openArgs.priority() = mPriority;
openArgs.classOfService() = mClassOfService;
openArgs.redirectionLimit() = mRedirectionLimit;
- openArgs.allowSTS() = LoadAllowSTS();
openArgs.thirdPartyFlags() = LoadThirdPartyFlags();
openArgs.resumeAt() = mSendResumeAt;
openArgs.startPos() = mStartPos;
diff --git a/netwerk/protocol/http/HttpChannelParent.cpp b/netwerk/protocol/http/HttpChannelParent.cpp
index dbee47d049b..f48985f0d9f 100644
--- a/netwerk/protocol/http/HttpChannelParent.cpp
+++ b/netwerk/protocol/http/HttpChannelParent.cpp
@@ -163,7 +163,7 @@ bool HttpChannelParent::Init(const HttpChannelCreationArgs& aArgs) {
a.uri(), a.original(), a.doc(), a.referrerInfo(), a.apiRedirectTo(),
a.topWindowURI(), a.loadFlags(), a.requestHeaders(),
a.requestMethod(), a.uploadStream(), a.uploadStreamIsStreaming(),
- a.priority(), a.classOfService(), a.redirectionLimit(), a.allowSTS(),
+ a.priority(), a.classOfService(), a.redirectionLimit(),
a.thirdPartyFlags(), a.resumeAt(), a.startPos(), a.entityID(),
a.allowSpdy(), a.allowHttp3(), a.allowAltSvc(), a.beConservative(),
a.bypassProxy(), a.tlsFlags(), a.loadInfo(), a.cacheKey(),
@@ -427,13 +427,12 @@ bool HttpChannelParent::DoAsyncOpen(
const RequestHeaderTuples& requestHeaders, const nsCString& requestMethod,
const Maybe<IPCStream>& uploadStream, const bool& uploadStreamIsStreaming,
const int16_t& priority, const ClassOfService& classOfService,
- const uint8_t& redirectionLimit, const bool& allowSTS,
- const uint32_t& thirdPartyFlags, const bool& doResumeAt,
- const uint64_t& startPos, const nsCString& entityID, const bool& allowSpdy,
- const bool& allowHttp3, const bool& allowAltSvc, const bool& beConservative,
- const bool& bypassProxy, const uint32_t& tlsFlags,
- const LoadInfoArgs& aLoadInfoArgs, const uint32_t& aCacheKey,
- const uint64_t& aRequestContextID,
+ const uint8_t& redirectionLimit, const uint32_t& thirdPartyFlags,
+ const bool& doResumeAt, const uint64_t& startPos, const nsCString& entityID,
+ const bool& allowSpdy, const bool& allowHttp3, const bool& allowAltSvc,
+ const bool& beConservative, const bool& bypassProxy,
+ const uint32_t& tlsFlags, const LoadInfoArgs& aLoadInfoArgs,
+ const uint32_t& aCacheKey, const uint64_t& aRequestContextID,
const Maybe<CorsPreflightArgs>& aCorsPreflightArgs,
const uint32_t& aInitialRwin, const bool& aBlockAuthPrompt,
const bool& aAllowStaleCacheContent, const bool& aPreferCacheLoadOverBypass,
@@ -633,7 +632,6 @@ bool HttpChannelParent::DoAsyncOpen(
httpChannel->SetClassOfService(classOfService);
}
httpChannel->SetRedirectionLimit(redirectionLimit);
- httpChannel->SetAllowSTS(allowSTS);
httpChannel->SetThirdPartyFlags(thirdPartyFlags);
httpChannel->SetAllowSpdy(allowSpdy);
httpChannel->SetAllowHttp3(allowHttp3);
diff --git a/netwerk/protocol/http/HttpChannelParent.h b/netwerk/protocol/http/HttpChannelParent.h
index 728695d2e33..f48f3e9294f 100644
--- a/netwerk/protocol/http/HttpChannelParent.h
+++ b/netwerk/protocol/http/HttpChannelParent.h
@@ -150,13 +150,13 @@ class HttpChannelParent final : public nsIInterfaceRequestor,
const RequestHeaderTuples& requestHeaders, const nsCString& requestMethod,
const Maybe<IPCStream>& uploadStream, const bool& uploadStreamIsStreaming,
const int16_t& priority, const ClassOfService& classOfService,
- const uint8_t& redirectionLimit, const bool& allowSTS,
- const uint32_t& thirdPartyFlags, const bool& doResumeAt,
- const uint64_t& startPos, const nsCString& entityID,
- const bool& allowSpdy, const bool& allowHttp3, const bool& allowAltSvc,
- const bool& beConservative, const bool& bypassProxy,
- const uint32_t& tlsFlags, const LoadInfoArgs& aLoadInfoArgs,
- const uint32_t& aCacheKey, const uint64_t& aRequestContextID,
+ const uint8_t& redirectionLimit, const uint32_t& thirdPartyFlags,
+ const bool& doResumeAt, const uint64_t& startPos,
+ const nsCString& entityID, const bool& allowSpdy, const bool& allowHttp3,
+ const bool& allowAltSvc, const bool& beConservative,
+ const bool& bypassProxy, const uint32_t& tlsFlags,
+ const LoadInfoArgs& aLoadInfoArgs, const uint32_t& aCacheKey,
+ const uint64_t& aRequestContextID,
const Maybe<CorsPreflightArgs>& aCorsPreflightArgs,
const uint32_t& aInitialRwin, const bool& aBlockAuthPrompt,
const bool& aAllowStaleCacheContent,
diff --git a/netwerk/protocol/http/nsIHttpChannel.idl b/netwerk/protocol/http/nsIHttpChannel.idl
index a68ff6b1b39..0444dad31c1 100644
--- a/netwerk/protocol/http/nsIHttpChannel.idl
+++ b/netwerk/protocol/http/nsIHttpChannel.idl
@@ -217,7 +217,8 @@ interface nsIHttpChannel : nsIIdentChannel
* OCSP to bootstrap the HTTPs is the likely use case for setting it to
* false.
*
- * This attribute may only be set before the channel is opened.
+ * This attribute may only be set in the parent process, and only before
+ * the channel is opened.
*
* @throws NS_ERROR_IN_PROGRESS or NS_ERROR_ALREADY_OPENED
* if called after the channel has been opened.
Loading diff…
References
On This Page