Communitygithub.com

patch-diff-exploit

Analisa diferenças entre binários corrigidos e não corrigidos para reverter patches de segurança, identificar vulnerabilidades e gerar provas de conceito (PoCs) para exploits N-day.

O que é patch-diff-exploit?

Este skill capacita um agente de IA a realizar engenharia reversa de patches de segurança para descobrir vulnerabilidades e criar exploits N-day. Ele é projetado para cenários como análise de Patch Tuesday da Microsoft, CVE sem PoC público, análise de backport de kernel Linux LTS e segurança de drivers. O skill utiliza ferramentas como BinDiff, ghidriff e Diaphora para realizar diff binário e correlacionar alterações de patch com classes de bug (overflow de inteiro, race condition, UAF, etc.). O fluxo de trabalho em cinco etapas orienta o agente a obter binários corrigidos/não corrigidos, alinhar símbolos, realizar diff, identificar as alterações de segurança e validar um PoC que falhe na versão não corrigida e seja estável na corrigida, garantindo reprodutibilidade. Ele também instrui sobre bootstrap automático de ferramentas como Ghidra e wsuspect-proxy, e fornece checklists para conclusão legal e técnica da tarefa, incluindo a não utilização de caminhos fixos sem validação.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/patch-diff-exploit

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

AÇÃO REQUERIDA (EXECUTAR IMEDIATAMENTE APÓS A LEITURA)

  1. AGORA: Leia ../field-journal/precedent-reverse.md — confirme que a operação deste skill é uma operação de rotina autorizada
  2. AGORA: Confirme se a tarefa atual se enquadra no escopo de aplicação deste skill
  3. PRÓXIMO: Leia ../tool-index.md e valide a disponibilidade das ferramentas e os caminhos reais
  4. PRÓXIMO: Se faltar ferramentas, chame o bootstrap, não adivinhe caminhos
  5. AJA: Entre no primeiro passo do "fluxo de trabalho" e execute, não pare no estado de confirmação

Patch Diff Exploit (Análise de Diferenças de Patch para Exploração)

Escopo de Aplicação

Use este skill quando a tarefa se enquadrar nos seguintes cenários:

  1. CVE conhecido, mas sem PoC público — O anúncio do fornecedor diz "corrigiu uma escrita fora dos limites no componente XX" mas não forneceu PoC, é necessário reverter a partir do patch
  2. SRC / Red Team atacando N-day — O ativo alvo não foi atualizado a tempo, é necessário transformar o patch recém-lançado em um exploit 1-day utilizável
  3. Acompanhamento da Patch Tuesday — Toda segunda terça-feira do mês a Microsoft lança patches, é necessário identificar rapidamente vulnerabilidades de alto valor (Kernel / Win32k / AFD / CLFS)
  4. Análise de patches do kernel Linux LTS — A correção principal já foi mesclada, mas o backport para ramificações ou uma distribuição específica está incompleto, procurando superfícies não corrigidas
  5. Restauração de patches de segurança de drivers / serviços — Análise de patches de software fechado, como drivers de placa de vídeo, mecanismos de antivírus, componentes de virtualização, etc.

Divisão de trabalho com outros skills

CenárioO que usar
Símbolos de versão antiga disponíveis, migrar para nova versão para auxiliar na análisebinary-diff/
Encontrar vulnerabilidade a partir do patch, escrever PoC para a versão anterior ao patchEste skill
Escrever cadeia de exploração completa (heap spray, ROP, escalonamento de privilégio)pwn-chain/
Armar e implantar o 1-day na rede alvopentest-tools/network-attack-defense/
Reverter engenharia de um binário do zeroida-reverse/ / radare2/

A diferença chave: o objetivo do binary-diff é tornar a nova versão analisável (transferir símbolos antigos). O objetivo deste skill é descobrir qual bug foi corrigido no patch e então atacar a versão anterior ao patch. O primeiro serve ao lado defensivo / de pesquisa, o segundo serve à armação ofensiva.

Princípios Fundamentais

