Exploit Intelligence Guide
Apply AI-driven analysis to determine exploitable vulnerabilities
Abstract
Preface
This guide helps you extend Red Hat Trusted Profile Analyzer (RHTPA) with Exploit Intelligence to use AI-driven analysis to reduce false positives and identify exploitable vulnerabilities in your application context.
Chapter 1. Reduce false positives with Exploit Intelligence
Use Exploit Intelligence to analyze vulnerabilities in your applications with AI-driven analysis. Learn how to deploy and configure the Exploit Intelligence stack to distinguish exploitable vulnerabilities from theoretical risks.
1.1. Exploit Intelligence overview
You can apply AI-driven analysis to determine whether a reported Common Vulnerabilities and Exposures (CVE) is exploitable in your application context.
Exploit Intelligence combines large language model (LLM)-based reasoning with vulnerability intelligence from multiple sources by using the National Vulnerability Database (NVD), GitHub Security Advisory (GHSA), and Red Hat Security Data. This approach helps distinguish theoretical vulnerabilities from exploitable risks.
On the Vulnerabilities tab of the Software Bill of Materials (SBOM) details page, the Exploit Intelligence column displays the analysis status for each vulnerability using the following badges:
- Green (Not vulnerable): The vulnerability is not exploitable in your application context.
- Red/Pink (Vulnerable): The vulnerability is considered exploitable.
- Orange (Uncertain): The analysis could not determine exploitability with sufficient confidence.
- Gray with spinner (In progress): Analysis is currently running.
- Gray with exclamation mark (Failed): The analysis could not be completed due to a system error or invalid input data.
- Purple (No components analyzed): No application components were available for analysis.
Hover over a badge to view a popover with a summary of the analysis results, including the number of components classified as Vulnerable, Not vulnerable, and Uncertain.
1.2. Infrastructure planning for Exploit Intelligence
AI-driven vulnerability analysis in Red Hat Trusted Profile Analyzer (RHTPA) uses large language models to automatically assess the exploitability of known vulnerabilities in your software dependencies. Exploit Intelligence processes vulnerability data, threat intelligence, and code context to determine which vulnerabilities pose genuine risk to your applications. Proper infrastructure planning ensures Exploit Intelligence runs reliably and delivers accurate, timely results.
Plan your OpenShift infrastructure to support the following critical areas:
- Compute resources for model inference workloads
- Storage for vulnerability databases and threat intelligence feeds
- GPU acceleration for large language model processing
- Network connectivity for accessing external data sources
The compute and GPU requirements scale with the volume of vulnerabilities analyzed and the frequency of scans. Storage capacity must accommodate growing vulnerability databases and historical analysis data. Network planning must account for bandwidth to threat intelligence feeds and egress for model inference endpoints.
1.2.1. OpenShift cluster requirements
Verify that your OpenShift platform meets the minimum version requirements and has the required operators installed.
- Red Hat OpenShift Container Platform version
- Red Hat OpenShift Container Platform version 4.16 or later is required.
- Required operators
- NVIDIA GPU Operator (required only for self-hosted LLM execution)
- Optional observability operators
- Grafana Operator version 5.17 or later for dashboards
- OpenShift Logging version 6.2.4 or later for centralized logs
- Cluster Observability Operator version 1.2.2 or later
- Loki Operator version 6.2.4 or later
1.2.2. Node sizing and resource requirements
Ensure your worker nodes have sufficient CPU and memory capacity to run all Exploit Intelligence components reliably.
Resource requests and limits per Exploit Intelligence deployment (REQ = Request, LIM = Limit; m = millicores, Gi = gibibytes, Mi = mebibytes):
| Deployment | Container | REQ_CPU | REQ_MEM | LIM_CPU | LIM_MEM |
|---|---|---|---|---|---|
| exploit-iq | exploit-iq | 1 | 1Gi | 1 | 8Gi |
| exploit-iq | exploit-iq-phoenix-tracing | 100m | 1Gi | 500m | 2Gi |
| nginx-cache | nginx | 100m | 100Mi | 250m | 256Mi |
| exploit-iq-client | 100m |
1.2.3. Database requirements
Exploit Intelligence requires a MongoDB 8.0 or later database instance for storing analysis results and vulnerability intelligence data.
- Production environments
- You must provide your own production-grade MongoDB instance or MongoDB Atlas
- Red Hat does not ship or bundle database software with Exploit Intelligence
- Tested database versions
- MongoDB 8.0 and later
- Capacity planning
- Database storage requirements: 3-5 GiB baseline (depends on analysis volume and retention policies)
- Network connectivity required between Exploit Intelligence Client pods and the database endpoint
1.2.4. Persistent storage requirements
Provision persistent storage volumes with sufficient capacity for Exploit Intelligence components, analysis artifacts, and reports.
The following are the recommended planning baselines. The actual capacity depends on repository sizes, retention policies, and usage patterns:
- exploit-iq: ~50 GiB (depends on repository size and analysis artifacts)
- nginx-cache: 1 GiB
- Self-hosted LLM model: 60 GiB (NVIDIA Llama-3.3-Nemotron-Super-49B-v1.5 model)
All persistent volumes must support ReadWriteOnce or higher access mode. Storage backends must provide appropriate IOPS and throughput for workload size and concurrency.
1.2.5. GPU resources for self-hosted LLM
Configure GPU resources and drivers if you plan to deploy the self-hosted large language model instead of using external API services.
If you are deploying a self-hosted LLM, ensure that you meet the following requirements:
- At least one NVIDIA H100 GPU with 80 GiB GPU memory
- GPU nodes must be labeled and tainted appropriately
- LLM pods are scheduled to GPU nodes using node selectors and tolerations
- GPU driver and NVIDIA container toolkit are installed and supported for your OpenShift version
- NVIDIA GPU Operator is installed and configured per NVIDIA OpenShift documentation
-
Configuration tested on AWS
p5.4xlargeinstance type (single H100 80 GiB GPU)
1.2.6. Networking requirements
Configure network connectivity to enable communication between Exploit Intelligence components and access to external vulnerability intelligence and AI services.
- In-cluster connectivity
- Between Exploit Intelligence pods and all required external services
- External services accessed
-
SerpAPI search service (
Content from serpapi.com is not included.https://serpapi.com) -
NIST National Vulnerability Database (
Content from services.nvd.nist.gov is not included.https://services.nvd.nist.gov) -
MITRE Common Weakness Enumeration (
Content from cwe.mitre.org is not included.https://cwe.mitre.org) -
FIRST Common Vulnerability Scoring System (CVSS) API (
Content from api.first.org is not included.https://api.first.org) -
Recorded Future threat intelligence API (
Content from api.recordedfuture.com is not included.https://api.recordedfuture.com) -
GitHub API (
Content from api.github.com is not included.https://api.github.com) -
Red Hat Customer Portal (
https://access.redhat.com) -
Ubuntu security data (
Content from ubuntu.com is not included.https://ubuntu.com) -
Deps.dev dependency graph API (
Content from api.deps.dev is not included.https://api.deps.dev) -
NVIDIA LLM API (
Content from api.llm.ngc.nvidia.com is not included.https://api.llm.ngc.nvidia.com) -
OpenAI API (
Content from api.openai.com is not included.https://api.openai.com)
-
SerpAPI search service (
- Access requirements
- OpenShift Route or equivalent ingress for external access to Exploit Intelligence UI and API
- Firewall rules opened for outbound connections to listed external services and inbound access through exposed Route/ingress
1.3. Exploit Intelligence installation methods
You can deploy Exploit Intelligence on Red Hat OpenShift Container Platform using one of two installation methods:
- Operator-based installation
- The Exploit Intelligence Operator automates deployment and lifecycle management of the Exploit Intelligence stack. The Operator manages configuration updates, upgrades, and resource reconciliation through custom resources.
- Agent-based installation with Kustomize
- The Agent-based method uses Kustomize overlays to deploy the Exploit Intelligence core services directly. This method provides granular control over deployment configuration and supports multiple deployment variants for different LLM configurations.
1.4. Install the Exploit Intelligence Operator
Install the Exploit Intelligence Operator to automate deployment and lifecycle management of the Exploit Intelligence stack on your Red Hat OpenShift Container Platform cluster. The Operator manages the cache, engine, and web application components.
Prerequisites
- You have installed Red Hat OpenShift Container Platform version 4.16 or later and have logged in to the Red Hat OpenShift Container Platform cluster as a cluster administrator.
-
You have installed and configured the
ocCLI. - Persistent storage with a default storage class is configured on your cluster.
A MongoDB 8.0 or later database instance is provisioned and accessible from the OpenShift cluster with the following configuration:
-
MongoDB database with the name
exploit-iq-client MongoDB user
exploit-iq-userwithreadWriterole on theexploit-iq-clientdatabaseNoteThe Operator does not provision MongoDB. You must create the database and user separately before deploying the Exploit Intelligence stack.
-
MongoDB database with the name
You have obtained the following API credentials:
- GitHub Security Advisory (GHSA) API token from Content from github.com is not included.github.com/settings/tokens
- NVIDIA NGC API key from Content from org.ngc.nvidia.com is not included.NVIDIA NGC
- NVIDIA NGC organization API key
- National Vulnerability Database (NVD) API key from Content from nvd.nist.gov is not included.nvd.nist.gov
- SerpAPI key from Content from serpapi.com is not included.serpapi.com
- Red Hat registry username and password from This content is not included.access.redhat.com
Procedure
- In the Red Hat OpenShift Container Platform web console, navigate to Operators → OperatorHub or Ecosystem → Software Catalog.
-
In the Filter by keyword box, enter
RHTPA exploit intelligence. - Click the RHTPA exploit intelligence Operator tile.
- Read the Operator description and click Install.
- On the Install Operator page, select the installation mode and click Install.
Verify the Operator installation:
$ oc get csv -n <operator-namespace> | grep exploit-iq-operator
The output should show the Operator with a
Succeededphase.Create a project for the Exploit Intelligence stack:
$ oc new-project exploit-iq
Create the API credentials secret:
$ oc create secret generic exploit-iq-secret \ --from-literal=ghsa_api_key="<github-token>" \ --from-literal=nvidia_api_key="<nvidia-api-key>" \ --from-literal=ngc_api_key="<ngc-organization-key>" \ --from-literal=nvd_api_key="<nvd-api-key>" \ --from-literal=serpapi_api_key="<serpapi-key>" \ --from-literal=registry_redhat_username="<redhat-registry-username>" \ --from-literal=registry_redhat_password="<redhat-registry-password>"
Create the Red Hat registry credentials secret:
- Download the pull secret from your Red Hat registry service account.
Create the secret:
$ oc create secret generic image-registry-credentials \ --from-file=.dockerconfigjson=<path-to-pull-secret.json> \ --type=kubernetes.io/dockerconfigjson
Create the MongoDB credentials secret.
Choose one of the following options based on your MongoDB configuration:
For MongoDB with host and port:
$ oc create secret generic mongodb-credentials \ --from-literal=host="<mongodb-host>:27017" \ --from-literal=username="<mongodb-username>" \ --from-literal=password="<mongodb-password>"
For MongoDB Atlas or SRV connection string:
$ oc create secret generic mongodb-credentials \ --from-literal=connection-string="mongodb+srv://<user>:<password>@<cluster>/"
Optional: Create the OAuth client secret.
NoteThe Operator automatically generates a random OAuth client secret if you do not provide one.
Generate the OAuth secrets:
$ export OAUTH_CLIENT_SECRET=$(openssl rand -base64 32) $ export OPENSHIFT_DOMAIN=$(oc get dns cluster -o jsonpath='{.spec.baseDomain}')Create the secret:
$ oc create secret generic oauth-client-secret \ --from-literal=client-secret="$OAUTH_CLIENT_SECRET" \ --from-literal=openshift-domain="$OPENSHIFT_DOMAIN"
Create the credential encryption key secret:
$ oc create secret generic credential-encryption-key \ --from-literal=credential-encryption-key="$(openssl rand -hex 32)"
Deploy the Exploit Intelligence stack by creating an
ExploitIQStackcustom resource:The Exploit Intelligence Operator provides multiple
ExploitIQStackcustom resource sample configurations in the Content from github.com is not included.exploit-iq-operator repository depending on your deployment scenario:-
exploitiq_v1alpha1_exploitiqstack.yaml: Minimal production deployment on Red Hat OpenShift Container Platform with Routes, OAuth integration, and automatic TLS certificate management. -
exploitiq_v1alpha1_exploitiqstack_self_hosted_llm.yaml: For self-hosted LLM deployments using OpenAI-compatible APIs (Ollama, vLLM, LocalAI, Text Generation Inference) instead of NVIDIA NIM.
Download the
ExploitIQStackcustom resource for your deployment scenario:For minimal production deployment:
$ curl -O https://raw.githubusercontent.com/RHEcosystemAppEng/exploit-iq-operator/0.0.3/config/samples/exploitiq_v1alpha1_exploitiqstack.yaml
For self-hosted LLM deployment:
$ curl -O https://raw.githubusercontent.com/RHEcosystemAppEng/exploit-iq-operator/0.0.3/config/samples/exploitiq_v1alpha1_exploitiqstack_self_hosted_llm.yaml
Edit the custom resource to match your secret names:
apiVersion: exploitiq.openshift.io/v1alpha1 kind: ExploitIQStack metadata: name: exploit-iq spec: webApp: registryCredentialsSecretRef: name: image-registry-credentials database: mode: hostPort # Use 'connectionString' for MongoDB Atlas secretRef: name: mongodb-credentialsApply the custom resource:
$ oc apply -f exploitiq_v1alpha1_exploitiqstack.yaml
-
Monitor the deployment progress:
$ oc get exploitiqstack exploit-iq -w
Wait for the stack to reach a ready state.
Grant user access to the Exploit Intelligence application:
$ oc adm groups new exploit-iq-view $ oc adm groups add-users exploit-iq-view <username>
Optional: Configure custom OIDC CA certificate.
If your OIDC or OAuth provider uses a private or self-signed certificate authority (CA) that the WebApp does not trust by default, configure a custom CA bundle.
NoteThis step is only required when using external OIDC providers (such as Keycloak or AWS Cognito) with custom or self-signed certificates. If you are using the default Red Hat OpenShift Container Platform OAuth or a provider with a publicly trusted certificate, skip this step.
Extract the cluster domain from the API server URL:
$ export OCP_DOMAIN=$(oc whoami --show-server | sed -E 's#^https?://api\.##; s#:[0-9]+/?$##; s#/$##') $ echo "Cluster domain: ${OCP_DOMAIN}"Retrieve the OAuth issuer URL from the public well-known endpoint:
$ export OAUTH_ISSUER=$(curl -sk \ "https://api.${OCP_DOMAIN}:6443/.well-known/oauth-authorization-server" \ | jq -r '.issuer') $ echo "OAuth issuer: ${OAUTH_ISSUER}"Extract the OAuth hostname from the issuer URL:
$ export OAUTH_HOST=$(echo "${OAUTH_ISSUER}" | sed -E 's#^https?://##; s#/.*$##') $ echo "OAuth host: ${OAUTH_HOST}"Create a working directory for the CA certificates:
$ export CA_DIR=$(mktemp -d)
Extract the CA certificate chain from the OAuth endpoint:
$ openssl s_client \ -connect "${OAUTH_HOST}:443" \ -servername "${OAUTH_HOST}" \ -showcerts </dev/null 2>/dev/null \ | awk '/BEGIN CERT/,/END CERT/' \ | awk 'BEGIN{n=0;buf=""} /BEGIN CERT/{n++;buf=""} {buf=buf $0"\n"} /END CERT/{if(n>1) printf buf}' \ > "${CA_DIR}/oauth-ca.crt"Extract the CA certificate chain from the API server endpoint:
$ openssl s_client \ -connect "api.${OCP_DOMAIN}:6443" \ -servername "api.${OCP_DOMAIN}" \ -showcerts </dev/null 2>/dev/null \ | awk '/BEGIN CERT/,/END CERT/' \ | awk 'BEGIN{n=0;buf=""} /BEGIN CERT/{n++;buf=""} {buf=buf $0"\n"} /END CERT/{if(n>1) printf buf}' \ > "${CA_DIR}/api-ca.crt"Merge both certificate chains into a single CA bundle:
$ cat "${CA_DIR}/oauth-ca.crt" "${CA_DIR}/api-ca.crt" > "${CA_DIR}/ca-bundle.crt"Create a ConfigMap with the CA bundle in your deployment namespace:
$ oc create configmap oidc-ca-bundle \ --from-file=ca-bundle.crt="${CA_DIR}/ca-bundle.crt" \ -n exploit-iqUpdate the
ExploitIQStackcustom resource to reference the CA bundle ConfigMap:Edit your
ExploitIQStackcustom resource YAML file to add theoidcCaBundleConfigMapReffield underspec.webApp:apiVersion: exploitiq.openshift.io/v1alpha1 kind: ExploitIQStack metadata: name: exploit-iq namespace: exploit-iq spec: webApp: oidcCaBundleConfigMapRef: name: oidc-ca-bundle registryCredentialsSecretRef: name: image-registry-credentials database: mode: hostPort secretRef: name: mongodb-credentialsApply the updated custom resource:
$ oc apply -f exploitiq_v1alpha1_exploitiqstack.yaml
The Operator automatically mounts the ConfigMap into the WebApp pod at
/etc/oidc-ca/ca-bundle.crtand configures the required environment variables.Verify that the WebApp pod mounts the OIDC CA volume:
$ oc get pod -n exploit-iq -l app.kubernetes.io/component=webapp \ -o jsonpath='{.items[0].spec.volumes[*].name}' | grep oidc-caThe output should include
oidc-ca.
Verification
Verify that all Exploit Intelligence pods are running:
$ oc get pods -n exploit-iq
All pods should show a
Runningstatus.Verify the
ExploitIQStackcustom resource status:$ oc get exploitiqstack exploit-iq -o yaml
Check the
statussection for successful deployment conditions.Access the Exploit Intelligence web interface:
Retrieve the route URL:
$ oc get route -n exploit-iq
- Open the route URL in a web browser and verify that you can log in using your Red Hat OpenShift Container Platform credentials.
1.5. Deploy the Exploit Intelligence core services and components
Deploy the Exploit Intelligence stack on Red Hat OpenShift Container Platform. The installation enables Software Bill of Materials (SBOM) ingestion, repository analysis, and exploitability classification.
Prerequisites
- You have installed Red Hat OpenShift Container Platform version 4.16 or later and have logged in to the Red Hat OpenShift Container Platform cluster as a cluster administrator.
You have installed and configured the following CLI tools:
-
oc -
Kubernetes config mgmt tool:
kustomize -
openssl
-
A MongoDB 8.0 or later database instance is available with network connectivity from the OpenShift cluster:
- For production environments, use a production-grade MongoDB deployment.
- For non-production environments, MongoDB Community Edition is supported.
-
MongoDB database with the name
exploit-iq-client -
MongoDB user
exploit-iq-userwithreadWriterole on theexploit-iq-clientdatabase
You have the following MongoDB credentials:
- Database endpoint and connection string
-
MongoDB user credentials (
exploit-iq-userandexploit-iq-password) -
MongoDB admin credentials (
admin-userandadmin-password)
-
You have cluster-admin privileges to create
OAuthClientresources, grant anyuid SCC, and accessServiceMonitorresources. You have obtained the following API credentials:
- GitHub Advisory Database (GHSA) API key
- National Vulnerability Database (NVD) API key
- NVIDIA API key (NVIDIA GPU Cloud (NGC) API key, can be a placeholder if using self-hosted LLM)
-
Red Hat registry credentials for
registry.redhat.io -
SerpAPIkey
- You have provisioned the GPU resources if you plan to use a self-hosted large language model (LLM).
- You have access to the Exploit Intelligence GitHub repositories: Content from github.com is not included.exploit-iq-agent repository and Content from github.com is not included.exploit-iq-operator repository
Procedure
Clone the Exploit Intelligence vulnerability analysis repository:
$ git clone https://github.com/RHEcosystemAppEng/exploit-iq-agent $ cd exploit-iq-agent/kustomize
Create a namespace for the Exploit Intelligence deployment:
$ export YOUR_NAMESPACE_NAME=<your_namespace_name> $ oc new-project $YOUR_NAMESPACE_NAME
Where:
<your_namespace_name>is the name for your Exploit Intelligence deployment namespace, for example,exploit-iq.Create the API credentials file in the
basedirectory:Create a file named
base/secrets.envwith the following content:GHSA_API_KEY=<github_advisory_database_api_key> NVD_API_KEY=<national_vulnerability_database_api_key> NVIDIA_API_KEY=<nvidia_api_key_or_placeholder> SERPAPI_API_KEY=<serpapi_api_key> registry_redhat_username=<your_registry_username> registry_redhat_password=<your_registry_password_or_token>
Where:
<github_advisory_database_api_key>- Your GitHub Personal Access Token with access to the GitHub Security Advisory Database API.
<national_vulnerability_database_api_key>- Your API key from the National Vulnerability Database (NVD).
<nvidia_api_key_or_placeholder>- Your NVIDIA API key for NVIDIA-hosted inference services. If using a self-hosted LLM, you can use a placeholder value.
<serpapi_api_key>-
Your
SerpAPIAPI key for web search functionality. <your_registry_username>-
Your Red Hat registry username for accessing
registry.redhat.io. <your_registry_password_or_token>- Your Red Hat registry password or token for authenticated pulls.
NoteProduct scanning requires valid API credentials for authenticated access to vulnerability databases.
Create the image registry credentials file:
Create a file named
base/image-registry-credentials.envwith your Red Hat registry authentication JSON:REGISTRY_AUTH_JSON=<registry_auth_json>
NoteProduct scanning requires valid registry authentication JSON to pull product component container images from
registry.redhat.io.
Configure OAuth credentials:
For a first-time deployment, generate new OAuth secrets:
$ export OAUTH_CLIENT_SECRET=$(openssl rand -base64 32) $ export OAUTH_SESSION_SECRET=$(openssl rand -base64 32) $ export OCP_DOMAIN=$(oc whoami --show-server | sed -E 's#^https?://api\.##; s#:[0-9]+/?$##; s#/$##')
For reusing an existing
OAuthClient, extract the existing secret:$ export OAUTH_CLIENT_SECRET=$(oc get oauthclient exploit-iq-client -o jsonpath='{..secret}') $ export OAUTH_SESSION_SECRET=$(openssl rand -base64 32)Create the
base/oauth-secrets.envfile with the generated secrets:client-secret=<oauth_client_secret> session-secret=<oauth_session_secret> openshift-domain=<openshift_cluster_domain>
Where:
<oauth_client_secret>- The OAuth client secret value from the earlier step.
<oauth_session_secret>- The OAuth session secret value from the earlier step.
<openshift_cluster_domain>- The OpenShift cluster domain extracted from the earlier step.
NoteThe OAuth client secret must be at least 32 bytes (256 bits) for HS256 signing.
Create the MongoDB credentials secret with the following keys:
$ oc create secret generic mongodb-credentials \ --from-literal=exploit-iq-user=<mongodb_user> \ --from-literal=exploit-iq-password=<mongodb_password> \ --from-literal=admin-user=<mongodb_admin_user> \ --from-literal=admin-password=<mongodb_admin_password>
Set the callback URL:
$ export CALLBACK_URL="https://exploit-iq-client.$(oc project -q).svc:8443" $ find . -type f -name 'exploit-iq-config.yml' -exec sed -i "s|CALLBACK_URL_PLACEHOLDER|$CALLBACK_URL|g" {} +Configure encryption and SSL:
Generate an encryption key for securing sensitive data:
$ echo -n "credential-encryption-key=$(openssl rand -hex 32)" > base/credential-encryption-key.env
Create the CA certificate bundle:
The CA bundle file
base/ca-certs/ca-bundle.crtis required before runningoc kustomizein the deployment step. The bundle must include CA certificates for SSL/TLS verification of external endpoints and internal services.Create the certificate directory:
$ mkdir -p base/ca-certs
Add custom CA certificates if you need to connect to internal services:
$ cp /path/to/your-custom-ca.pem base/ca-certs/
where
/path/to/your-custom-ca.pemis the path to your organization’s CA certificate file.Create the CA bundle file:
$ cat /path/to/your-custom-ca.pem > base/ca-certs/ca-bundle.crt
Verify the CA bundle:
$ openssl crl2pkcs7 -nocrl -certfile base/ca-certs/ca-bundle.crt | \ openssl pkcs7 -print_certs -noout
Deploy a deployment variant:
NoteThe Exploit Intelligence deployment supports three variants depending on your LLM configuration:
- Self-Hosted LLM: For self-managed LLM endpoints accessible over the network.
-
Self-Hosted LLM +
MLOps: Includes Grafana and Tempo for observability. - Remote NVIDIA Inference Microservices (NIM): Uses NVIDIA-hosted inference services.
For a self-hosted LLM deployment:
$ oc kustomize overlays/self-hosted-llama3.1-70b-4bit | oc apply -f - -n $YOUR_NAMESPACE_NAME
For a self-hosted LLM deployment with
MLOpsobservability:NoteThis variant requires additional namespace patches and Grafana token creation. Refer to the overlay documentation for details.
$ oc kustomize overlays/mlops | oc apply -f - -n $YOUR_NAMESPACE_NAME
For a remote NIM deployment using NVIDIA-hosted services:
$ oc kustomize overlays/remote-nim-all | oc apply -f - -n $YOUR_NAMESPACE_NAME
Verify the OAuth client:
Verify that the
OAuthClientresource was created with the proper redirect URIs.$ oc get oauthclient exploit-iq-client
NoteIf the OAuthClient is missing, re-apply the kustomize overlay from the earlier step:
$ oc kustomize overlays/<your_variant> | oc apply -f - -n $YOUR_NAMESPACE_NAMEGrant user access to the Exploit Intelligence application:
$ oc adm groups new exploit-iq-view $ oc adm groups add-users exploit-iq-view <username>
Verification
Verify that the core services pods are running and in a ready state:
$ oc get pods -n $YOUR_NAMESPACE_NAME
Example output:
NAME READY STATUS RESTARTS AGE exploit-iq-6dfdd8fd66-2mcnl 2/2 Running 0 2m exploit-iq-client-db-545b94dd6-5d9vl 1/1 Running 0 2m nginx-cache-595cd758db-zwkw6 1/1 Running 0 2m
NoteAll pods should show
Runningstatus with containers ready (for example,2/2or1/1). The application pod does not reach a ready state without a reachable MongoDB endpoint.Access the Exploit Intelligence web interface:
Retrieve the route hostname:
$ oc get route -n $YOUR_NAMESPACE_NAME
- Open the route URL in a web browser and verify that you can log in using your Red Hat OpenShift Container Platform credentials.
1.6. Configure AWS Cognito for Exploit Intelligence
Configure AWS Cognito User Pools to enable production authentication for Exploit Intelligence. This configuration supports both user authentication through browser login by using Authorization Code flow and machine-to-machine service authentication by using Client Credentials flow for the agent.
Prerequisites
- You have deployed Exploit Intelligence core services
- You have an AWS account with permissions to create and configure Cognito User Pools
- You have access to your Exploit Intelligence deployment namespace
- You know your OCP cluster domain and namespace name
Procedure
Create a Cognito User Pool if one does not already exist:
- Navigate to AWS Console → Amazon Cognito → User Pools.
- Click Create user pool.
Follow the wizard to configure your user pool:
- Under Cognito user pool sign-in options, select Email and Username.
- Under Self-service sign-up, to prevent public access, disable Enable self-registration.
- Under Required attributes, select email and preferred_username.
- Under Initial app client, set App type to Traditional web application.
- Click Create user pool to complete the user pool creation.
-
Note the User Pool ID in the format
<region>_<region_id>(for example,eu-north-1_rIW9qmUNl). -
Note the AWS Region (for example,
eu-north-1).
Configure a domain for the hosted UI:
- In your User Pool, navigate to Branding → Cognito domain.
- Under Cognito domain, select the branding version Hosted UI (classic).
Choose one of the following methods:
Cognito domain: Enter a unique domain prefix (for example,
my-exploitiq)Custom domain: Use your own domain with SSL certificate
-
Note the full domain (for example,
Content from my-exploitiq.auth.eu-north-1.amazoncognito.com is not included.https://my-exploitiq.auth.eu-north-1.amazoncognito.com).
Create a resource server to define the machine-to-machine API access scope:
- Navigate to Application → Resource servers → Create resource server.
-
Set Resource server name to
ExploitIQ API. -
Set Identifier to
exploitiq-resource-server. Add a Custom scope:
Scope name:
exploitiq-api-accessDescription:
Full access to ExploitIQ APIClick Create resource server.
NoteThe full scope identifier is
exploitiq-resource-server/exploitiq-api-access.
Create the UI app client for browser authentication:
- Navigate to Application → App clients → Create app client.
-
Set App client name to
exploitiq-ui-client. - Set App type to Traditional web application.
- Click Create app client to create the app client.
- After the app client is created, navigate to Login pages of the newly created app client and click Edit to configure the managed login pages.
- Under Authentication flows, enable Authorization code grant.
-
Under Allowed OAuth scopes, enable
openid,profile, andemail. -
Under Allowed OAuth scopes, add
exploitiq-resource-server/exploitiq-api-access(custom scope). - Under Identity providers, ensure Cognito user pool is selected.
Under Allowed callback URLs, add both URLs with and without trailing slash:
https://exploit-iq-client-<namespace>.apps.<cluster_domain> https://exploit-iq-client-<namespace>.apps.<cluster_domain>/
Where:
<namespace>- Your OCP namespace where you deployed Exploit Intelligence
<cluster_domain>Your OCP cluster domain (for example,
apps.example.com)NoteThese are placeholder URLs. You will update them with the actual route in step 10.
Under Allowed sign-out URLs, add the API logout URL:
https://exploit-iq-client-<namespace>.apps.<cluster_domain>/api/v1/user/logged-out
Where:
<namespace>- Your OCP namespace where you deployed Exploit Intelligence
<cluster_domain>-
Your OCP cluster domain (for example,
apps.example.com)
Under Default URL, set the default redirect URL:
https://exploit-iq-client-<namespace>.apps.<cluster_domain>
Where:
<namespace>- Your OCP namespace where you deployed Exploit Intelligence
<cluster_domain>-
Your OCP cluster domain (for example,
apps.example.com)
- Click Save changes to apply the configuration.
- Note the Client ID and Client secret.
Create the machine-to-machine app client for agent authentication:
- Navigate to Application → App clients → Create app client.
-
Set App client name to
exploitiq-m2m-client. - Set App type to Machine-to-machine application.
-
Under Allowed OAuth scopes, enable
exploitiq-resource-server/exploitiq-api-access. - Click Create app client to create the app client.
- After the app client is created, navigate to Login pages of the newly created app client and click Edit to configure the managed login pages.
- Under OAuth 2.0 grant types, ensure Client credentials is enabled.
-
Under Allowed custom scopes, ensure
exploitiq-resource-server/exploitiq-api-accessis enabled. - Under Identity providers, ensure Cognito user pool is selected.
- Click Save changes to apply the configuration.
- Note the Client ID and Client secret.
Create a Cognito group to control access:
- Navigate to Users and groups → Groups → Create group.
-
Set Group name to
exploit-iq-admin. Click Create group.
NoteThe
cognito:groupsclaim in the JWT token includes the group names.
Create a Cognito user and add them to the group:
- Navigate to User management → Users → Create user.
Configure the user information:
- Under Alias attributes used to sign in, select Email.
- Under Invitation message, choose whether to send an email invitation or set a temporary password.
- Set User name to the desired username.
- Set Email address to the user’s email.
- Click Create user to create the user account.
- After the user is created, select the user from the Users list and navigate to Group memberships.
-
Click Add user to group and select the
exploit-iq-admingroup.
Configure the agent deployment for machine-to-machine authentication using the machine-to-machine app client credentials:
export COGNITO_DOMAIN="https://<your_domain_prefix>.auth.<region>.amazoncognito.com" export COGNITO_CLIENT_ID="<m2m_app_client_id>" export COGNITO_CLIENT_SECRET="<m2m_app_client_secret>" export COGNITO_SCOPE="exploitiq-resource-server/exploitiq-api-access" oc set env deployment/exploit-iq -n $YOUR_NAMESPACE_NAME \ AUTH_TYPE=cognito \ COGNITO_DOMAIN="${COGNITO_DOMAIN}" \ COGNITO_SCOPE="${COGNITO_SCOPE}" \ COGNITO_CLIENT_ID="${COGNITO_CLIENT_ID}" \ COGNITO_CLIENT_SECRET="${COGNITO_CLIENT_SECRET}"Where:
<your_domain_prefix>-
The Cognito domain prefix you configured in step 2 (for example,
my-exploitiq) <region>-
Your AWS region (for example,
eu-north-1) <m2m_app_client_id>- The Client ID from the M2M app client you created in step 5
<m2m_app_client_secret>- The Client secret from the M2M app client you created in step 5
Configure the client deployment for browser authentication using the UI app client credentials:
export USER_POOL_ID="<region>_<region_id>" export AWS_REGION="<region>" export UI_CLIENT_ID="<ui_app_client_id>" export UI_CLIENT_SECRET="<ui_app_client_secret>" export COGNITO_DOMAIN="https://<your_domain_prefix>.auth.<region>.amazoncognito.com" oc set env deployment/exploit-iq-client -n $YOUR_NAMESPACE_NAME \ QUARKUS_PROFILE=external-idp \ QUARKUS_OIDC_ENABLED=true \ QUARKUS_OIDC_AUTH_SERVER_URL="https://cognito-idp.${AWS_REGION}.amazonaws.com/${USER_POOL_ID}" \ QUARKUS_OIDC_CLIENT_ID="${UI_CLIENT_ID}" \ QUARKUS_OIDC_CREDENTIALS_SECRET="${UI_CLIENT_SECRET}" \ QUARKUS_OIDC_APPLICATION_TYPE=hybrid \ QUARKUS_OIDC_TOKEN_CLIENT_ID_CHECK=none \ QUARKUS_OIDC_TOKEN_SUBJECT_REQUIRED=false \ QUARKUS_OIDC_TOKEN_TOKEN_TYPE=access \ QUARKUS_OIDC_USER_INFO_REQUIRED=false \ QUARKUS_OIDC_AUTHENTICATION_USER_INFO_REQUIRED=false \ QUARKUS_OIDC_ROLES_SOURCE=accesstoken \ QUARKUS_OIDC_TOKEN_HEADER=Authorization \ QUARKUS_OIDC_AUTHENTICATION_REDIRECT_PATH=/ \ QUARKUS_SECURITY_JAXRS_DENY_UNANNOTATED_ENDPOINTS=false \ COGNITO_DOMAIN="${COGNITO_DOMAIN}" \ EXPLOITIQ_SECURITY_OIDC_SCOPE_ROLE_MAPPINGS='exploitiq-resource-server/exploitiq-api-access=exploitiq-api-access'Where:
<region>_<region_id>-
Your User Pool ID from step 1 (for example,
eu-north-1_rIW9qmUNl) <region>-
Your AWS region (for example,
eu-north-1) <ui_app_client_id>- The Client ID from the UI app client you created in step 4
<ui_app_client_secret>- The Client secret from the UI app client you created in step 4
<your_domain_prefix>-
The Cognito domain prefix you configured in step 2 (for example,
my-exploitiq)
After you create the client route, update the Cognito callback and sign-out URLs:
Get the client route:
oc get route exploit-iq-client -o jsonpath='{.spec.host}' -n $YOUR_NAMESPACE_NAME-
In AWS Cognito Console, navigate to Application → App clients and click
exploitiq-ui-client. - Navigate to Login pages and click Edit.
Update Allowed callback URLs with both URLs with and without trailing slash:
https://<client_route> https://<client_route>/
Where:
<client_route>- The route hostname you retrieved in the earlier step.
Update Allowed sign-out URLs with the API logout URL:
https://<client_route>/api/v1/user/logged-out
Where:
<client_route>- The route hostname you retrieved in the earlier step.
- Click Save changes to apply the updated URLs.
Verification
-
Verify that users in the
exploit-iq-admingroup can authenticate to the Exploit Intelligence UI. - Verify that the agent can authenticate using the machine-to-machine credentials and access API endpoints.
1.7. Configure Keycloak for Exploit Intelligence
Configure an external Keycloak instance as an OpenID Connect identity provider for Exploit Intelligence. This configuration supports both user authentication through browser login and service account authentication for the agent.
This procedure describes configuration for production external Keycloak instances. For development and testing environments, you can use the embedded Keycloak component included with Exploit Intelligence. The embedded component is not supported for production use.
Prerequisites
- You have deployed Exploit Intelligence core services
- You have an external Keycloak instance accessible from your OCP cluster
- You have Keycloak admin access to create realms, clients, and users
- You have access to your Exploit Intelligence deployment namespace
Procedure
In your Keycloak admin console, configure a realm with the following settings:
Realm name:
quarkus(or your preferred realm name)SSL Required:
none(for development) orexternal(for production)Brute Force Protection: Enabled (recommended for production)
In your Keycloak realm, create an OIDC client:
- Navigate to Clients → Create client.
-
Set Client ID to
exploit-iq-client. -
Set Client Protocol to
openid-connect. Enable the following settings:
Client authentication: Enabled (confidential client)
Standard Flow Enabled: Enabled (Authorization Code flow)
Direct Access Grants Enabled: Enabled (Resource Owner Password Credentials flow)
Service Accounts Enabled: Enabled (for agent authentication)
Implicit Flow Enabled: Disabled
-
Set Valid Redirect URIs to
Content from exploit-iq-client-route is not included.https://exploit-iq-client-route/*(update with your actual route after deployment). -
Set Web Origins to
Content from exploit-iq-client-route is not included.https://exploit-iq-client-route(update with your actual route after deployment). -
Set Client secret to match the value you created in the
keycloak-credentialssecret.
Configure protocol mappers for the client:
Add the following protocol mappers to ensure required claims are present in tokens:
preferred_username mapper:
Name
preferred_usernameMapper Type
User PropertyProperty
usernameToken Claim Name
preferred_usernameClaim JSON Type
StringAdd to ID token
Enabled
Add to access token
Enabled
Add to userinfo
Enabled
email mapper:
Name
emailMapper Type
User PropertyProperty
emailToken Claim Name
emailClaim JSON Type
StringAdd to ID token
Enabled
Add to access token
Enabled
Add to userinfo
Enabled
upn mapper:
Name
upnMapper Type
User PropertyProperty
usernameToken Claim Name
upnClaim JSON Type
StringAdd to ID token
Enabled
Add to access token
Enabled
Add to userinfo
Enabled
Create roles for authorization:
Define the following roles (either at realm level or client level):
-
exploit-iq-view- Read-only access to the UI -
exploit-iq-prodsec- Product security team access -
exploit-iq-admin- Full administrative access -
exploitiq-api-access- API access for service accounts
-
Assign roles to users and service accounts:
-
Assign one of the first three roles (
exploit-iq-view,exploit-iq-prodsec, orexploit-iq-admin) to human users who need UI access. -
Assign the
exploitiq-api-accessrole to the service account user of the client (used by the agent) for API endpoint access.
-
Assign one of the first three roles (
Create the
keycloak-credentialssecret in your OCP namespace:oc create secret generic keycloak-credentials \ --from-literal=client-secret=<your_client_secret> \ -n $YOUR_NAMESPACE_NAME
Where:
<your_client_secret>The client secret from the OIDC client you created in step 2
NoteFor development environments using the embedded Keycloak component, include
admin-userandadmin-passwordkeys. For production external Keycloak instances, you must include only theclient-secretkey.
Configure the Exploit Intelligence client deployment with Keycloak environment variables:
export KEYCLOAK_URL="https://<keycloak_hostname>/realms/quarkus" oc set env deployment/exploit-iq-client -n $YOUR_NAMESPACE_NAME \ QUARKUS_PROFILE=external-idp \ QUARKUS_OIDC_ENABLED=true \ QUARKUS_OIDC_AUTH_SERVER_URL="${KEYCLOAK_URL}" \ QUARKUS_OIDC_CLIENT_ID=exploit-iq-client \ QUARKUS_OIDC_AUTHENTICATION_SCOPES=openid,profile,emailWhere:
<keycloak_hostname>The fully qualified domain name of your Keycloak instance (for example,
keycloak.example.com)The client secret is automatically loaded from the
keycloak-credentialssecret.
Configure the Exploit Intelligence agent deployment with Keycloak environment variables:
export KC_SERVER="https://<keycloak_hostname>" export KC_REALM="quarkus" oc set env deployment/exploit-iq -n $YOUR_NAMESPACE_NAME \ AUTH_TYPE=keycloak \ KC_SERVER="${KC_SERVER}" \ KC_CLIENT_ID=exploit-iq-client \ KC_REALM="${KC_REALM}"Where:
<keycloak_hostname>The fully qualified domain name of your Keycloak instance (for example,
keycloak.example.com)The client secret is automatically loaded from the
keycloak-credentialssecret.
After you create the route, update the Keycloak client redirect URIs:
Get the client route:
oc get route exploit-iq-client -o jsonpath='{.spec.host}' -n $YOUR_NAMESPACE_NAME- In Keycloak Admin Console, navigate to your client → Settings.
Update Valid Redirect URIs to:
https://<client_route>/*
Update Web Origins to:
https://<client_route>
Where:
<client_route>- The route hostname you retrieved in the previous step
- Click Save.
Verification
- Verify that users with assigned roles can authenticate to the Exploit Intelligence UI.
- Verify that the agent service account can authenticate and access API endpoints.
1.8. Integrate vulnerability analysis with your workflow
Analyze code reachability and reduce false positives in your vulnerability triage workflow by integrating RHTPA with Exploit Intelligence.
Prerequisites
- You have installed and configured Red Hat Trusted Profile Analyzer.
- You have an Exploit Intelligence deployment running on OpenShift version 4.16 or later with the Exploit Intelligence Client and Engine services operational.
- Network connectivity exists between RHTPA and the Exploit Intelligence API Gateway.
-
You have deployed RHTPA using the TrustedProfileAnalyzer operator (
rhtpa.io/v1) - You are logged in to the OpenShift cluster with permissions to edit the TrustedProfileAnalyzer custom resource.
- You have configured RHTPA and the Exploit Intelligence with the same OIDC identity provider (for example, Keycloak or AWS Cognito).
Your SBOM generation pipeline produces CycloneDX version 1.6 format SBOMs with
metadata.propertiesfields for Git source location and commit ID.NoteExploit Intelligence also supports SPDX 2.3 format for multi-component product analysis. SPDX requires OCI package URLs and container image labels for source metadata, unlike CycloneDX which embeds source metadata in document properties.
Procedure
Identify the Exploit Intelligence client endpoint URL:
$ oc get route exploit-iq-client -n <exploit_iq_namespace> -o jsonpath='{.spec.host}'where:
<exploit_iq_namespace>is the OpenShift namespace where Exploit Intelligence is deployed (for example,exploit-iq).The endpoint is the OpenShift Route or Service URL for the
exploit-iq-clientdeployment that you will use to configure the integration in the TrustedProfileAnalyzer custom resource.In your identity provider (for example, Red Hat build of Keycloak or AWS Cognito), create an OIDC client for RHTPA with the following configuration:
- Set the grant type to client credentials.
Assign the
exploit-iq-viewrole:-
For Keycloak: Assign as a realm role or client role under the
exploit-iq-clientclient. For other providers: Ensure the role appears in the
groupsclaim of the issued token.NoteNote the client ID and client secret. You will use these values in subsequent steps.
-
For Keycloak: Assign as a realm role or client role under the
Ensure the client secret exists as a Kubernetes Secret in the RHTPA namespace:
The secret can be created manually, managed by your identity provider operator, or synchronized by an external secrets manager. The TrustedProfileAnalyzer custom resource will reference this secret by name.
Configure Exploit Intelligence integration in the
specsection of your TrustedProfileAnalyzer custom resource:spec: exploitIntelligence: enabled: true url: "https://<exploit_iq_client_route>" oidc: clientId: "<client_id>" clientSecret: valueFrom: secretKeyRef: name: <secret_name> key: <secret_key> issuerUrl: "https://<idp_host>/realms/<realm>"<exploit_iq_client_route>- The Exploit Intelligence client endpoint URL from step 1.
<client_id>- The OIDC client ID.
<secret_name>- The name of the Kubernetes Secret containing the client secret.
<secret_key>- The key within the secret that holds the client secret value.
<idp_host>- Your identity provider hostname.
<realm>-
Your identity provider realm name. For AWS Cognito, use the pattern
Content from cognito-idp.<region>.amazonaws.com is not included.https://cognito-idp.<region>.amazonaws.com/<user-pool-id>as theissuerUrl.
Apply the updated TrustedProfileAnalyzer resource:
$ oc apply -f trustedprofileanalyzer.yaml
- In the RHTPA web UI, navigate to an SBOM details page and select the Vulnerabilities tab.
Click Request Analysis in the Exploit Intelligence column for a CVE.
The status changes to In Progress while RHTPA submits the request to Exploit Intelligence.
When analysis completes, review the status:
- Vulnerable
- The CVE is exploitable in this SBOM context.
- Not vulnerable
- The vulnerable code path is not reachable.
- Uncertain
- Exploitability could not be determined with sufficient confidence.
Click the report link next to the status to view full details in the Exploit Intelligence UI.
-
View the CSAF VEX document on the RHTPA advisories page. The document is labeled
exploit-intelligence.
Verification
- In the RHTPA web UI, open an SBOM details page and select the Vulnerabilities tab.
- Verify that the Request Analysis button appears in the Exploit Intelligence column for CVEs.
Check the Exploit Intelligence service logs for successful API connections:
$ oc logs -n <exploit_iq_namespace> deployment/exploit-iq-client --tail=50
where:
<exploit_iq_namespace>is the OpenShift namespace where Exploit Intelligence is deployed (for example,exploit-iq).Confirm that log entries show analysis requests from RHTPA:
INFO: Analysis request received from Red Hat Trusted Profile Analyzer: CVE-2024-1234 for component pkg:maven/org.example/vulnerable-lib@1.2.3 INFO: Request queued for processing by Exploit Intelligence Engine
Chapter 2. Analyze CVE risk with Exploit Intelligence
Submit analysis requests by using Software Bill of Materials (SBOM) files, direct repository URLs, or RPM packages, then review the generated exploitability reports and VEX documents.
2.1. Submit SBOM analysis
Submit a CycloneDX Software Bill of Materials (SBOM) file with CVE identifiers to analyze exploitability based on your application’s actual code usage. Use this workflow when analyzing specific CVEs affecting individual application components with a pre-generated SBOM.
Prerequisites
Prerequisites
An SBOM file in JSON format that meets the following requirements:
For multi-component product analysis: SPDX 2.3 with the following requirements:
-
spdxVersionmust beSPDX-2.3. -
A
DESCRIBESrelationship identifying the product package. -
The product package must have a
name. -
Components must be linked via
PACKAGE_OFrelationships. -
Each component must have an OCI package URL (
pkg:oci/) inexternalRefs. - At least one valid OCI component is required.
-
For single-component analysis: CycloneDX 1.6 with the following requirements:
-
bomFormatmust beCycloneDX. -
specVersionmust be1.6. -
metadata.componentmust be present and have a non-emptyname. -
A
componentsarray must be present.
-
-
Source code metadata must be carried in
metadata.propertiesas name-value pairs, including the source repository URL and commit hash or tag. For Syft-generated SBOMs, source code metadata properties use thesyft:image:labelsprefix. Exploit Intelligence accepts both prefixed and unprefixed property names. - Authenticated access to Exploit Intelligence UI or API.
- A Git repository accessible to Exploit Intelligence, either publicly or through configured access tokens.
- An Exploit Intelligence cluster with all core services running.
- MongoDB 8.0 or later configured for report storage.
- MinIO or S3-compatible storage configured for artifact retention.
Procedure
- Open the Exploit Intelligence application, select Home from the left menu, click Request Analysis, and then select the SBOM option.
Enter the required fields:
- CVE ID
-
CVE identifiers to assess (for example,
CVE-2024-50602) - SBOM file
Upload your SBOM file by dragging and dropping or clicking Upload
NoteSupported formats: SPDX 2.3 (multi-component) or CycloneDX 1.6 (single-component).
Accepted file type: JSON.
- Optional: Enable the Private repository toggle if the source repository referenced in the SBOM metadata requires authentication.
Click Submit Analysis Request.
The client-side throttling checks queue capacity. If the queue is full, your request queues until capacity is available. The Nginx gateway caches duplicate requests to improve performance.
The engine runs code evaluation and generates exploitability verdicts and evidence. If you have enabled contextual CVSS, recalculation occurs.
Open the Exploit Intelligence web application and click on Reports to view the analysis report.
NoteIf analysis shows a Failed status, this might indicate invalid input data. For example, when analyzing RPM packages, ensure that you use the correct N-V-R (Name-Version-Release) syntax.
2.2. Submit repository analysis
Analyze CVEs directly from source code by providing a Git repository URL and commit identifier instead of a pre-generated Software Bill of Materials (SBOM). Use this workflow when analyzing CVEs directly against source code without a pre-generated SBOM, or when testing unreleased code.
Prerequisites
- You have authenticated access to Exploit Intelligence UI or API
- Exploit Intelligence cluster deployed with all core services running
- You have MongoDB 8.0 or later database configured for report storage
- MinIO or S3-compatible storage configured for artifact retention
- Git repository is accessible to Exploit Intelligence (public or private with configured access tokens)
Procedure
- Open the Exploit Intelligence application, select Home from the left menu, click Request Analysis, and then select the Single Repository option.
Enter the required fields:
- CVE ID
-
CVE identifiers to assess (for example,
CVE-2024-50602) - Source Repository
-
Full Git repository URL (for example,
Content from github.com is not included.https://github.com/org/repo) - Commit ID
-
Specific commit identifier for analysis snapshot (for example,
v1.0.0or full commit SHAf76b3537930637666e7be800008f69731ea642d)
- Optional: Enable the Private repository toggle if analyzing a private repository that requires authentication.
Optional: Expand Advanced options to configure additional settings:
- Manifest path
-
Path to the dependency manifest file (for example,
services/api/go.mod) - Programming language
- Select the primary programming language from the dropdown
- Click Submit Analysis Request. The system validates repository accessibility and queues the analysis.
Verification
Navigate to the Reports page to view the analysis report.
The report includes:
- Exploitability verdicts
- Classification for each CVE
- Evidence summaries
- Detailed reasoning
- Vulnerable component information
- Dependency tree location
- Justification categories
- Reasoning for non-exploitable classifications
- VEX output
- CSAF 2.0 document
2.3. Submit RPM analysis
Analyze CVE exploitability for RPM packages by providing the package name, version, release, and architecture. Use this workflow when analyzing CVEs affecting specific RPM packages without a pre-generated Software Bill of Materials (SBOM).
Prerequisites
- You have authenticated access to Exploit Intelligence UI or API
- Exploit Intelligence cluster deployed with all core services running
- You have MongoDB 8.0 or later database configured for report storage
- MinIO or S3-compatible storage configured for artifact retention
Procedure
- Open the Exploit Intelligence application, select Home from the left menu, click Request Analysis, and then select the RPM option.
Enter the required fields:
- CVE ID
-
CVE identifiers to assess (for example,
CVE-2024-50602) - Package N-V-R
Package name, version, and release in N-V-R format using hyphens as separators (for example,
openssl-3.0.7-5.el9)NoteUse hyphens between the package name, version, and release (N-V-R). The format is critical for proper analysis.
- Architecture
-
Select the target architecture from the dropdown (for example,
x86_64,aarch64,ppc64le,s390x)
Click Submit Analysis Request.
The client-side throttling checks queue capacity. If the queue is full, your request queues until capacity is available. The Nginx gateway caches duplicate requests to improve performance.
The engine runs code evaluation and generates exploitability verdicts and evidence. If you have enabled contextual CVSS, recalculation occurs.
Open the Exploit Intelligence web application and click on Reports to view the analysis report.
NoteIf analysis shows a Failed status, verify the following:
- The N-V-R format uses hyphens (not spaces or other separators)
- The package name, version, and release match an existing RPM package
- The architecture is appropriate for the package
Verification
- Navigate to the Reports page to view analysis results.
Verify the report includes:
- Exploitability verdicts
- Classification for each CVE
- Evidence summaries
- Detailed reasoning
- Vulnerable component information
- RPM package details
- Justification categories
- Reasoning for non-exploitable classifications
- VEX output
- CSAF 2.0 document
2.4. Review analysis reports
Access completed analysis reports to review exploitability verdicts, evidence details, and download VEX documents.
Prerequisites
- You have submitted an SBOM or repository analysis request.
- The analysis has completed and the status badge shows a final state (Vulnerable, Not vulnerable, Uncertain, or Failed).
Procedure
- Log in to the Exploit Intelligence browser interface.
- In the left navigation panel, click Reports.
Select the analysis type tab:
SBOMs: View reports for Software Bill of Materials analysis
Single Repositories: View reports for individual repository analysis
RPM: View reports for RPM package analysis
(Optional) Filter and search the reports:
- Click the Repository Name dropdown to filter by repository
- Use the search field to search by repository name
- Use the pagination controls to navigate between pages
Review the analysis results table:
The table displays the following information for each analysis:
ID: Unique identifier for the analysis request
Repository: Repository URL or name that was analyzed
Commit ID: Git commit or branch that was analyzed
CVE ID: CVE identifier associated with the finding
Finding: Status badge showing the exploitability verdict:
- Vulnerable (red badge): Exploitable vulnerability detected
- Not vulnerable (green badge): Vulnerability confirmed as not exploitable
Failed (gray badge): Analysis could not complete
Date Requested: Timestamp when the analysis was initiated
Date Completed: Timestamp when the analysis finished
Click on an analysis ID to view the detailed report with:
- CVE exploitability verdicts and justification categories
- Detailed evidence explaining code reachability, function calls, and environmental factors
- VEX Justification Status Labels bound to CVE lines
- Custom text blocks detailing dependency paths and reasoning
Download artifacts from the detailed report:
- VEX document (CSAF 2.0 JSON format)
- Full analysis report (PDF or JSON)
- Evidence checklist generated by LLM planner
Verification
- Verify that the analysis report displays exploitability verdicts for all submitted CVEs.
- Confirm that you can download the VEX document from the report page.