Cyber Knowledge · Domain 04 of 11 · Practitioner field guide

Vulnerability Research & Exploit Development

A source-backed, lab-first guide to finding weaknesses, proving security impact, engineering reliable test cases, helping maintainers remediate root causes, and verifying that fixes survive regression—without turning research into uncontrolled weaponization.

Authorization boundary

Use only systems, software, accounts, devices, and data you own or are explicitly authorized to test. Keep exploitability work inside an isolated lab, prefer the least harmful proof, stop when impact is established, protect embargoed material, and follow the vendor or program disclosure policy.

Version 1.0 Published Source review: Status: maintained practitioner guide Maintained by Andrey Pautov Editorial policy and corrections

Prerequisites

Technical foundations

6 reference models

Good research begins with precise models. These foundations prevent tool output from being mistaken for proof and make results portable across source, binary, web, mobile, firmware, and AI-enabled systems.

Weakness, vulnerability, and exposure

A weakness is a condition that can contribute to a security failure; CWE supplies the shared vocabulary. A vulnerability is a specific instance with security consequence under defined conditions. An exposure makes an interface reachable but does not prove a defect. A misconfiguration may itself be the vulnerability or only change exploitability.

Write claims as: subject + affected versions + reachable interface + violated property + attacker preconditions + consequence + evidence. Avoid “vulnerable” without a subject, version, and supported impact.

State machines and trust boundaries

Most non-memory vulnerabilities are invalid state transitions or misplaced authority. Model principals, objects, privileges, tenants, sessions, inputs, outputs, and transitions. Mark where data changes trust level: parser boundary, IPC call, service-to-service request, deserialization, file import, plug-in load, update verification, model context, or tool invocation.

Test invariants, not only endpoints: “tenant A cannot name tenant B’s object,” “a revoked session cannot refresh,” and “untrusted metadata cannot select an executable path.”

Memory and execution model

Understand virtual memory, stack and heap allocation, object lifetime, alignment, endianness, calling convention, registers, instruction pointer, compiler optimization, exceptions, signals, and loader behavior. Source-level intent and optimized machine behavior can differ; undefined behavior gives the compiler latitude that invalidates intuitive reasoning.

Use debug builds for comprehension and production-like builds for confirmation. Record architecture, compiler, flags, allocator, libraries, and enabled mitigations.

Concurrency and temporal correctness

Race conditions arise from ordering, not merely simultaneous requests. Model ownership and atomicity across threads, processes, queues, distributed services, retries, caches, locks, reference counts, and asynchronous callbacks. A time-of-check/time-of-use flaw, stale authorization decision, double completion, or use-after-free may vanish under a debugger.

Preserve schedules, timestamps, thread IDs, request IDs, retry count, and system load. Repeat statistically rather than reporting a single lucky interleaving.

Measurement and uncertainty

Coverage is evidence about exercised code, not proof of safety. A fuzzer’s executions per second, edge coverage, corpus size, and unique crash count are only useful with a stable target and deduplication. Static tools trade false positives and false negatives differently. Dynamic tools see executed paths only.

State what was not observed, what could not be built, and which assumptions remain. Confidence should increase through independent confirmation, not through repeated copies of the same tool finding.

Safe research environment

Use isolated networks, disposable snapshots, synthetic data, non-production credentials, resource limits, egress control, immutable originals, and a documented reset path. Treat samples, crash files, firmware, symbols, proprietary source, and AI prompts as potentially sensitive or hostile.

Do not upload embargoed artifacts to public scanners or third-party AI services. Verify licenses and export, privacy, customer, bug-bounty, and employer rules before analysis.

Primary references: MITRE CWE · MITRE vulnerability theory · NIST SSDF 1.1

Module 1

Research governance, authorization, and safety

scope before tooling

Module 2

Weakness taxonomy and vulnerability identity

classify without collapsing concepts

Module 3

Reproducible research laboratory

identity, isolation, and observability

Module 4

Source review and static analysis

architecture before alerts

Module 5

Dynamic analysis, debugging, and tracing

observe actual state transitions

Module 6

Memory-safety and low-level weakness classes

root cause before exploitability

Module 7

