Skip to content

Update blueprint to version 3#177

Open
shawn-davis wants to merge 120 commits into
developfrom
3.0.0.rc1
Open

Update blueprint to version 3#177
shawn-davis wants to merge 120 commits into
developfrom
3.0.0.rc1

Conversation

@shawn-davis

Copy link
Copy Markdown
Collaborator

Summary

This PR brings the aiq_integration branch into upstream/main and updates the project around the current NAT-based vulnerability-analysis workflow.

Key changes include:

  • Migrates the pipeline to the cve_pipeline NAT workflow with structured PipelineInput / PipelineResult models.
  • Adds multi-CVE request support, staged orchestration, per-agent caching, concurrency controls, and rate-limit configuration.
  • Integrates the AIQ CVE researcher submodule and wires it into the CVE research flow.
  • Adds automatic container filesystem extraction via crane, including caching and a standalone extraction helper.
  • Replaces older SBOM/VDB-style components with agent implementations for CVE research, container analysis, exploitability analysis, and VEX categorization.
  • Adds deterministic pre-triage, report parsing/generation helpers, filesystem/package/binary tools, and relaxed VEX categorization support.
  • Updates Docker Compose deployment under deploy/, refreshes deployment notebooks, and adds containerized quick-start guidance.
  • Refreshes README installation/setup docs, adds .env.example, documents submodule initialization, crane setup, API key checks, and common troubleshooting.
  • Updates evaluation tooling and datasets, including the Morpheus benchmark and PB eval sampling helper with a configurable data root.
  • Clears notebook outputs and removes host-specific paths from committed notebook output.

Validation

Performed during this branch cleanup:

  • git diff --check
  • python3 -m py_compile src/vuln_analysis/eval/sample_pb_eval.py
  • Verified deploy notebooks parse as JSON after output cleanup.
  • Verified no /raid/... or /cyberpub/sdavis/vulnerability-analysis/... paths remain.

Notes

This is a large integration PR. Review is probably easiest by area: pipeline/data models, agent implementations, container extraction, deployment/docs, and eval tooling.

After checkout, run:

git submodule update --init --recursive

Local automatic image extraction also requires crane on PATH.

tzemicheal and others added 30 commits January 28, 2025 14:08
* Add first GitHub Actions workflow to test Deploy notebook (#169)

* feat: Add first GitHub Actions workflow

* Add pull request trigger

* fix: update from review commnets

---------

Co-authored-by: Eli Fajardo <efajardo@nvidia.com>

* Implement email notification for workflow results (#171)

Added email notification step to workflow with results.

* Add dask config options to config.yml

* Concurrency improvements

* Update to NAT 1.4 prerelease with async endpoint fix

* Update to nvidia-nat 1.4.0

* Update to import to use langchain_classic after NAT upgrade to langchain 1.2.8

* Remove note in README about server log visibility issue for async endpoint since it was fixed in NAT 1.4.

* Add explicit dependencies for langchain-classic and filelock

* Update the file locking cleanup code to use a non-blocking acquire to avoid the race condition

* Guard fetch/checkout when no origin remote exists

* Remove commented line from workspace file

* Add bokeh dependency for dask dashboard

* Add dask dashboard port mapping to docker compose

* Add .dockerignore

* Mention Dask dashboard in readme

---------

Co-authored-by: ryanzhang1230 <ryanzh@nvidia.com>
Made-with: Cursor
**Problem 1: Go binaries not scanned in containers (Dockerfile + package_tools.py)**

`find_go_binaries` relies on `strings` (from binutils) to detect Go binaries
and extract embedded module tables. `binutils` was not installed in the Docker
image, so the tool silently failed — any CVE affecting a Go module compiled
into a container binary (e.g., golang-jwt in etcd) was invisible to the agent.

Changes:
- Add `binutils` to the `apt-get install` block in the Dockerfile so `strings`
  and `readelf` are available at runtime.
- Add `_extract_go_modules_via_strings()` fallback in `package_tools.py`: when
  `go version -m` is unavailable or times out, parse the embedded Go buildinfo
  block directly from the binary using `strings -n 10`. Go statically compiles
  a module table with `dep\t<module>\t<version>` lines that are readable as
  plain ASCII without the Go toolchain.
- Raise `MAX_FILES` in `find_go_binaries` from 5,000 to 100,000 to handle
  large container filesystems (e.g., deepseek-r1 has ~80k files).

**Problem 2: VEX categorizer incorrectly assigning requires_configuration (vex_categorizer.py)**

When the exploitability analyzer returns CONDITIONALLY EXPLOITABLE with a
default-off feature flag as the only barrier, the VEX categorizer was assigning
`requires_configuration` even when: (a) the flag is a documented, user-facing
product feature, and (b) the CVE advisory explicitly marks the installed version
as affected.

Root cause: VEX Step 4 in the decision flowchart directed the agent straight to
`requires_configuration` for any default-off toggle. The override rule
("if the advisory considers the version affected, use `vulnerable`") existed in
the guidance section below but was consistently skipped.

Fix: Surface the override check inline at VEX Step 4 — the exact point where
the agent makes the call — so it cannot be bypassed. No new logic was added;
this duplicates an existing rule at the decision point for visibility.

Validated against CVE-2025-62164 / llm-nim_1.15.2: previously returned
`not_affected / requires_configuration`, now correctly returns
`affected / vulnerable`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Separate Go binary walk limit from extraction limit (MAX_FILES → MAX_FILES_TO_WALK + MAX_GO_BINARIES)

See merge request morpheus/agent-morpheus/vulnerability-analysis!3
Docker Compose and README updates

See merge request morpheus/agent-morpheus/vulnerability-analysis!4
Concurrency improvements and remove deprecation warnings

See merge request morpheus/agent-morpheus/vulnerability-analysis!6
Update installation instructions in readme

See merge request morpheus/agent-morpheus/vulnerability-analysis!8
Update the morpheus labels to match what we think is the golden answer for the agent

See merge request morpheus/agent-morpheus/vulnerability-analysis!9
Add RH python eval dataset

See merge request morpheus/agent-morpheus/vulnerability-analysis!10
…tries overwrite it if desired. This primarily helps with allowing eval runs to specify the output_dir.
Co-authored-by: Greptile <service_account_group_7407_c52410dfdb7b9ece68d605d180dd8d6a@noreply.gitlab-master.nvidia.com>
…oes-not-work' into 'cve-agent-v3'

Made output_dir default come from the workflow while letting input entries...

Closes #6

See merge request morpheus/agent-morpheus/vulnerability-analysis!11
shawn-davis and others added 30 commits July 22, 2026 10:42
Update shipped NVIDIA endpoint defaults from Inference Hub to Integrate, replace GPT 5.6 defaults with Nemotron 3 Super, and move the subagent LLM key/default to Nemotron 3 Nano.

Refresh README, env example, deploy compose defaults, and the CVE customization notebook to match the new hosted model names.
Classify model failures before retrying so context-window, auth, missing-model, and bad-request errors fail fast while transient rate-limit, timeout, and server failures remain retryable.

Add plugin tests for the retry classifier and middleware wiring.
Decouple successful stage reuse from output_dir so equivalent requests
share work while materializing reports into their requested output group.
Canonicalize presentation paths, expose hit/miss diagnostics, and isolate
analysis policies with explicit fail-closed cache namespaces.

Hash every semantic container input, including image-config content, and
preserve cached phase metadata instead of inferring it on a hit.

Existing output reports are intentionally not imported, so the first run
after upgrade is cold. No prompts, analysis policy, or dependencies change.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants