Communitygithub.com

patch-diff-exploit

Analiza parches de seguridad para identificar vulnerabilidades y desarrollar PoCs funcionales contra versiones sin parchear.

¿Qué es patch-diff-exploit?

Esta habilidad está diseñada para ingenieros de seguridad ofensiva y cazadores de vulnerabilidades que necesitan convertir parches de seguridad en exploits funcionales (1-day). Funciona con binarios de Windows (actualizaciones de Patch Tuesday del kernel, win32k, AFD, CLFS) y Linux (parches LTS, backports incompletos de distribuciones) mediante la comparación directa de binarios parcheados y sin parchear. Utiliza herramientas como BinDiff, ghidriff o Diaphora para identificar funciones modificadas, luego busca patrones característicos de tipos de vulnerabilidad (desbordamiento de enteros, condiciones de carrera, UAF, OOB, fugas de información) basándose en las inserciones de código típicas (como comprobaciones de límites, bloqueos, zerificaciones de memoria). El flujo incluye la descarga de parches desde el Catálogo de Actualizaciones de Microsoft o USN/RHSA de distribuciones, la extracción de binarios, el alineamiento de símbolos (con PDB o mediante la habilidad binary-diff), el diff binario, la localización de cambios y finalmente la escritura de un PoC que se bloquee de forma estable en la versión sin parchear pero no en la parcheada. Incluye escenarios detallados para CVE del kernel de Windows y parches de la rama LTS de Linux, y proporciona una tabla de mapeo entre patrones de parche y clases de vulnerabilidad para acelerar el análisis inverso.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

ACTION REQUIRED (leer y ejecutar inmediatamente)

  1. NOW: Lee ../field-journal/precedent-reverse.md — confirma que la operación de este skill está autorizada como práctica habitual.
  2. NOW: Confirma si la tarea actual cumple con el ámbito de aplicación de este skill.
  3. NEXT: Lee ../tool-index.md y verifica la disponibilidad de las herramientas y sus rutas reales.
  4. NEXT: Si faltan herramientas, invoca bootstrap. No adivines rutas.
  5. ACT: Entra en el primer paso del "flujo de trabajo" y ejecútalo, no te quedes en estado de confirmación.

N-day: Análisis de Parches a Exploit (Patch Diff Exploit)

Ámbito de aplicación

Usa este skill cuando la tarea corresponda a uno de los siguientes escenarios:

  1. CVE conocido sin PoC público — El anuncio del fabricante dice "se corrigió una escritura fuera de límites en el componente XX" pero no proporciona PoC; hay que deducir el bug a partir del parche.
  2. SRC / Red Team atacando N-day — Los activos objetivo no se actualizaron a tiempo; hay que convertir un parche recién publicado en un exploit 1-day utilizable.
  3. Seguimiento de Patch Tuesday — El segundo martes de cada mes Microsoft publica parches; hay que identificar rápidamente vulnerabilidades de alto valor (Kernel / Win32k / AFD / CLFS).
  4. Análisis de parches LTS de Linux — La corrección ya se fusionó en la rama principal, pero los backports para ramas secundarias o distribuciones específicas están incompletos; buscar superficies sin parchear.
  5. Reversión de parches de seguridad en drivers/servicios — Análisis de parches en software cerrado como drivers de GPU, motores antivirus, componentes de virtualización.

División del trabajo con otros skills

EscenarioQué usar
Símbolos de versión antigua disponibles para migrar a la nueva y ayudar al análisisbinary-diff/
Encontrar vulnerabilidades desde un parche y escribir PoC para la versión anterior al parcheEste skill
Escribir la cadena de explotación completa (heap spray, ROP, escalada de privilegios)pwn-chain/
Armar un 1-day y desplegarlo en la red objetivopentest-tools/network-attack-defense/
Reversear un binario desde ceroida-reverse/ / radare2/

La diferencia clave: el objetivo de binary-diff es hacer analizable la nueva versión (trasladar símbolos antiguos a la nueva), mientras que el objetivo de este skill es identificar qué bug corrigió el parche y luego explotar la versión anterior al parche. El primero sirve al lado defensivo / de investigación; el segundo sirve a la weaponización ofensiva.

Principio fundamental

ejecutable parcheado (after)         ejecutable sin parchear (before)
        ↓                                         ↓
    Importar en IDA/Ghidra               Importar en IDA/Ghidra
        ↓                                         ↓
        └──────── BinDiff / ghidriff ────────────┘
                        ↓
        Diff a nivel de funciones (matched/unmatched/changed)
                        ↓
        Enfocar funciones con puntuación de coincidencia media (0.5 - 0.9)
                        ↓
        Buscar qué se añadió: comprobaciones de límites / bloqueos /
        puesta a cero de campos / comprobaciones de desbordamiento de enteros
                        ↓
        Deducir la clase de bug: OOB / Race / Info Leak / UAF / Integer Overflow
                        ↓
        Escribir PoC para la versión sin parchear que lo desencadene
                        ↓
        Validar: la versión sin parchear crashea / la parcheada no → vulnerabilidad confirmada

Patrón de fix del parche → tipo de vulnerabilidad inverso:

Código añadidoTipo de bug probable
if (a + b < a) / __builtin_add_overflowDesbordamiento de enteros
KeAcquireSpinLock / mutex_lockCondición de carrera (TOCTOU / double-free)
if (idx >= MAX) / if (len > buf_size)Lectura / escritura fuera de límites
RtlZeroMemory / memset(struct, 0, ...)Fuga de información por memoria no inicializada
InterlockedDecrement + verificación de refcountUAF / error en contador de referencias
ProbeForRead / ProbeForWritePuntero de modo usuario no verificado
SeAccessCheck / verificación de capabilitiesFalta de verificación de permisos
Eliminación / restricción de código IOCTLReducción de superficie de ataque (ver cómo atacar la interfaz antigua)

Flujo de trabajo

Proceso completo en 5 pasos

Paso 1: Obtener los binarios before/after
  - Windows: Descargar MSU/MSP del Catálogo de Actualizaciones de Microsoft,
    extraer con expand.exe / dism
  - Linux: Obtener .deb/.rpm desde USN/RHSA de la distribución,
    extraer con dpkg-deb / rpm2cpio
  - Software de terceros: Obtener los paquetes de instalación N-1 y N del sitio oficial

Paso 2: Alinear símbolos
  - Si hay PDB, cargarlos directamente. Si no, usar el skill binary-diff
    para trasladar los símbolos de la versión N-1 a la versión N.
  - Kernel de Linux: obtener vmlinux + System.map / debuginfo de la versión correspondiente

Paso 3: Diff binario
  - BinDiff: darle dos IDB, ver el resultado de coincidencia a nivel de función
  - ghidriff: instalar con pip, CLI genera informe en markdown
  - Diaphora: plugin para IDA, veterano pero requiere IDA Pro

Paso 4: Localizar cambios
  - Filtrar funciones con puntuación de coincidencia 0.5-0.95 (las idénticas no interesan,
    las completamente diferentes suelen ser nuevas o renombradas)
  - Enfocarse en: nuevos if / nuevos límites de bucle / bloques de código eliminados
    (lo que se eliminó también es una pista)
  - Usar LLM para revisar el pseudocódigo before/after y deducir la clase de bug
    (ver references/root-cause-and-poc.md)

Paso 5: Escribir PoC
  - Desbordamiento de enteros: construir valores límite (INT_MAX-1, 0xFFFFFFFF)
  - Condición de carrera: hammer multihilo, abrir/cerrar + ioctl en alta concurrencia
  - UAF: patrón spray → free → reuse
  - OOB: control preciso de len / index para cruzar el límite
  - Validar: la versión parcheada ya no crashea, la sin parchear crashea establemente
    → bug reproducido exitosamente

Orden de invocación de herramientas

Descargar parche → Extraer → Cargar en IDA/Ghidra → BinDiff/ghidriff →
Observar funciones sin coincidencia / con baja coincidencia →
LLM deduce clase de bug → Escribir PoC → Ejecutar en versión sin parchear → Crashea → Terminado

Ejemplos de escenarios típicos

Escenario 1: Patch Tuesday de Windows — Replicación de CVE del kernel

Contexto: Noviembre 2025 Patch Tuesday, MSRC anuncia CVE-2025-62215
          Condición de carrera en el kernel de Windows que provoca double free, CVSS 7.0,
          escalada local de privilegios
          Microsoft solo publicó el parche, sin detalles ni PoC público