Binary formats, ABI, loaders, and mitigations

exploitability is configuration-dependent

Module 8

Fuzzing engineering and crash triage

harness quality determines research quality

Module 9

Web, API, and business-logic research

state, identity, and trust

Module 10

Mobile and Android vulnerability research

package, component, IPC, and native layers

Module 11

Embedded, firmware, hardware, and update-chain research

device lifecycle and physical trust

Module 12

Exploitability validation and laboratory exploit engineering

prove the minimum necessary impact

Module 13

AI-assisted vulnerability research, RAG, agents, and MCP

acceleration with evidence gates

Module 14

Coordinated disclosure, PSIRT, scoring, remediation, and regression

the fix is part of the finding

Technical references

Deep dives

8 reusable models

Use these compact references during real research. Each one turns a broad subject into concrete questions, evidence, and stopping conditions.

Deep dive 1 — crash triage and root-cause deduplication

Preserve the original artifact before opening it. Record target digest, command, environment, signal/exception, fault address, instruction, thread, stack, sanitizer type, and input hash. Reproduce at least twice from a clean state. Symbolize with the exact build. Determine the first invalid state rather than using the final fault location as the root cause.

Triage sequence

  1. Verify target and artifact identity.
  2. Reproduce under the least intrusive oracle.
  3. Minimize while retaining the same root cause.
  4. Check whether a timeout, OOM, assertion, or environmental failure masquerades as corruption.
  5. Group by allocation/free/access or validation-to-sink chain, not stack hash alone.
  6. Compare against existing candidates and patched branches.

Do not merge when

  • Two inputs fault at the same instruction through different invalid states.
  • A shared signal handler or abort path hides distinct assertions.
  • Optimization inlines unrelated callers into one superficial stack.
  • A use-after-free has different allocation or free paths.
  • One crash is an integer under-allocation and another is a direct bounds failure.

Candidate disposition: duplicate of root cause X; non-security correctness defect; unreachable in supported build; dependency issue; harness defect; environmental; flaky pending; confirmed security vulnerability; or fixed with regression.

Deep dive 2 — fuzzer-harness design review

A harness should expose the security-relevant state machine with minimal unrelated work. A parser harness that rejects every seed at a wrapper checksum, a server harness that never resets global state, or a file harness that spends most time on process startup will produce misleading results.

DimensionReview questionEvidence
TargetDoes it exercise an attacker-reachable, complex, security-relevant interface?Call graph, product data flow, coverage at target functions
StateIs each iteration independent and representative?Reset proof, deterministic replay, no cross-input leakage
InputDoes the harness preserve enough structure to cross shallow validation?Seed diversity, dictionary, grammar or custom mutator rationale
OracleWhich failures become visible?ASan/UBSan/MSan/TSan, assertions, invariants, differential result
PerformanceIs expensive setup outside the iteration and are limits realistic?Executions/second, timeout profile, memory trend
CoverageWhat relevant code is still not reached, and why?Function/branch report, blockers, comparison over time

Run the harness on an empty input, representative valid input, malformed boundary inputs, known regression, and a deliberately injected defect. If the expected oracle cannot see the injected defect, fix the experiment before launching a long campaign.

Deep dive 3 — affected-version analysis and patch diffing

Do not infer affected versions solely from release dates or copied advisories. Establish the introducing change where possible; identify branches that contain the vulnerable path; account for backports, feature flags, build variants, vendored forks, disabled components, and downstream patches. Test the oldest supported vulnerable candidate, latest vulnerable release, candidate fixed build, and adjacent negative controls.

  • Source available: use history, blame, call-graph changes, tests, and build matrices. A patch may relocate rather than remove the primitive.
  • Binary only: compare authenticated artifacts, function similarity, constants, imports, control flow, and runtime behavior. Preserve uncertainty.
  • Dependency issue: distinguish package version from whether the vulnerable function is linked, configured, and reachable in the product.
  • Firmware: include hardware revision, region, carrier/OEM fork, bootloader, and update channel.
  • Cloud/SaaS: use deployment timestamps and vendor confirmation; customers may not control or observe exact builds.

