
Pipeline de remediación de vulnerabilidades C/C++ basado en evidencia + caso de estudio de http-parser (CVE-2024-22019-class). Núcleo en Python, consola React 19, suite de verificación de 17 pruebas.
Es un MVP que normaliza los hallazgos de vulnerabilidades en código C/C++ de protocolos y plataformas como evidencia reproducible, y valida parches candidatos en una copia aislada. code-shield era un nombre de trabajo con riesgo de colisión, por lo que se usó un nombre interno neutral para el paquete público y la CLI.
El centro de la implementación actual no es un modelo de generación de parches, sino el siguiente bucle cerrado de verificación.
sanitizer 또는 SARIF
-> Finding + EvidenceBundle
-> source context
-> manual/external-agent patch
-> 원본 재현
-> build
-> patched reproducer
-> tests
-> static rescan
-> bounded refuzz
-> protocol oracle
-> verified report
Finding, EvidenceBundle, PatchProposal y VerificationReportdetected → reproducible → contextualized → proposed → plausible → verifiedNo hay dependencias de Python en tiempo de ejecución.
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m unittest discover -s tests -v
Para ejecutar sin instalar:
PYTHONPATH=src python3 -m protocol_remediator --help
PYTHONPATH=src python3 -m unittest discover -s tests -v
La suite dinámica de extremo a extremo es una matriz de fixtures C/C++ en examples. Reproduce realmente CWE-121, CWE-190, CWE-416, CWE-787 y CWE-476 con Clang ASan/UBSan y, a continuación, ejecuta los seis gates para un parche que restaura cada invariante. La entrada y el alcance de verificación por fixture se documentan en examples/README.md.
Para ejecutar solo la matriz real sin el framework de pruebas unitarias:
PYTHONPATH=src python3 examples/run_fixture_matrix.py
Para generar y ejecutar automáticamente más variantes de ejemplo en C/C++:
PYTHONPATH=src python3 examples/run_generated_corpus.py --count 50
Este runner no usa unittest; pasa cada proyecto generado por el mismo VerificationPipeline. El resumen de resultados se guarda por defecto en artifacts/generated-corpus-summary.json.
El frontend Vite + React + TypeScript, que permite supervisar el estado actual de la implementación como un panel operativo, se encuentra en frontend. Esta consola reúne en una sola pantalla la matriz de fixtures, el corpus generado, la superficie de conexión con el servidor de API Hermes, los gates de verificación y los invariantes de seguridad de la evidencia.
cd frontend
npm install
npm run dev
El servidor de desarrollo por defecto es http://127.0.0.1:5173. La compilación de producción se comprueba con:
cd frontend
npm run build
protocol-remediator ingest-sanitizer \
--log asan.log \
--reproducer crash.input \
--target-name parser \
--revision 0123456789abcdef \
--variant asan-x86_64 \
--output intake/parser-crash
Salida:
intake/parser-crash/finding.json
intake/parser-crash/evidence.json
protocol-remediator ingest-sarif \
--sarif results.sarif \
--output intake/sarif
protocol-remediator export-sarif \
--finding intake/parser-crash/finding.json \
--finding intake/another/finding.json \
--output artifacts/findings.sarif
protocol-remediator context \
--finding intake/parser-crash/finding.json \
--evidence intake/parser-crash/evidence.json \
--target-root /path/to/target \
--output intake/parser-crash/context.json
protocol-remediator verify \
--config /path/to/target/target.toml \
--finding intake/parser-crash/finding.json \
--evidence intake/parser-crash/evidence.json \
--patch candidate.patch \
--artifacts artifacts
El código de salida es 0 si está verificado, 1 si la verificación falla y 2 si hay un error de configuración o de entrada.
Al levantar el servidor de API Hermes, remediate puede solicitar el parche a través de la API HTTP en lugar de un comando local. El endpoint por defecto es POST /v1/patches; recibe el hallazgo/evidencia/contexto y un archivo del workspace del target, y devuelve un diff unificado.
Ejecución del servidor de ejemplo:
PYTHONPATH=src python3 -m protocol_remediator.hermes_server \
--host 127.0.0.1 \
--port 8765
Tras la instalación, también se puede usar el console script.
hermes-agent-server --host 127.0.0.1 --port 8765
Para conectar un comando backend de producción, repite --backend-command por cada argumento. Se admiten los placeholders {context}, {workspace} y {patch_output}.
hermes-agent-server \
--backend-command my-patch-agent \
--backend-command --context \
--backend-command {context} \
--backend-command --workspace \
--backend-command {workspace} \
--backend-command --output \
--backend-command {patch_output}
En target.toml se especifica el modo Hermes de la siguiente manera:
[agent]
mode = "hermes"
url = "http://127.0.0.1:8765"
timeout_seconds = 30
A continuación, usa el comando remediate existente tal cual.
protocol-remediator remediate \
--config examples/length-prefixed-parser/target.hermes.toml \
--finding artifacts/hermes-cli-input/finding.json \
--evidence artifacts/hermes-cli-input/evidence.json \
--artifacts artifacts/hermes-cli
Para la comprobación end-to-end de desarrollo, ejecuta el siguiente runner. Este runner levanta un servidor Hermes temporal, recibe el parche mediante el cliente de API y ejecuta el bucle de verificación completo.
PYTHONPATH=src python3 examples/run_hermes_demo.py
Para invocar directamente un comando local sin usar Hermes, especifica el comando del agente como un array de cadenas en target.toml.
[agent]
mode = "command"
command = [
"my-patch-agent",
"--context",
"{context}",
"--workspace",
"{workspace}",
"--output",
"{patch_output}",
]
timeout_seconds = 900
A continuación, ejecuta el siguiente comando:
protocol-remediator remediate \
--config /path/to/target/target.toml \
--finding intake/parser-crash/finding.json \
--evidence intake/parser-crash/evidence.json \
--artifacts artifacts