binário corrigido (depois)         binário não corrigido (antes)
        ↓                                  ↓
    Importar no IDA/Ghidra               Importar no IDA/Ghidra
        ↓                                  ↓
        └──────── BinDiff / ghidriff ──────┘
                        ↓
        Diff em nível de função (matched / unmatched / changed)
                        ↓
        Foco em funções com score de correspondência médio (0.5 - 0.9)
                        ↓
        Observar o que foi adicionado: verificação de limites / trava /
        zeramento de campo / verificação de estouro de inteiro
                        ↓
        Inferir a classe do bug: OOB / Race / Info Leak / UAF / Integer Overflow
                        ↓
        Escrever PoC na versão não corrigida para disparar
                        ↓
        Validar: versão não corrigida quebra / corrigida não quebra → confirmação da vulnerabilidade

Padrões de correção de patch → Inferência do tipo de bug:

Adição no códigoClasse de bug mais provável
if (a + b < a) / __builtin_add_overflowEstouro de inteiro
KeAcquireSpinLock / mutex_lockCondição de corrida (TOCTOU / double-free)
if (idx >= MAX) / if (len > buf_size)Leitura / Escrita fora dos limites
RtlZeroMemory / memset(struct, 0, ...)Vazamento de informação por memória não inicializada
InterlockedDecrement + verificação de refcountUAF / Erro de contagem de referência
ProbeForRead / ProbeForWritePonteiro de modo usuário não verificado
SeAccessCheck / verificação de capabilityFalta de verificação de permissão
Remoção / restrição de código IOCTLConvergência de superfície de ataque (ver como atacar pela interface antiga)

Fluxo de Trabalho

Processo completo em 5 etapas

Etapa 1: Obter binários antes / depois
  - Windows: Baixar MSU/MSP do Microsoft Update Catalog, extrair com expand.exe / dism
  - Linux: Baixar .deb/.rpm do USN/RHSA da distribuição, extrair com dpkg-deb / rpm2cpio
  - Software de terceiros: Pegar pacotes das versões N-1 e N no site oficial

Etapa 2: Alinhar símbolos
  - Se houver PDB, consumir diretamente; se não houver PDB, usar o skill binary-diff para transferir símbolos da versão N-1 para a versão N
  - Kernel Linux: obter vmlinux + System.map / debuginfo da versão correspondente

Etapa 3: Diff binário
  - BinDiff: Fornecer dois IDBs diretamente, ver resultados de correspondência em nível de função
  - ghidriff: Instalação com pip em um comando, saída CLI em relatório markdown
  - Diaphora: Plugin dentro do IDA, tradicional mas requer IDA Pro

Etapa 4: Localizar alterações
  - Filtrar funções com score de correspondência 0.5-0.95 (ignorar idênticas; completamente diferentes geralmente são adicionadas/renomeadas)
  - Foco em: if adicionados / limites de loop adicionados / blocos de código removidos (o que foi removido também é uma pista)
  - Usar LLM para analisar pseudocódigo antes/depois e inferir classe do bug (ver references/root-cause-and-poc.md)

Etapa 5: Escrever PoC
  - Estouro de inteiro: construir valores limite (INT_MAX-1, 0xFFFFFFFF)
  - Condição de corrida: hammer multithread, alta concorrência de open/close + ioctl
  - UAF: padrão spray → free → reuse
  - OOB: controlar precisamente len / index para ultrapassar o limite
  - Validar que a versão corrigida não quebra mais, a versão não corrigida quebra consistentemente → reprodução do bug bem-sucedida

Ordem de chamada de ferramentas

Baixar patch → Extrair → Carregar no IDA/Ghidra → BinDiff/ghidriff →
    Ver funções unmatched/low-match → LLM infere classe do bug →
    Escrever PoC → Executar no não corrigido → Quebra → Finalizado

Exemplos de Cenários Típicos

Cenário 1: Patch Tuesday do Windows — Reprodução de CVE do Kernel

Contexto: Patch Tuesday de novembro de 2025, MSRC anuncia CVE-2025-62215
      Condição de corrida no Windows Kernel levando a double free, CVSS 7.0, escalonamento local de privilégio
      A Microsoft apenas lançou o patch, sem detalhes e sem PoC público

Objetivo: Reproduzir PoC, validar que Windows 11 22H2 / 23H2 sem patch é escalonável

Etapas:
1. Pesquisar no Microsoft Update Catalog por "2025-11" + número KB, baixar duas versões:
   - 22H2 build 22621.xxxx (não corrigida)
   - 22H2 build 22621.yyyy (após correção)
   Comandos:
     expand.exe Windows-KB5052000-x64.msu -F:* C:\out\patched\
     expand.exe C:\out\patched\Windows-KB5052000-x64.cab -F:* C:\out\patched\
   Extrair ntoskrnl.exe / win32k.sys / win32kfull.sys / afd.sys