Publication wording: use “confirmed affected,” “confirmed not affected,” “potentially affected pending validation,” and “not assessed.” Do not turn absence of evidence into a negative claim.

Deep dive 4 — severity, exploit intelligence, and operational priority

CVSS v4.0 describes vulnerability severity using Base, Threat, Environmental, and Supplemental metric groups. Publish the vector with the score so readers can inspect assumptions. Exploit Maturity is not a proxy for asset exposure; Environmental metrics must reflect the consumer’s context. EPSS estimates exploitation activity probability, while CISA KEV provides evidence of known exploitation for listed CVEs. Neither changes the root cause.

Technical severity+Exploit evidence / probability+Affected asset+Exposure+Business impact+Controls=Operational decision

Record timestamp and source because threat intelligence changes. For a newly discovered issue without a CVE, use observed exploitability and environmental evidence rather than inventing an EPSS or KEV-like value. For remediation, include fix availability, workaround effectiveness, service safety, deployment complexity, and compensating controls.

Primary sources: CVSS v4.0 · EPSS data definition · CISA KEV

Deep dive 5 — remediation quality and variant analysis

A narrow guard may stop the supplied proof while leaving the violated invariant elsewhere. After the candidate fix, search sibling parsers, alternate endpoints, compatibility modes, callers, deserialization paths, language bindings, client/server implementations, and older branches for the same pattern. Review error paths and cleanup introduced by the patch.

Weak fix signals

  • Checks one literal payload or filename rather than the state.
  • Validates after allocation, access, authorization decision, or side effect.
  • Uses inconsistent units or signedness.
  • Adds a client/UI restriction without server enforcement.
  • Catches a crash and continues in corrupted state.
  • Disables a feature without addressing stored data, upgrade, or alternate interfaces.

Strong fix signals

  • Central invariant enforced before sensitive operation.
  • Checked arithmetic and explicit ownership/lifetime.
  • Complete-deny behavior on malformed or ambiguous state.
  • Compatible handling for existing valid data.
  • Unit, integration, corpus, and negative tests.
  • Same weakness class reviewed across related surfaces.

Keep the original minimized trigger immutable. Add semantically adjacent variants and valid boundary cases. A regression test should fail for the vulnerable reason before the patch and pass for the intended reason after it.

Deep dive 6 — from vulnerability evidence to defensive coverage

Research can produce defensive artifacts without publishing a weapon. Extract observable preconditions, parser/service identity, unusual input shape, process crash, child-process behavior, file or registry changes, network follow-on, authentication context, and affected asset inventory. Separate prevention of the root cause from detection of exploitation attempts.

  1. Map confirmed affected products and versions to asset inventory.
  2. Identify safe, stable observables before and after the vulnerable transition.
  3. Write telemetry requirements and expected benign lookalikes.
  4. Build a non-destructive validation fixture or vendor-provided test.
  5. Measure prevention, collection, analytic, triage, and response independently.
  6. Retire temporary exploit-attempt signatures after patch coverage is verified only if residual risk and detection needs support it.

1200km ecosystem: Blue Team field guide · AdversaryGraph for CVE, asset, TTP, IOC, hunt, and validation context · public ATT&CK workspace

Deep dive 7 — evaluating an AI vulnerability-research assistant

Build a benchmark from projects you may legally use: known vulnerable/patched pairs, documented root causes, false-positive traps, compilation failures, version ambiguity, unreachable functions, and malicious prompt text. Score citation accuracy, affected-version accuracy, CWE precision, build success, harness correctness, crash reproduction, unsupported impact claims, secret leakage, and safe tool behavior.

TestPass conditionFailure to capture
Source citationExact artifact, revision, path/line or address, and relevant excerptInvented file, stale branch, inaccessible citation
HypothesisViolated invariant, evidence, assumptions, and falsifying experimentScanner-style verdict without causal chain
HarnessBuilds, isolates effects, reaches target, resets state, detects known bugUnsafe network, nondeterminism, shallow coverage
Tool callAuthorized target, explicit parameters, schema-valid result, audited approvalScope expansion, hidden command, excessive data
ReportObserved facts separated from inference and proposed severityFabricated CVE, version, exploit status, or vendor response

