Install and scan something
Install the binary, fetch templates, and read a real finding on a target you control.
Cert-X-Gen is a security scanner that finds vulnerabilities across web applications, services, networks, and desktop applications, and shows you the evidence behind every finding.
Under the hood it runs templates. A template is a self-contained check: it knows how to detect one specific weakness, how serious that weakness is, and what to do about it. You point cxg at a target, it runs every template that applies, and it writes the results to a report you can read or feed into a pipeline.
Templates live in their own repository and are fetched with one command, so the
catalogue grows without you upgrading the scanner. They arrive grouped by
subject, including web, network, databases, devops, recon, messaging,
monitoring, and tooling. You can write your own and keep them beside your
code.
cxg template updateMost checks are straightforward: send a request, look for something in the response. YAML describes those well, and a YAML template stays readable to anyone on your team.
Some checks need to do more than match text. Cert-X-Gen lets a template be an ordinary program instead, written in Python, JavaScript, Rust, Go, C, C++, Java, Ruby, Perl, PHP, or Shell. A template written as a program can:
Take an exposed .git directory. A template can fetch /.git/HEAD, read which
branch it points at, fetch that branch, and check that it resolves to a real
commit. Three requests, each one deciding the next. If any step fails the
template stays quiet, so what you get is a confirmed finding rather than a maybe.
Write your first template builds that check step by step, and why polyglot templates covers when the extra power is worth its cost, because a code template needs its language installed wherever the scan runs.
Every finding carries the evidence behind it, not only a verdict.
| Field | What it holds |
|---|---|
severity, confidence |
How serious the template’s author judged it, and how sure the check is |
title, description |
What was found, in the template author’s words |
evidence.request |
The exact request that triggered it |
evidence.response |
The full response body cxg matched against |
evidence.matched_patterns |
Which conditions fired |
cwe_ids, cve_ids, cvss_score |
Set when the template provides them |
remediation |
How to fix it, when the template says |
Keeping the whole response body is what makes a finding auditable weeks later. You can read what the scanner saw, rather than trusting that it matched something.
Results go to scan-results.json by default, and one run can write JSON, SARIF,
CSV, HTML, and Markdown at the same time, so the same scan feeds a pipeline and a
person.
Cert-X-Gen runs two pipelines. They start from different things, so the one you reach for depends on what you already have.
flowchart TB
subgraph SCAN["cxg scan"]
direction LR
A["a target you can reach"] --> C(["run every template<br/>that applies"])
B["templates"] --> C
C --> D["findings, each with the<br/>request and response"]
end
subgraph PENTEST["cxg pentest"]
direction LR
E["a running app"] --> G(["write probes,<br/>then try to confirm them"])
F["its source, and a guardlink<br/>threat model"] --> G
G --> H["a verdict for each<br/>suspected exposure"]
end
SCAN ~~~ PENTEST
class D,H emphasis
| What you are doing | Reach for | Why |
|---|---|---|
| Sweeping web applications and services for known issues | cxg scan |
Select templates by tag, severity, or exact ID |
| Scanning hosts and networks | cxg scan |
--scope takes hosts, domains, URLs, and CIDR ranges |
| Testing an application whose source you have | cxg pentest |
Starts from exposures a developer marked in the code, not from guesswork |
| Testing an Electron desktop app | cxg pentest --target-type electron |
Drives the app over the Chrome DevTools Protocol and probes its IPC channels |
| Confirming blind SSRF or injection | --oast-interactsh |
cxg owns the callback host and polls it, so a hit is proof rather than a lead |
| Gating a build | Exit codes and --ci |
An expired session fails the job loudly instead of scanning logged out |
| Writing a check nothing else can express | cxg template |
The check is a program, so it can parse, compute, and chain requests |
Three things surprise people. Each one is covered in full elsewhere.
Install and scan something
Install the binary, fetch templates, and read a real finding on a target you control.
Write a check in code
Build the .git detection above in Python, validate it, and run it through
the engine.
Run a whitebox pentest
Turn a guardlink threat model into probes, and let cxg try to confirm or rule out each one against a running app.
Look up a flag
Every command, flag, and default, generated from the binary’s own --help.
These docs describe Cert-X-Gen 1.3.0, released 2026-08-13. The generated
reference comes from that release’s published binary, which is the same asset the
install steps download. The release binary, cargo install cert-x-gen, and the
Homebrew tap all serve 1.3.0.