Firefox · DOM
CVE-2026-16372
Logic Error in DOM
Overview
Medium
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Changed Functions
| Function | Change | Notes |
|---|---|---|
ifdom/base/Document.cpp |
modified | |
ifdom/ipc/ContentParent.cpp |
modified | |
ParentIdleListenerdom/ipc/ContentParent.h |
modified | |
nsIOriginsListLoadCallbackdom/ipc/ContentParent.h |
modified | |
nsIWidgetdom/ipc/ContentParent.h |
modified | |
nsIX509Certdom/ipc/ContentParent.h |
modified | |
CrashReporterInitArgsdom/ipc/ContentParent.h |
modified |
Files Changed
dom/base/Document.cppdom/ipc/ContentParent.cppdom/ipc/ContentParent.hdom/ipc/PContent.ipdldom/ipc/PWindowGlobal.ipdldom/ipc/WindowGlobalParent.cppdom/ipc/WindowGlobalParent.h
Patch
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index c912e0d200c..5a98f26aa63 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -1523,91 +1523,22 @@ already_AddRefed<mozilla::dom::Promise> Document::AddCertException(
return nullptr;
}
- nsresult rv = NS_OK;
- if (NS_WARN_IF(!mFailedChannel)) {
- promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
- return promise.forget();
- }
-
- nsCOMPtr<nsIURI> failedChannelURI;
- NS_GetFinalChannelURI(mFailedChannel, getter_AddRefs(failedChannelURI));
- if (!failedChannelURI) {
- promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
- return promise.forget();
- }
-
- nsCOMPtr<nsIURI> innerURI = NS_GetInnermostURI(failedChannelURI);
- if (!innerURI) {
- promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
- return promise.forget();
- }
-
- nsAutoCString host;
- innerURI->GetAsciiHost(host);
- int32_t port;
- innerURI->GetPort(&port);
-
- nsCOMPtr<nsITransportSecurityInfo> tsi;
- rv = mFailedChannel->GetSecurityInfo(getter_AddRefs(tsi));
- if (NS_WARN_IF(NS_FAILED(rv))) {
- promise->MaybeReject(rv);
- return promise.forget();
- }
- if (NS_WARN_IF(!tsi)) {
- promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
- return promise.forget();
- }
-
- nsCOMPtr<nsIX509Cert> cert;
- rv = tsi->GetServerCert(getter_AddRefs(cert));
- if (NS_WARN_IF(NS_FAILED(rv))) {
- promise->MaybeReject(rv);
- return promise.forget();
- }
- if (NS_WARN_IF(!cert)) {
- promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
- return promise.forget();
- }
-
- if (XRE_IsContentProcess()) {
- ContentChild* cc = ContentChild::GetSingleton();
- MOZ_ASSERT(cc);
- OriginAttributes const& attrs = NodePrincipal()->OriginAttributesRef();
- cc->SendAddCertException(cert, host, port, attrs, aIsTemporary)
- ->Then(GetCurrentSerialEventTarget(), __func__,
- [promise](const mozilla::MozPromise<
- nsresult, mozilla::ipc::ResponseRejectReason,
- true>::ResolveOrRejectValue& aValue) {
- if (aValue.IsResolve()) {
- promise->MaybeResolve(aValue.ResolveValue());
- } else {
- promise->MaybeRejectWithUndefined();
- }
- });
- return promise.forget();
- }
-
- if (XRE_IsParentProcess()) {
- nsCOMPtr<nsICertOverrideService> overrideService =
- do_GetService(NS_CERTOVERRIDE_CONTRACTID);
- if (!overrideService) {
- promise->MaybeReject(NS_ERROR_FAILURE);
- return promise.forget();
- }
-
- OriginAttributes const& attrs = NodePrincipal()->OriginAttributesRef();
- rv = overrideService->RememberValidityOverride(host, port, attrs, cert,
- aIsTemporary);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- promise->MaybeReject(rv);
- return promise.forget();
- }
-
- promise->MaybeResolveWithUndefined();
- return promise.forget();
+ WindowGlobalChild* wgc = GetWindowGlobalChild();
+ if (!wgc) {
+ return nullptr;
}
+ wgc->SendAddCertException(aIsTemporary)
+ ->Then(GetCurrentSerialEventTarget(), __func__,
+ [promise](const mozilla::MozPromise<
+ nsresult, mozilla::ipc::ResponseRejectReason,
+ true>::ResolveOrRejectValue& aValue) {
+ if (aValue.IsResolve()) {
+ promise->MaybeResolve(aValue.ResolveValue());
+ } else {
+ promise->MaybeRejectWithUndefined();
+ }
+ });
- promise->MaybeReject(NS_ERROR_FAILURE);
return promise.forget();
}
diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp
index 7814d1287c2..912176a024b 100644
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -200,7 +200,6 @@
#include "nsIBidiKeyboard.h"
#include "nsIBrowserDOMWindow.h"
#include "nsICaptivePortalService.h"
-#include "nsICertOverrideService.h"
#include "nsIClipboard.h"
#include "nsIContentAnalysis.h"
#include "nsIContentSecurityPolicy.h"
@@ -230,7 +229,6 @@
#include "nsIURL.h"
#include "nsIUserIdleService.h"
#include "nsIWebBrowserChrome.h"
-#include "nsIX509Cert.h"
#include "nsIXULRuntime.h"
#include "nsPIDNSService.h"
#if defined(MOZ_WIDGET_GTK) || defined(XP_WIN)
@@ -6635,22 +6633,6 @@ mozilla::ipc::IPCResult ContentParent::RecvBHRThreadHang(
return IPC_OK();
}
-mozilla::ipc::IPCResult ContentParent::RecvAddCertException(
- nsIX509Cert* aCert, const nsACString& aHostName, int32_t aPort,
- const OriginAttributes& aOriginAttributes, bool aIsTemporary,
- AddCertExceptionResolver&& aResolver) {
- nsCOMPtr<nsICertOverrideService> overrideService =
- do_GetService(NS_CERTOVERRIDE_CONTRACTID);
- if (!overrideService) {
- aResolver(NS_ERROR_FAILURE);
- return IPC_OK();
- }
- nsresult rv = overrideService->RememberValidityOverride(
- aHostName, aPort, aOriginAttributes, aCert, aIsTemporary);
- aResolver(rv);
- return IPC_OK();
-}
-
mozilla::ipc::IPCResult
ContentParent::RecvAutomaticStorageAccessPermissionCanBeGranted(
nsIPrincipal* aPrincipal,
diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h
index 2f395fa0c81..081dd6a892d 100644
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
@@ -64,7 +64,6 @@ class nsITimer;
class ParentIdleListener;
class nsIOriginsListLoadCallback;
class nsIWidget;
-class nsIX509Cert;
namespace CrashReporter {
class CrashReporterInitArgs;
@@ -1216,11 +1215,6 @@ class ContentParent final : public PContentParent,
mozilla::ipc::IPCResult RecvBHRThreadHang(const HangDetails& aHangDetails);
- mozilla::ipc::IPCResult RecvAddCertException(
- nsIX509Cert* aCert, const nsACString& aHostName, int32_t aPort,
- const OriginAttributes& aOriginAttributes, bool aIsTemporary,
- AddCertExceptionResolver&& aResolver);
-
mozilla::ipc::IPCResult RecvAutomaticStorageAccessPermissionCanBeGranted(
nsIPrincipal* aPrincipal,
AutomaticStorageAccessPermissionCanBeGrantedResolver&& aResolver);
diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl
index 01e8fb678b3..1dc61db79a7 100644
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -177,7 +177,6 @@ using mozilla::dom::PerformanceTimingData from "mozilla/dom/PerformanceTiming.h"
using mozilla::dom::MaybeFeaturePolicyInfo from "mozilla/dom/FeaturePolicy.h";
using mozilla::dom::Wireframe from "mozilla/dom/DocumentBinding.h";
using mozilla::PerfStats::MetricMask from "mozilla/PerfStats.h";
-[RefCounted] using class nsIX509Cert from "nsIX509Cert.h";
using nsIDNSService::ResolverMode from "nsIDNSService.h";
using mozilla::dom::UserActivation::Modifiers from "mozilla/dom/UserActivation.h";
using mozilla::dom::PrivateAttributionImpressionType from "mozilla/dom/PrivateAttributionIPCUtils.h";
@@ -1637,14 +1636,6 @@ parent:
async BHRThreadHang(HangDetails aHangDetails);
- /*
- * Adds a certificate exception for the given hostname and port.
- */
- async AddCertException(nullable nsIX509Cert aCert, nsCString aHostName,
- int32_t aPort, OriginAttributes aOriginAttributes,
- bool aIsTemporary)
- returns (nsresult success);
Loading diff…
References
On This Page