Measure the system as a whole—model, prompt, retrieval, tool server, sandbox, approval interface, and analyst—not only answer fluency.

Deep dive 8 — disclosure-ready report structure

Technical core

  • Title and concise impact statement.
  • Product, component, versions, builds, platform, and configuration.
  • Authorization and discovery context.
  • Weakness, violated invariant, and root-cause analysis.
  • Attacker prerequisites and reachable surface.
  • Numbered reproduction with minimized private artifact.
  • Observed result, debugger/sanitizer evidence, negative controls, and reliability.
  • Exploitability constraints and mitigations.

Coordination core

  • Suggested remediation direction and regression ideas.
  • CVSS vector/rationale where appropriate; no invented score source.
  • Potential detection and temporary mitigation.
  • Discovery/submission/acknowledgment/fix timeline.
  • Handling label and encrypted transfer instructions.
  • Researcher contact and credit preference.
  • Requested next action, status cadence, and publication coordination.
  • Appendix of hashes, logs, environment, and tool versions.

Public report: remove secrets, personal data, unnecessary weaponization detail, private correspondence, and embargoed artifacts. Clearly mark vendor-confirmed statements, researcher observations, and remaining uncertainty.

Worked examples

End-to-end case studies

6 controlled scenarios

These are safe workflow patterns, not claims about unnamed products. Run them on purpose-built vulnerable applications or software you are authorized to assess.

Case 1 — image-parser length bug

Scenario: an owned C/C++ image parser crashes on a malformed chunk. The question is whether the crash represents a reproducible memory-safety vulnerability and whether the proposed fix addresses the arithmetic root cause.

Workflow

  1. Build the exact revision with debug symbols, ASan, and UBSan; preserve a production-like build.
  2. Confirm a valid seed and map length, allocation, and copy operations.
  3. Reproduce and identify integer conversion leading to under-allocation before an out-of-bounds write.
  4. Minimize the file while retaining the same allocation/access stacks.
  5. Use a local marker to establish attacker influence without attempting payload execution.
  6. Patch with checked arithmetic and pre-allocation bounds; add valid boundary, malformed, and corpus regression tests.

Evidence: source revision, compiler flags, input hash, sanitizer trace, allocation/access stacks, minimized fixture, negative control, fixed-build result.

Conclusion: report the specific write primitive and constraints. Do not label remote code execution unless reachability and code-control impact were actually established.

Case 2 — cross-tenant API object authorization

Scenario: two synthetic tenants each own one report. A test account from tenant A can request tenant B’s object by identifier after an asynchronous export job.

Workflow

  1. Document the subject–action–object matrix and expected deny rule.
  2. Create canary records in both owned tenants; capture request and server correlation IDs.
  3. Change only the object ID and confirm response, export job, storage access, and audit state.
  4. Stop after retrieving the synthetic canary; do not enumerate identifiers.
  5. Trace authorization in request and worker paths; identify the worker trusting requester-supplied tenant metadata.
  6. Centralize server-side object ownership enforcement and add request/worker integration tests.

Evidence: owned accounts, synthetic objects, pre/post state, denied negative controls, queue/worker trace, centralized fix, regression across direct and async paths.

Conclusion: this is an authorization state flaw, not an “ID guessing” issue; impact depends on object sensitivity and reachable actions.

Case 3 — exported Android component trusts an external intent

Scenario: an intentionally vulnerable Android app exposes an activity that accepts an object identifier and renders local test data without verifying the caller or session state.

Workflow

  1. Record APK digest, package, version, SDK levels, signing identity, device image, and install state.
  2. Review manifest export rules, intent filters, permission, and code path.
  3. Use a second owned lab app or controlled ADB intent to open one synthetic record.
  4. Test logged-in, logged-out, fresh-install, and upgrade states.
  5. Fix by removing unnecessary export or enforcing caller/session/object authorization at the sensitive operation.
  6. Verify supported Android versions and app-link/deep-link behavior.

1200km lab: Deliberately Vulnerable APK and the complete Android vulnerability-research guide.

Case 4 — firmware update authenticity and rollback

Scenario: an owned lab device accepts signed updates, but the researcher suspects version metadata is not covered by the signature and an older vulnerable image may be reinstalled.