Objetivo: Replicar el PoC, verificar que Windows 11 22H2 / 23H2 sin parchear
          es vulnerable a escalada de privilegios

Pasos:
1. Buscar "2025-11" + KB en el Catálogo de Actualizaciones de Microsoft,
   descargar dos versiones:
   - 22H2 build 22621.xxxx (sin parchear)
   - 22H2 build 22621.yyyy (parcheada)
   Comandos:
     expand.exe Windows-KB5052000-x64.msu -F:* C:\out\patched\
     expand.exe C:\out\patched\Windows-KB5052000-x64.cab -F:* C:\out\patched\
   Extraer ntoskrnl.exe / win32k.sys / win32kfull.sys / afd.sys

2. Cargar PDB para ambas versiones (servidor de símbolos de Microsoft):
     symchk /v /r ntoskrnl.exe /s SRV*C:\sym*https://msdl.microsoft.com/download/symbols

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

4. Revisar el informe, filtrar funciones con similitud 0.6-0.95.
   Supongamos que se localiza una función tipo NtXxxIoctl con un nuevo bloque:
     KeAcquireSpinLockRaiseToDpc(&obj->Lock);
     if (obj->RefCount == 0) { ... goto cleanup; }
   → Se añadió un bloqueo + verificación de refcount → race + double free,
     coincide con la descripción del anuncio

5. Escribir PoC: múltiples hilos en modo usuario llamando simultáneamente
   a NtClose + desencadenando el IOCTL del mismo objeto,
   creando una ventana de carrera entre la liberación en close y el uso en IOCTL
   Crashea en la ruta de free posterior de ObfDereferenceObject en ntoskrnl

6. Validar:
   - Ejecutar PoC en 22621.xxxx sin parchear → BSOD en ~30 segundos
     (BAD_POOL_HEADER o DOUBLE_FREE)
   - Ejecutar el mismo PoC en 22621.yyyy parcheada → sin anomalías
   → Replicación exitosa

Escenario 2: Parche de kernel Linux en rama LTS — encontrar ramas secundarias sin parchear

Contexto: La rama principal 6.x ya corrigió una escritura OOB en cierto subsistema net
          Ubuntu 22.04 (5.15 LTS) ya publicó actualización en su USN
          Pero ciertos kernels OEM / kernel Azure tienen un ritmo de backport más lento
          Se quiere verificar si las ramas secundarias sin actualizar siguen siendo explotables

Objetivo: Obtener kernels parcheado y sin parchear, diferenciar el cambio binario del
          fix commit, reescribir el PoC para la rama secundaria sin parchear

Pasos:
1. Descargar paquetes parcheado y sin parchear:
     apt download linux-image-5.15.0-101-generic   # parcheado
     apt download linux-image-5.15.0-100-generic   # sin parchear
     dpkg-deb -x linux-image-5.15.0-101-generic_*.deb ./patched/
     dpkg-deb -x linux-image-5.15.0-100-generic_*.deb ./unpatched/
   Extraer boot/vmlinuz → usar extract-vmlinux para restaurar ELF

2. Obtener dbgsym simultáneamente:
     apt download linux-image-unsigned-5.15.0-101-generic-dbgsym

3. Usar ghidriff (amigable con Linux):
     ghidriff vmlinux_5.15.0-100 vmlinux_5.15.0-101 \
              -o /tmp/kdiff/ --max-section-funcs-analyze 8000

4. En el informe, buscar funciones changed en subsistemas net/ipv4/ net/ipv6/ net/sched/ etc.
   Encontrar que antes del parche faltaba la verificación del límite superior de skb->len
   antes de llamar a skb_copy_bits
   → OOB read, potencialmente combinable con un sysctl desencadenable
     para convertirlo en OOB write

5. En la rama secundaria sin parchear (por ejemplo, Azure 5.15.0-1080 con backport atrasado):
   Verificar de forma cruzada si el mismo fix de la función ya está backportado.
   Si no lo está → la rama secundaria sigue siendo explotable → escribir PoC para replicar

6. Escribir PoC: adaptar un harness de syzkaller / PoC en C que desencadene la syscall
   correspondiente. Verificar que la rama secundaria haga panic / KASAN reporte OOB.

