CVE-2026-72703
ŚrednieCVSS 6.3Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 2 - wyżej niż 2% wszystkich znanych CVE
Streszczenie
Kontroler guard w Rocq Prover traktuje parametr zagnieżdżonego wzajemnego fixpointu jako jednolity bez badania wywołań między różnymi ciałami tego fixpointu. Funkcja find_uniform_parameters w kernel/inductive.ml sprawdza tylko wywołania samorekurencyjne, więc gdy żadne ciało nie wywołuje siebie, wszystkie parametry są uznawane za jednolite. Parametr, który rośnie przez wywołanie krzyżowe, zachowuje specyfikację podtermu z otaczającego fixpointu, co pozwala na zaakceptowanie wywołania rekurencyjnego, które nie jest strukturalnie mniejsze. Prowadzi to do niedeterministycznej definicji i udowodnienia fałszu. Wprowadzone w Coq 8.20, poprawione w Rocq 9.2.0.
Ocena ryzyka
Ryzyko obejmuje możliwość udowodnienia fałszywych twierdzeń w systemie, co może podważyć bezpieczeństwo dowodów formalnych.
Rekomendacja
Zaleca się aktualizację Rocq Prover do wersji 9.2.0 lub nowszej.
Inne podatności w Rocq Prover
Zobacz wszystkie- CVE-2026-72714Średnie
Rocq Prover nie przywraca kopii flagi sprawdzania wszechświata w grafie wszechświatów po zamknięciu modułu, który lokalnie wyłączył to sprawdzanie. Powoduje to rozbieżność między widokami: Test Universe Checking zgłasza sprawdzanie jako włączone, podczas gdy jądro nadal akceptuje termy niespójne z wszechświatami. Umożliwia to zastosowanie paradoksu Hurkensa i udowodnienie fałszu. Brak dostępnej poprawki.
- CVE-2026-72705Średnie
Kontroler guard w Rocq Prover nie śledzi wywołań rekurencyjnych przekazywanych przez argumenty własne fixpointu. Fixpoint może przekazać siebie jako argument wyższego rzędu do drugiego fixpointu, który stosuje go do wartości niebędącej podtermem argumentu strukturalnego. To pozwala na zaakceptowanie definicji, która jest definicyjnie równa swojej negacji, co prowadzi do udowodnienia fałszu. Poprawka dostępna w Rocq 9.2.0.
- CVE-2026-72704Średnie
Kontroler guard w Rocq Prover nie ponownie sprawdza reprezentacji drzewa rekurencyjnego parametru typu indukcyjnego po zmianie tego parametru przez transport. Fixpoint może zastosować przepisanie wzdłuż równości między typami do swojego argumentu rekurencyjnego, co jest akceptowane, ale zmienia drzewo rekurencyjne. Drugi fixpoint dziedziczy zmienione drzewo bez weryfikacji, co pozwala na zaakceptowanie wywołania, które nie jest strukturalnie malejące. Prowadzi to do niedeterministycznej definicji i udowodnienia fałszu. Proponowana poprawka nie została scalona.
Oryginalny opis (angielski, źródło NVD)
The guard checker in Rocq Prover treats a parameter of a nested mutual fixpoint as uniform without examining calls between the different bodies of that fixpoint. find_uniform_parameters in kernel/inductive.ml inspects only self-recursive calls, so when no body calls itself the function concludes that every parameter is uniform. A parameter that grows through a cross-call from one body to another therefore keeps the subterm specification it inherited from the enclosing fixpoint, and a recursive call guarded by that specification is accepted although the argument is not structurally smaller. A non-terminating definition is admitted as structurally decreasing, which yields a term whose value equals its own successor and so a proof of False, from which any proposition follows. The proof requires no axioms, plugins or unsafe flags and Print Assumptions reports it as closed under the global context. Introduced in Coq 8.20 and fixed in Rocq 9.2.0.