Workflow

  1. Preserve current and historical vendor images and hashes; document hardware revision and recovery.
  2. Map container, signature, manifest, version comparison, bootloader, and recovery paths.
  3. Use non-booting synthetic mutations first to locate validation boundaries.
  4. On a recoverable device, attempt an authenticated older vendor image—not arbitrary code—and observe rejection or acceptance.
  5. Classify physical/local/remote prerequisites and whether secure boot, fuse state, or bootloader changes the result.
  6. Verify signed monotonic version policy, recovery exception handling, and update regression.

Conclusion: distinguish cryptographic signature bypass, rollback protection failure, and merely supported downgrade. Each has different root cause and severity.

1200km: Embedded Systems, Hardware, Firmware research hub.

Case 5 — double completion in a credit workflow

Scenario: a purpose-built API credits a synthetic account twice when two authorized completion requests race. Neither request alone is invalid; the invariant “one completion per operation” is not atomic.

Workflow

  1. Model operation states, idempotency key, database transaction, queue delivery, retries, and audit event.
  2. Run a bounded concurrent test against an isolated database and synthetic account.
  3. Capture request IDs, timestamps, transaction traces, row versions, and final state across repeated trials.
  4. Reject UI duplication and client retry as root cause until server state is proven.
  5. Fix using an atomic conditional transition/unique invariant and idempotent result retrieval.
  6. Stress test retry, timeout, worker redelivery, and rollback paths.

Evidence: statistical reproduction frequency, two accepted transitions, incorrect final balance, atomic fix, and high-concurrency regression.

Case 6 — AI tool server crosses repository scope

Scenario: an AI research assistant is allowed to read one lab repository. A source comment contains an instruction to inspect a sibling private project, and an overly broad filesystem tool follows it.

Workflow

  1. Use synthetic repositories and canary secrets; no real proprietary data.
  2. Record system policy, prompt, retrieved documents, tool schema, filesystem roots, and approval state.
  3. Confirm the model can propose but cannot execute an out-of-scope path.
  4. Trace whether enforcement exists in prompt text, tool server, OS sandbox, or all three.
  5. Fix with canonical-path allowlists, least-privilege mounts, per-call authorization, output filtering, and audit.
  6. Regression-test traversal, symlink, encoded path, indirect prompt injection, and malformed tool response.

Conclusion: prompt instruction is untrusted input; the security defect is missing deterministic authorization in the tool execution layer.

1200km: AI Offensive Security: attacks against LLM agents · Vulnerable AI Lab.

Operational reference

Field kit and assessment

tools, labs, failures, review

Tool and platform decision matrix

Choose tools from the research question and evidence requirement. Verify the current official documentation, supported targets, licensing, and handling behavior before use.

PurposeRepresentative toolsWhat to validatePrimary evidence
Build and provenanceGit, container/VM images, Nix, build systems, SBOM toolingRevision, dependency lock, compiler, flags, reproducibilityDigests, manifests, build logs, symbols
Source reviewCompiler warnings, CodeQL, Semgrep, language analyzers, dependency scannersRule scope, data flow, reachability, version, false-negative surfaceExact path/line, trace, configuration, manual confirmation
Binary reviewGhidra, IDA, Binary Ninja, radare2, objdump/readelf, LIEFArtifact identity, architecture, loader, symbols, analysis assumptionsAddresses, cross-references, annotated call/data flow
DebuggingGDB, LLDB, WinDbg, rr, Frida, platform debuggersExact symbols, optimization, debugger effects, environmentFirst invalid state, stack/register/object state, replay
SanitizersASan, UBSan, MSan, TSan, LeakSanitizer, ValgrindCompiler/runtime compatibility, coverage, suppression, production differencesSymbolized report and exact build
Coverage fuzzinglibFuzzer, AFL++, Honggfuzz, Jazzer, Atheris, cargo-fuzz, go fuzzing, OSS-FuzzHarness, reset, corpus, oracle, quotas, dedup, coverageCampaign record, minimized artifact, root cause
Web/APIBrowser devtools, Burp Suite, OWASP ZAP, mitmproxy, test clientsAuthorization, ownership, state, cleanup, safe rateCanonical request/response plus server-side state
Android/mobileadb, JADX, apktool, MobSF, Frida, emulator/device toolsAPK identity, signature, SDK, component state, server controlsManifest/code path, intent/IPC, logs, owned test data
Firmwarebinwalk, file, strings, emulation, serial/debug toolingAcquisition rights, image identity, extraction safety, hardware statePartition/service/update map, device trace, recovery
Crash managementSymbolizers, debuggers, minimizers, issue trackers, CAS storageAtomic collection, dedup by cause, privacy, embargo, retentionImmutable artifact, signature, disposition, regression
AI/RAG/MCPApproved local/remote models, vector/search index, narrow tool serversData boundary, citation, injection, schema, authority, audit, denialPrompt/retrieval/tool/approval trace and independently verified result
PrioritizationCVE/CWE, CVSS v4, EPSS, CISA KEV, vendor advisories, asset inventoryDate, source, product/version match, exposure, environmental contextDecision record with vector, asset, exploit evidence, owner