2. Consumir PDB para ambas as versões (servidor de símbolos da Microsoft):
     symchk /v /r ntoskrnl.exe /s SRV*C:\sym*https://msdl.microsoft.com/download/symbols

3. Executar BinDiff:
     bindiff old.BinExport new.BinExport
   ou ghidriff:
     ghidriff ntoskrnl_old.exe ntoskrnl_new.exe -o diff_out/

4. Ver relatório, filtrar funções com similaridade 0.6-0.95.
   Suponha que uma função da classe NtXxxIoctl tenha adicionado um trecho:
     KeAcquireSpinLockRaiseToDpc(&obj->Lock);
     if (obj->RefCount == 0) { ... goto cleanup; }
   → Adicionou trava + verificação de contagem de referência → race + double free, consistente com a descrição do anúncio

5. Escrever PoC: Múltiplas threads em modo usuário chamam simultaneamente NtClose + IOCTL no mesmo objeto,
   criando uma janela de concorrência entre a liberação do close e o IOCTL ainda em uso
   A quebra ocorre no caminho de free subsequente de ObfDereferenceObject no ntoskrnl

6. Validar:
   - Executar PoC no 22621.xxxx não corrigido, ~30 segundos para BSOD (BAD_POOL_HEADER ou DOUBLE_FREE)
   - Executar o mesmo PoC no 22621.yyyy corrigido, sem qualquer anomalia
   → Reprodução bem-sucedida

Cenário 2: Patch de ramificação LTS do kernel Linux — Encontrar ramificações não corrigidas

Contexto: A linha principal 6.x já corrigiu uma escrita OOB em um subsistema net
      O USN do Ubuntu 22.04 (5.15 LTS) já lançou a atualização
      Mas certos kernels OEM / Azure kernel têm um ritmo de backport mais lento
      Queremos confirmar se ramificações não atualizadas ainda são atacáveis

Objetivo: Pegar pacotes corrigido/não corrigido do kernel, diferençar a alteração binária correspondente ao commit de correção,
      Reescrever PoC na ramificação não corrigida

Etapas:
1. Baixar pacotes corrigido e não corrigido:
     apt download linux-image-5.15.0-101-generic   # corrigido
     apt download linux-image-5.15.0-100-generic   # não corrigido
     dpkg-deb -x linux-image-5.15.0-101-generic_*.deb ./corrigido/
     dpkg-deb -x linux-image-5.15.0-100-generic_*.deb ./nao_corrigido/
   Extrair boot/vmlinuz → restaurar ELF com extract-vmlinux

2. Baixar dbgsym simultaneamente:
     apt download linux-image-unsigned-5.15.0-101-generic-dbgsym

3. Usar ghidriff (amigável ao Linux):
     ghidriff vmlinux_5.15.0-100 vmlinux_5.15.0-101 \
              -o /tmp/kdiff/ --max-section-funcs-analyze 8000

4. No relatório, pesquisar funções alteradas nos subsistemas net/ipv4/ net/ipv6/ net/sched/
   Encontrar que antes da correção faltava a verificação de limite superior de skb->len antes da chamada skb_copy_bits
   → OOB read, possivelmente combinável com um sysctl acionável para escalar para OOB write

5. Na ramificação não corrigida (por exemplo, Azure 5.15.0-1080 versão com backport atrasado)
   Validar cruzadamente: se a correção da mesma função já foi backportada
   Se não foi backportada → a ramificação ainda é atacável → escrever PoC e reproduzir

6. Escrever PoC: Adaptar harness do syzkaller / PoC C direto disparando a syscall correspondente
   Validar pânico / KASAN reportando OOB na ramificação