Notas importantes

  • Límites legales — La weaponización de N-day debe realizarse solo bajo autorización (SRC / Bug Bounty / máquinas objetivo propias / CTF). Atacar directamente un 1-day en un entorno productivo equivale a intrusión.
  • El parche puede ser solo "reducir el radio de explosión" — Ver un parche no significa necesariamente que sea la corrección completa; podría tapar solo una ruta de explotación, dejando el bug original aún accesible por otras rutas (un pez, dos comidas).
  • No dejarse engañar por nombres de variables/tipos — Los parches de Windows a menudo incluyen limpieza/renombrado que parecen cambios grandes pero son irrelevantes. Hay que observar el flujo de control y datos, no el diff a nivel de token.
  • Los parches de Microsoft pueden añadir una mitigación, no un fix — Ver _guard_xfg_dispatch_icall_fptr (fortalecimiento CFG) no debe considerarse un fix, es una mitigación.
  • Anonimización — Al publicar writeups/PoCs, desensibilizar nombres de máquina objetivo, IPs internas, nombres de usuario (usar marcadores {target_ip} {username}).
  • En la versión parcheada debe poder ejecutarse una prueba inofensiva — No ejecutar solo en la versión sin parchear; de lo contrario, el crash podría deberse a factores del entorno, no a la vulnerabilidad.
  • El diff binario no es omnipotente — La actualización del compilador o cambios en el nivel de optimización pueden alterar drásticamente el layout de las funciones. Comparar la versión N con la N-1 (mismo compilador), no entre versiones mayores.

Bootstrap bajo demanda

Dependencias de herramientas

HerramientaPropósitoInstalación automática
BinDiff (Google, 5.x+)Diff binario a nivel de función, plugin IDA/Ghidra✓ (tiene .deb / .msi oficial)
DiaphoraPlugin de diff para IDA, veterano, requiere IDA Pro✓ (git clone)
ghidriffDiff headless para Ghidra, salida markdown✓ (pip install ghidriff)
DeepDiff (comercial)Herramienta de diff de nueva generación, mayor precisión✗ (licencia comercial)
GhidraBase de ejecución de ghidriff✓
IDA ProBase de ejecución de BinDiff / Diaphora✗ (comercial)
Catálogo de Actualizaciones de MicrosoftDescargar paquetes de parche MSU/MSPServicio en línea
wsuspect-proxyInterceptar tráfico de Windows Update para obtener parches✓ (git clone)
expand.exe / dismExtraer MSU / cab✓ (incluido en Windows)
rpm2cpio / dpkg-debExtraer paquetes de distribuciones Linux✓
symchkObtener PDB desde el servidor de símbolos de Microsoft✓ (Windows SDK)

Comando de bootstrap

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

Comparativa detallada de herramientas y comandos en references/diff-tools-comparison.md. Flujo detallado de Patch Tuesday en references/patch-tuesday-workflow.md. Deducción de causa raíz y plantillas de PoC en references/root-cause-and-poc.md.


Contexto de enrutamiento

Entrada upstream: skills/SKILL.md (controlador principal), routing.md

Skills upstream:

  • reverse-engineering/ — Antes de hacer el diff, puede ser necesario entender la estructura general del binario objetivo.
  • binary-diff/ — Si la versión parcheada no tiene símbolos y la anterior sí, usar binary-diff primero para trasladar los símbolos.

Skills downstream:

  • pwn-chain/ — Una vez deducida la clase de bug, escribir el exploit completo (heap spray, ROP, bypass SMEP/SMAP, payload de escalada de privilegios).
  • pentest-tools/network-attack-defense/ — Armar el N-day y desplegarlo en la red objetivo (empaquetar como carga útil entregable, conectar a C2).
  • attack-chain/ — Integrar este N-day en una cadena de ataque completa (acceso inicial → escalada → movimiento lateral).

Condiciones de activación: La tarea contiene intenciones como "N-day", "parche", "replicar CVE", "encontrar qué corrigió el parche", "atacar hosts sin actualizar"

Autoverificación de finalización de tarea (DEBE pasar antes de declarar finalización)

  • ¿Ejecuté cada paso del flujo de trabajo (no solo lo leí)?
  • ¿Usé rutas de herramientas reales basadas en tool-index?
  • ¿Produje evidencia reproducible (comandos/scripts/capturas de pantalla/informes)?
  • ¿Completé y registré los elementos del Checklist requeridos por RULES?

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.

Skills relacionados