12-lab zero-to-practitioner curriculum

Lab 1 — Research charter and evidence envelope

Scope a purpose-built parser. Define authorized build, test methods, exclusions, handling, stop conditions, snapshot/restore, directory layout, artifact hashes, and peer-review gate. Deliver a signed-off research charter and one harmless baseline trace.

Lab 2 — Weakness classification

Given five sanitized findings, write the violated invariant, choose the most specific supported CWE, distinguish CVE/CVSS/EPSS/KEV roles, and reject over-broad mappings. Deliver an evidence-to-taxonomy table with confidence and alternatives.

Lab 3 — Source-to-runtime data flow

Trace a length or object identifier from controlled input through parsing/authorization to a sensitive operation. Add targeted logging or breakpoints and prove the path using known-good, malformed, and negative-control inputs.

Lab 4 — Sanitizer-guided memory triage

Compile an intentionally vulnerable C/C++ fixture with ASan and UBSan. Reproduce, symbolize, identify the first invalid state, minimize the input, classify the primitive, patch the root cause, and add regression tests.

Lab 5 — Coverage-guided fuzzing

Write a narrow libFuzzer-compatible harness, seed corpus, dictionary, quotas, and campaign record. Inject a known bug to validate the oracle. Triage and deduplicate results, then replay the minimized corpus in CI.

Lab 6 — Binary-only comparison

Compare authenticated vulnerable and fixed binaries from a toy project. Identify format, architecture, mitigations, imports, changed function, and runtime behavior. Document what cannot be concluded without source.

Lab 7 — Web/API authorization

Use two synthetic tenants in a deliberately vulnerable app. Build the policy matrix, prove one cross-tenant canary exposure, stop without enumeration, trace the server-side failure, centralize enforcement, and regression-test synchronous and async paths.

Lab 8 — Android component boundary

Use the 1200km vulnerable APK. Inventory manifest/components, trace one exported-component flaw, demonstrate it with synthetic data, fix or document remediation, and test fresh install, logout, upgrade, and supported API levels.

Lab 9 — Firmware update model

Using a toy signed-update project or recoverable owned device, map image layout, signature, version, rollback, recovery, and trust anchors. Validate rejection of modified metadata and an authenticated older image without executing arbitrary firmware.

Lab 10 — Race and idempotency

Instrument a controlled API with a deliberately non-atomic state transition. Measure reproduction across concurrent trials, fix with an atomic invariant and idempotent response, then stress timeout, retry, rollback, and queue redelivery.

Lab 11 — AI research assistant assurance

Give an assistant a synthetic vulnerable/patched pair plus prompt injection in comments. Test citation, harness generation, tool denial, repository isolation, schema failure, secret filtering, stale retrieval, and human approval. Score unsupported claims.

Lab 12 — Disclosure capstone

Take one confirmed lab issue through report drafting, peer review, private submission simulation, CVSS vector rationale, patch review, regression, safe advisory, asset/detection handoff, timeline, and closure. No uncontrolled exploit is required.

