java-topology/whitepaper/disclosure/cve-strategy.rst
russell@unturf.com 0a580b313d undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com

Patches, unit tests, benchmarks, whitepaper, and outreach briefs.
Public domain — no copyright claimed. Use freely.
2026-03-26 17:11:57 -04:00

157 lines
6 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CVE Strategy
=============
.. contents:: :local:
Overview
--------
Not every CWE-407 defect warrants a CVE. The criteria for CVE filing are:
1. The tool accepts **untrusted input** from the network or from an adversary-controlled file
2. The defect creates a **measurable denial-of-service vector**: an adversary can craft input
that maximizes the O(n²) path, degrading performance to the point of service disruption
3. The performance degradation is **distinguishable from legitimate load** — i.e., the crafted
input is not a normal workload
Tools that process only trusted input (developer-controlled build configurations, private
module graphs) do not meet the bar for CVE even if the defect is architecturally identical.
CVE-Eligible Defects
---------------------
The following defects are CVE candidates based on the above criteria:
.. list-table::
:header-rows: 1
:widths: 15 20 35 15 15
* - Defect
- Tool
- Attack vector
- Complexity
- Status
* - ts-0001, ts-0002, ts-0003
- TypeScript ``tsc``
- Crafted ``.ts`` source with adversarially large export-star or resolution chain;
submitted to a CI/CD compiler service
- O(depth²) / O(V²)
- File after Phase 3
* - scala3-0001
- Scala 3 ``scalac``
- Crafted ``.scala`` source with many type parameters in a constraint interaction;
submitted to a CI/CD compiler service
- O(n³) — CRITICAL
- File after Phase 3
* - distlib-0001
- pip / distlib
- Crafted ``pyproject.toml`` or ``setup.cfg`` with adversarially large circular
dependency graph; triggers during ``pip install``
- O(V²)
- File after Phase 3
* - npm-0001, npm-0002
- npm Arborist
- Crafted ``package.json`` with adversarially large dependency graph; triggers
during ``npm install``
- O(K²) / O(depth²)
- File after Phase 3
* - kotlin-0001
- Kotlin ``kotlinc``
- Crafted ``.kt`` source with deep inheritance hierarchy; submitted to compiler service
- O(E×V)
- File after Phase 3
* - FRR, BIRD (if confirmed)
- Routing daemons
- Crafted BGP UPDATE or OSPF LSA with adversarially structured AS-path or link-state
topology; injected via BGP peering or OSPF adjacency
- TBD (O(V²) or worse)
- File after confirmation + Phase 3
CVE-Not-Eligible Defects (Rationale)
--------------------------------------
.. list-table::
:header-rows: 1
:widths: 15 20 45 20
* - Defect
- Tool
- Rationale
- Decision
* - javac-0001 through javac-0005
- ``javac``
- javac processes source code written by the developer. An adversary would need to
provide source files to the victim, which requires developer complicity. The primary
impact is on the developer's own compile time. Build services (e.g., CI/CD pipelines
that compile user-submitted code) could be affected, but this is a secondary vector.
The patches are correct regardless; CVE is borderline.
- Borderline — assess based on whether patch is likely to be backported to LTS JDKs
* - ghc-0001 through ghc-0004
- GHC
- Same argument as javac. GHC is not typically exposed as a compile-as-a-service target.
- No CVE unless evidence of compile-service deployment
* - gcc-0001
- GCC gcov
- gcov processes instrumented binaries and test coverage data, both developer-controlled.
- No CVE
* - llvm-0001
- LLVM LTO
- LTO processes developer-compiled bitcode. No untrusted-input vector.
- No CVE
* - rustc-0001, rustc-0002
- ``rustc``
- Same as javac; Rust playground could be a compile-as-a-service vector.
- Borderline — assess based on Rust playground / cloud build service usage
* - maven-0001, maven-0002, maven-0003
- Maven
- Maven processes ``pom.xml`` files under developer control. No external-input vector
for the graph construction path.
- No CVE
* - cmake-0001
- CMake
- ``CMakeLists.txt`` is developer-controlled. No external-input vector.
- No CVE
* - cargo-0001
- Cargo tree
- Display-only path; bounded by workspace size. No service disruption vector.
- No CVE
* - linux-0001
- Linux headerdep.pl
- Build-time tooling; runs on developer-controlled kernel tree.
- No CVE
CVE Filing Process
-------------------
For each CVE-eligible defect:
1. **Confirm the attack vector** with a proof-of-concept crafted input that demonstrates
measurable performance degradation (e.g., 10x slowdown at n=1000 vs n=100 baseline)
2. **Notify the maintainer** privately with the PoC before filing (Phase 3)
3. **Request a CVE** from MITRE via the CNA (Common Numbering Authority) for the affected
project, or through a coordinating CNA (e.g., GitHub Security Advisories)
4. **Publish the CVE** after the 90-day window, with or without a patch
CVSS Scoring Guidance
----------------------
For CWE-407 defects in compilers and package managers:
- **Attack Vector:** Network (N) if the tool processes remotely-obtained input;
Local (L) if it only processes local files
- **Attack Complexity:** Low (L) — the crafted input is straightforward to construct
- **Privileges Required:** None (N) for package managers; Low (L) for compiler services
- **User Interaction:** Required (R) — victim must run the affected tool against the crafted input
- **Scope:** Unchanged (U) — DoS only; no privilege escalation
- **Confidentiality / Integrity:** None (N)
- **Availability:** High (H) — tool becomes unusable or extremely slow on crafted input
Estimated CVSS v3.1 base score for package manager defects (distlib-0001, npm-0001/0002):
**CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H = 6.5 (Medium)**
For routing daemon defects (if confirmed), Attack Vector is Network and User Interaction
may be None if the defect can be triggered by a BGP peer without operator action:
**CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5 (High)**
The Scala 3 O(n³) defect may score higher due to the cubic scaling allowing smaller input
to achieve the same disruption level.