
Artefatos semelhantes a correções com defeitos incorporados
Fix Like Artifacts with Embedded Defects
Um harness de pesquisa para medir quão bem agentes de IA corrigem vulnerabilidades.
Quickstart · Datasets · Documentation · Security model · Contributing
FLAWED faz o checkout de um projeto open-source em um commit sabidamente vulnerável, entrega a um agente de IA uma descrição do bug e pede que ele escreva um patch. O agente nunca vê a correção real do upstream.
Cada patch é então validado, auditado e avaliado em containers isolados, para que você possa ver não apenas se o modelo corrigiu o bug, mas se introduziu novos no processo.
flowchart LR
spec[bug spec] --> clone
clone["clone<br/>(open net)"] --> generate
generate["generate<br/>(offline)"] --> validate
validate["validate<br/>(offline)"] --> ast["ast<br/>(offline)"]
generate -.->|"patch.diff"| store[(Postgres)]
validate -.->|"verdict"| store
ast -.->|"summary"| store
store --> ui[web UI + notebook]Cada estágio roda em seu próprio container. Apenas o clone tem acesso à rede. Todo estágio posterior é restrito à API do provedor de LLM, para que os agentes não possam buscar dicas ou a correção do upstream durante a execução.
| Recurso | O que ele oferece |
|---|---|
| Amostragem repetida | Uma execução realiza N iterações da mesma entrada, então os resultados são distribuições, não anedotas. |
| Campanhas | Varra um bug por variantes de patcher e estilos de prompt, desde um vago "corrige isso pfv" até um advisory completo, e compare os resultados em um dashboard ao vivo. |
| Avaliação de resultados | Cada patch cai em um de cinco cenários, de S1 (correção limpa) a S5 (não corrigiu o bug e introduziu uma nova vulnerabilidade). |
| Validação cruzada | Os patches são reavaliados por outros modelos, e os números principais fazem a média das lentes de autovalidação e validação cruzada, para que o viés de um único juiz não domine. |
| Detecção de trapaça | Um auditor sinaliza iterações em que o agente encontrou a correção do upstream em vez de resolver o bug por conta própria. |
FLAWED coloca as CLIs Claude, Codex e Gemini frente a frente com as mesmas entradas.
[!WARNING] FLAWED monta o socket do Docker (equivalente a root no host) e executa código de terceiros não confiável dentro de seus containers de estágio. Execute-o em uma máquina em que você confie para suportar essa carga de trabalho. Veja
docs/security-model.md.
Você precisa do Docker, com o socket do daemon acessível.
# 1. Configure. Writes .env for you (data dir + provider API keys)
./setup.sh
# 2. Bring up the stack (Postgres, API + worker, web UI, notebook)
docker compose up --build
# 3. Open http://127.0.0.1:8080
Depois faça sua primeira execução.
bugs/. Arraste um para a página Bug Specs da web UI, ou use a CLI.
./scripts/import-all-bugs.sh
[!NOTE] A primeira execução contra um upstream grande (por exemplo, Chromium) é lenta. O estágio de validação clona o repositório inteiro uma vez para comparar com o patch real do upstream. O clone é armazenado em cache e reutilizado depois.
Você precisa do Docker, Node 20+, pnpm, uv e @devcontainers/cli (npm i -g @devcontainers/cli). Usuários de Nix podem usar nix-shell para tudo, exceto Docker.
make dev # uv sync + web deps
docker compose up -d postgres # FLAWED needs a Postgres to talk to
cp .env.example .env # points FLAWED_DB_URL at it
uv run flawed init # builds base images, creates the schema
uv run flawed serve # API + worker + webapp on port 8080
Para o ciclo de desenvolvimento web, execute make web-dev em um segundo terminal. Ele serve a UI na porta 5173 e faz proxy de /api para flawed serve.
Um devcontainer isolado para executar agentes de codificação de IA contra este repositório com segurança está documentado em .devcontainer/README.md.
Um bug spec é a unidade de entrada. Ele carrega um repositório, um commit vulnerável, uma descrição do bug, um reprodutor opcional e um conjunto de variantes de prompt que modelam como o bug poderia realisticamente ser reportado (achado de SAST, relatório de bug bounty, advisory embargado, PoC bruto, …). Specs são versionados e imutáveis, então o prompt e o veredito de uma execução histórica nunca mudam silenciosamente.
O contrato JSON está em bugs.schema.json e está documentado em docs/bug-specs.md. Todos os specs incluídos descrevem vulnerabilidades divulgadas publicamente e corrigidas no upstream.
O Postgres é a única fonte de verdade. Metadados de execução e bytes de artefatos (patches, vereditos, transcrições, logs) ficam no banco de dados, então uma implantação é totalmente capturada por seu DB. O diretório data/ é um espaço de rascunho transitório que os estágios montam em tempo de execução.
scripts/export_dataset.py e scripts/import_dataset.py (também disponíveis na web UI).scripts/export_artifacts.py.uv run alembic upgrade head roda automaticamente na inicialização).Publicamos datasets pré-construídos para que você possa carregar campanhas concluídas em vez de executar tudo por conta própria. Cada dataset é um .tar.gz de um snapshot completo, hospedado em https://flawed.s3.us-east-1.amazonaws.com.
Todas as campanhas em um único pacote.
| Pacote | Arquivo |
|---|---|
| Todas as campanhas | full.tar.gz |
| Campanha | Modelo patcher | Tamanho | Arquivo |
|---|---|---|---|
| CVE-2026-22738 (Spring AI SpEL injection) | claude-opus-4-8 | 515.0 MB | .tar.gz |
| CVE-2026-22738 (Spring AI SpEL injection) | gpt-5.5 | 663.9 MB | .tar.gz |
CVE-2026-31431 (Linux algif_aead) | claude-opus-4-8 | 1.1 GB | .tar.gz |
CVE-2026-31431 (Linux algif_aead in-place) | gpt-5.5 | 966.9 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | claude-opus-4-8 | 645.2 MB | .tar.gz |
| CVE-2026-34197 (ActiveMQ Jolokia RCE) | gpt-5.5 | 819.0 MB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | claude-opus-4-8 | 1.1 GB | .tar.gz |
| CVE-2026-45185 (Exim BDAT use-after-free) | gpt-5.5 | 1.0 GB |
Snapshots → Import datasets, cole um dos links de arquivo acima e clique em Find archives. FLAWED importa um link direto de .tar.gz como está e o descompacta em seus snapshots. Depois restaure-o a partir da lista de snapshots (a restauração é um passo separado, confirmado explicitamente).
A importação descobre vários arquivos de uma vez apenas quando a URL é um bucket listável ou uma página de índice de diretório. Nenhum dos casos se aplica aqui, então importe os links um de cada vez.
Baixe um arquivo, descompacte-o no diretório de snapshots (FLAWED_HOST_SNAPSHOT_DIR, ou ./flawed-snapshots por padrão), e ele aparecerá na lista de snapshots pronto para restaurar.
curl -LO https://flawed.s3.us-east-1.amazonaws.com/compressed/campaigns/full/cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz
mkdir -p "$FLAWED_HOST_SNAPSHOT_DIR"
tar -xzf cve-2026-45185-exim-bdat-uaf_full_gpt-5.5_1782988292.tar.gz -C "$FLAWED_HOST_SNAPSHOT_DIR"
Importar apenas prepara o pacote em disco. Restaurá-lo, o que substitui a implantação atual, é feito separadamente na página de snapshots.
| Doc | O que contém |
|---|---|
docs/architecture.md | Componentes, fluxo de dados, layout de armazenamento |
docs/pipeline.md | Os estágios, semântica de iteração, layout de container |
docs/security-model.md | Política de rede por estágio, sandboxing, modelo de ameaças |
docs/bug-specs.md | Contrato de entrada, composição de prompt, versionamento |
docs/cli.md | Referência do comando flawed + variáveis de ambiente |
docs/webapp.md | Tour pela UI |
docs/notebook.md | Integração com JupyterLab + o módulo auxiliar flawed |
packages/
flawed-core/ models, DB schema, settings
flawed-orchestrator/ run lifecycle, worker pool, devcontainer driver
flawed-stage-*/ the pipeline stages (clone, generate, validate, …)
flawed-agent-runner/ runs INSIDE the container (Claude / Codex / Gemini CLIs)
flawed-api/ FastAPI + SSE + notebook proxy
flawed-cli/ the `flawed` CLI
apps/web/ React + Vite + Tailwind webapp
containers/ base image, network lockdown, notebook container
bugs/ example bug specs
docs/ documentation (see above)
| Tarefa | Comando |
|---|---|
| Sincronizar todas as dependências Python + Node | make dev |
| Rodar testes | make test |
| Lint | make lint |
| Auto-formatação | make format |
| Servidor de desenvolvimento web (porta 5173) | make web-dev |
| Teste de fumaça E2E | make e2e |
Os testes precisam do Docker. Eles sobem seu próprio Postgres via testcontainers.
FLAWED é distribuído sob a MIT License. Contribuições são bem-vindas. Veja CONTRIBUTING.md, e por favor reporte problemas de segurança de forma privada conforme SECURITY.md.
.tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | claude-opus-4-8 | 500.7 MB | .tar.gz |
| CVE-2026-8512 (Chromium fsevents UAF) | gpt-5.5 | 342.7 MB | .tar.gz |
| freenginx-26 (Perl SV refcount UAF) | gpt-5.5 | 166.4 MB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | claude-opus-4-8 | 1.2 GB | .tar.gz |
| GHSA-wpqr-6v78-jr5g (Gemini CLI trust model) | gpt-5.5 | 1.3 GB | .tar.gz |