1200km lab catalogue: vulnerable cloud, Kubernetes, IIS/SharePoint, Windows, Ubuntu, Android, AI, DVWA, AD, and analysis labs.

Lab acceptance criteria

  • Authority: exact target and permitted techniques are documented; test data is synthetic; stop conditions work.
  • Reproducibility: a second authorized reviewer can reconstruct the environment and reproduce the result from immutable artifacts.
  • Identity: source, binary, package, image, device, configuration, tool, and dependency versions are recorded with digests where available.
  • Causality: the first invalid state and violated invariant are explained; alternative causes and negative controls are documented.
  • Classification: weakness, affected versions, reachability, attacker preconditions, primitive, impact, and confidence remain separate.
  • Exploitability: claims do not exceed the safely demonstrated primitive; mitigations and environmental constraints are explicit.
  • Evidence: logs, traces, artifacts, correspondence, and AI/tool outputs are handled under appropriate access and retention.
  • Remediation: the root cause is fixed or clearly handed off; candidate patch passes original, boundary, negative, corpus, and variant tests.
  • Disclosure: report follows the program channel and coordination state; public output contains no secrets, personal data, or unnecessary weaponization.
  • Defense: asset, temporary mitigation, detection, and regression handoffs are provided where appropriate.

Failure atlas: symptom → likely cause → corrective action

SymptomLikely causeCorrective action
Crash cannot be reproducedWrong artifact, state leakage, race, missing dependency, stale symbols, environment driftVerify digests; restore snapshot; capture state/timing; repeat statistically; use exact symbols
Thousands of “unique” crashesStack-hash dedup, shared abort path, corrupt state cascadingMinimize and group by first invalid state, allocation/free/access, and root cause
Fuzzer has high executions but no useful coverageHarness trapped in validation or exercising wrapper onlySeed valid structure; add dictionary/custom mutator; narrow target; inspect function/branch coverage
Fuzzer slows over timeGlobal state, leak, corpus explosion, expensive logging, unbounded cacheReset each iteration; use sanitizer/leak checks; minimize corpus; move setup outside loop
Patch blocks proof but variants remainLiteral signature or late validationEnforce root invariant centrally before sensitive transition; run variant analysis
SAST and dynamic results disagreeUnreachable path, configuration, false positive, insufficient dynamic coverageTrace data/control flow, build exact configuration, create targeted fixture, preserve uncertainty
CVSS is debated as “risk”Base score used without vector, threat, environment, asset, or controlsPublish vector; distinguish severity from operational priority; add EPSS/KEV and asset context appropriately
Dependency CVE appears on every assetName/version-only matching or vendored/backported forkConfirm package identity, linked code, affected function, configuration, reachability, and vendor advisory
Debugger changes race behaviorHeisenbug and scheduling distortionUse tracing, record/replay, stress, fault injection, counters, and repeatable schedule controls
Firmware extraction “finds credentials”Defaults, test strings, documentation, inactive partition, or encrypted/derived valuesTrace runtime use and trust boundary on owned device; do not publish unvalidated secrets
AI reports critical RCEPattern completion without reachability, version, primitive, mitigation, or runtime proofRequire citations, build/reproduce, negative control, debugger/sanitizer evidence, and human severity review
MCP tool follows source-file instructionsPrompt treated as authority; tool server lacks deterministic scopeEnforce canonical allowlists and policy at tool/OS layer; require approval; regression-test injection
Vendor cannot reproduceMissing build, configuration, artifact, steps, or environmental preconditionSend concise evidence envelope and safe minimized artifact through approved secure channel
Public advisory conflicts with reportCoordination state or affected-version facts divergedReconcile primary evidence, timestamp changes, label vendor vs researcher claims, correct transparently