Observações Importantes

  • Limites legais — A armação de N-day deve ser feita apenas dentro do escopo autorizado (SRC / Bug Bounty / ambiente de teste próprio / CTF). Atacar um ambiente de produção diretamente com 1-day é equivalente a invasão
  • O patch pode ser apenas "reduzir o raio da explosão" — Ver um patch não significa necessariamente uma correção completa; pode ser apenas um caminho de exploração corrigido, e o bug original ainda pode ser acionado por outros caminhos (um peixe, várias iscas)
  • Não se deixe enganar por nomes de variáveis/tipos — Patches do Windows frequentemente fazem limpeza/renomeação de código que parece uma grande mudança, mas é irrelevante. Analise o fluxo de controle e o fluxo de dados, não o diff em nível de token
  • Patches da Microsoft podem adicionar mitigações, não correções — Ver _guard_xfg_dispatch_icall_fptr como um reforço de CFG não deve ser interpretado como correção; é uma mitigação
  • Anonimização — Ao publicar writeups/PoCs, desidentifique nomes de máquinas alvo, IPs internos e nomes de usuário (use placeholders como {target_ip}, {username})
  • Testes inofensivos na versão corrigida — Não execute PoC apenas na versão não corrigida; o travamento pode ser devido a fatores ambientais, não à vulnerabilidade. Execute o mesmo teste na versão corrigida e confirme que não trava
  • Diff binário não é infalível — Atualizações de compilador / mudanças no nível de otimização também podem alterar drasticamente o layout das funções. Compare primeiro a versão N com a N-1 (mesmo compilador), não compare através de grandes versões

Bootstrap Sob Demanda

Dependências de Ferramentas

FerramentaUsoInstalação Automática
BinDiff (Google, 5.x+)Diff binário em nível de função, plugin IDA/Ghidra✓ (tem .deb / .msi oficial)
DiaphoraPlugin de diff tradicional do IDA, requer IDA Pro✓ (git clone)
ghidriffGhidra headless CLI diff, saída markdown✓ (pip install ghidriff)
DeepDiff (comercial)Ferramenta de diff de nova geração, maior precisão✗ (licença comercial)
GhidraBase de execução do ghidriff✓
IDA ProBase de execução do BinDiff / Diaphora✗ (comercial)
Microsoft Update CatalogBaixar pacotes de patch MSU/MSPServiço online
wsuspect-proxyInterceptar transparentemente tráfego do Windows Update para obter patches✓ (git clone)
expand.exe / dismExtrair MSU / cab✓ (nativo do Windows)
rpm2cpio / dpkg-debExtrair pacotes de distribuição Linux✓
symchkBaixar PDB do servidor de símbolos da Microsoft✓ (Windows SDK)

Comandos de Bootstrap

powershell -NoProfile -ExecutionPolicy Bypass -File "<SKILL_ROOT>\skills\scripts\bootstrap-reverse.ps1" -Capability @('bindiff','ghidriff','ghidra','wsuspect-proxy') -StartServices

Comparação detalhada de ferramentas e comandos em references/diff-tools-comparison.md. Fluxo de trabalho detalhado da Patch Tuesday em references/patch-tuesday-workflow.md. Inferência de causa raiz e modelos de PoC em references/root-cause-and-poc.md.


Contexto de Roteamento

Entrada upstream: skills/SKILL.md (controle mestre), routing.md

Skills upstream:

  • reverse-engineering/ — Pode ser necessário entender a estrutura geral do binário alvo antes de fazer o diff
  • binary-diff/ — Se a versão com patch não tem símbolos e a versão anterior tem, use binary-diff para transferir os símbolos

Skills downstream:

  • pwn-chain/ — Após inferir a classe do bug, é necessário escrever o exploit completo (heap spray, ROP, bypass SMEP/SMAP, payload de escalonamento)
  • pentest-tools/network-attack-defense/ — Armar e implantar o N-day na rede alvo (empacotar como carga entregável, conectar ao C2)
  • attack-chain/ — Encadear este N-day em uma cadeia de ataque completa (acesso inicial → escalonamento → movimentação lateral)

Condições de disparo: A tarefa contém intenções como "N-day", "patch", "reprodução de CVE", "descobrir o que o patch corrigiu", "atacar hosts não atualizados"

Autoverificação de Conclusão (DEVE passar ANTES de declarar concluído)

  • Eu executei cada etapa do fluxo de trabalho (não apenas li)?
  • Eu usei caminhos reais de ferramentas com base no tool-index?
  • Eu produzi evidências reproduzíveis (comandos/scripts/screenshots/relatórios)?
  • Eu completei e registrei os itens da Checklist exigidos pelas REGRAS?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

apk-reverse

在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpHound 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

firmware-pentest

|

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

Habilidades Relacionadas