Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
rocq-cve-poc-21683 — CVE-2026-72705 — O verificador Rocq Guard aceita um ponto fixo passado como argumento de ordem superior | Kitploit
Ferramentas/GitHubGitHub/endrazine/rocq-cve-poc-21683
Análise de VulnerabilidadesExploraçãoCriptografiaPapers e Pesquisa
GitHubendrazine/rocq-cve-poc-21683

rocq-cve-poc-21683

CVE-2026-72705 — O verificador Rocq Guard aceita um ponto fixo passado como argumento de ordem superior

Ver Repositório
há 2 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-72705 — O verificador de guarda do Rocq aceita Fixpoint passado como argumento de ordem superior

Provando 0 = 1 sem axiomas via paradoxo de Russell através do bypass do verificador de guarda em fixpoints.

Descoberto autonomamente por Claude Opus 4.6 (Anthropic).

CampoValor
Relatório de bugrocq-prover/rocq#21683
CorreçãoPR #21684
AfetadoRocq ≤ 9.1.0 / todas as versões do Coq com verificador de guarda
Corrigido em9.2.0
CVSS 3.1AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N — 7.1
CWECWE-670 (Implementação de fluxo de controle sempre incorreta)
CVECVE-2026-72705

Resumo da vulnerabilidade

O verificador de guarda aceita fixpoints que se passam a si mesmos como argumentos de ordem superior para outro fixpoint, que então os chama sobre não-subtermos do argumento estrutural. Passar uma função recursiva para uma Definition (constante não-fixpoint) é corretamente rejeitado — o verificador de guarda a desdobra e vê a chamada problemática. Mas passá-la para um Fixpoint é incorretamente aceito.

Isso cria um paradoxo no estilo de Russell em 4 linhas:

Definition delta (x : russell 1) : False := x x.
Definition omega : False := delta delta.

onde russell 1 é definicionalmente igual a russell 1 -> False — um tipo que é a sua própria negação. A autoaplicação dá False diretamente.

O exploit:

  • Não usa nenhum axioma, plugins ou recursos inseguros
  • Print Assumptions reporta "Closed under the global context"
  • A prova completa de False tem 4 linhas de código funcional
  • Sem táticas, sem Qed — puramente definicional

Uso

docker build -t rocq-cve-poc-21683 .
docker run --rm rocq-cve-poc-21683

Impacto

Qualquer sistema que confie nas provas verificadas pelo kernel do Rocq é afetado:

  • Software formalmente verificado: CompCert, CertiKOS, Iris, MathComp
  • Contratos inteligentes: ConCert, DeFi verificado
  • Provas geradas por IA: qualquer sistema que use o Rocq como backend confiável

Detalhes Técnicos

A Construção do Paradoxo

iterate_to_neg f n seed :=
  match n with
  | 0   => f seed -> False      (* negate after n steps *)
  | S m => iterate_to_neg f m seed
  end

russell n :=
  match n with
  | 0   => True
  | S m => iterate_to_neg russell 1 (S m)   (* passes ITSELF *)
  end

O verificador de guarda deveria rejeitar russell porque ele se passa como um argumento de ordem superior para iterate_to_neg, que então o chama em S m (não um subtermo de n). Mas o verificador rastreia apenas chamadas recursivas diretas, não chamadas através de argumentos de ponto fixo de ordem superior.

Redução

russell 1 = iterate_to_neg russell 1 1
          = iterate_to_neg russell 0 1
          = russell 1 -> False

Assim, russell 1 ≡ russell 1 -> False. Este é o conjunto de Russell clássico: o conjunto de todos os conjuntos que não contêm a si mesmos. A autoaplicação resulta em:

delta : russell 1 -> False    (* russell 1 = russell 1 -> False *)
delta x := x x                (* x : russell 1 = russell 1 -> False *)

omega : False
omega := delta delta           (* delta : russell 1 -> False = russell 1 *)

Descoberta

Este bug foi encontrado de forma autônoma pelo Claude Opus 4.6 durante uma execução de fuzzing noturna configurada por Tristan Stérin (@tcosmo), com base em indicações de Yannick Forster (@yforster) sobre o verificador de guardas. A IA identificou o padrão de contorno de ponto fixo de ordem superior e construiu o exploit mínimo iterate_to_neg/russell.

Veja: thread do Zulip

Créditos

  • Descoberta do bug: Claude Opus 4.6 (Anthropic), configuração por Tristan Stérin (@tcosmo)
  • Correção do kernel: PR #21684
  • Empacotamento do PoC: Jonathan Brossard (@endrazine)
Baixar ferramenta