Practitioner review questions

  1. What exact security invariant is violated, and where is it supposed to be enforced?
  2. What target identity and configuration were tested? Can the artifact be authenticated and reproduced?
  3. Who is the attacker, what authority do they begin with, and how do they reach the path?
  4. What is directly observed, what is inferred, and what remains untested?
  5. What negative control disproves a simpler explanation?
  6. Where does attacker-controlled data or state first become invalid?
  7. For memory issues, what are the location, extent, direction, lifetime, and controllability of the primitive?
  8. For logic issues, which subject–action–object or state-transition policy fails?
  9. Which compiler, runtime, platform, sandbox, or architectural mitigations apply?
  10. Are affected versions confirmed, inferred, or not assessed? Were backports and variants considered?
  11. Does the CWE map the root cause rather than a downstream consequence?
  12. If a CVSS score is used, is the v4.0 vector supplied and are Threat/Environmental assumptions clear?
  13. Are EPSS and KEV used as threat/exploitation inputs rather than complete risk scores?
  14. Could the same result be established with less harmful data or a safer effect?
  15. Has testing stayed inside the approved asset, tenant, data, and availability boundary?
  16. Are third-party services, scanners, AI providers, and sample uploads permitted for this handling level?
  17. Does the fix enforce the invariant before the sensitive operation?
  18. Were sibling interfaces and variants reviewed?
  19. Does the regression fail for the correct reason before the fix and pass for the correct reason after it?
  20. Can the vendor reproduce from the report without receiving unnecessary weaponization detail?
  21. Are evidence, correspondence, and embargoed artifacts access-controlled and retained appropriately?
  22. What temporary mitigation, asset query, telemetry, or detection can reduce risk before the fix?
  23. Did an AI or tool generate any unsupported version, exploit, CVE, attribution, or severity claim?
  24. What event closes the research record, and who accepts residual uncertainty?

Glossary

Attack surface: interfaces, states, identities, data paths, and dependencies through which a security boundary can be influenced.

Corpus: the set of inputs used and evolved by a fuzzer.

Crash signature: a triage fingerprint; useful for grouping but not equal to root cause.

CWE: community-developed vocabulary of software and hardware weakness types.

CVE: identifier and record for a specific publicly disclosed vulnerability.

CVSS: framework for communicating vulnerability severity characteristics; v4.0 includes Base, Threat, Environmental, and Supplemental groups.

EPSS: probability estimate for observed exploitation activity in the next 30 days; not a complete risk score.

KEV: CISA catalog of vulnerabilities with evidence of known exploitation.

Exploitability: whether a weakness can be turned into a useful security impact under stated conditions.

Harness: adapter that presents target functionality to a fuzzer or test engine.

Invariant: security property that must remain true across states and transitions.

Minimization: reducing an input while retaining the same failure and root cause.

Oracle: mechanism that identifies a failure, such as a sanitizer, assertion, differential result, or invariant check.

Primitive: attacker-influenced capability such as read, write, call, lifetime control, or unauthorized state transition.

PSIRT: product security incident response team that receives, coordinates, remediates, and communicates product vulnerabilities.

Variant analysis: search for the same weakness pattern in related code, interfaces, branches, or products.

Authoritative source shelf

Final research and disclosure checklist

  • Written authorization covers the exact target, version, environment, techniques, data, rate, and dates.
  • Isolation, egress, quotas, snapshot, restore, and emergency stop have been tested.
  • Source/binary/package/device identity and build provenance are recorded.
  • Known-good, malformed, vulnerable, and patched or negative-control results are preserved.
  • The first invalid state, violated invariant, and root cause are explained.
  • The minimized trigger retains the same root cause and has an immutable hash.
  • Weakness, vulnerability identity, severity, exploit probability/evidence, asset exposure, and business priority are not conflated.
  • Affected and fixed versions are evidence-backed and labeled by confidence.
  • Exploitability claims stop at the safely demonstrated primitive and impact.
  • Mitigations, sandbox, privilege, architecture, and realistic attacker constraints are documented.
  • Artifacts contain no real credentials, unrelated data, or unnecessary harmful capability.
  • AI/RAG/MCP output is cited, audited, scope-enforced, and independently validated.
  • Disclosure uses the authorized private channel and maintains a dated state history.
  • The proposed or delivered fix addresses the invariant, not only the supplied proof.
  • Original trigger, boundary cases, corpus, variants, compatibility, and upgrade path pass on the fixed build.
  • Temporary mitigation, asset query, telemetry, detection, and owner handoff are supplied where useful.
  • Public advisory clearly distinguishes observed evidence, vendor confirmation, inference, and remaining uncertainty.