When a new CVE drops and your boss asks "are we running that?" — how fast can you answer?
Most teams scramble through Confluence pages, Slack threads, and half-updated spreadsheets. But there's a better approach: automated technology detection with CPE identifiers that plug directly into vulnerability databases.
In this post, I'll show you how to detect what technologies a website is running and get machine-readable CPE strings you can cross-reference with NIST's National Vulnerability Database (NVD).
What Are CPE Identifiers?
CPE (Common Platform Enumeration) is a standardized naming scheme for IT products. It looks like this:
cpe:2.3:a:apache:http_server:2.4.51:*:*:*:*:*:*:*
The NVD uses CPEs to map CVEs to affected software. If you know the CPE of what you're running, you can instantly look up every known vulnerability for that exact product and version.
The problem? Most teams don't maintain an accurate inventory of what technologies their web properties are running.
Automated Detection with DetectZeStack
DetectZeStack is a REST API that analyzes any website and returns the full technology stack — including CPE identifiers where available. It combines multiple detection methods:
- Wappalyzer fingerprinting — 3,500+ technology signatures matched against HTTP headers, HTML content, and JavaScript patterns
- DNS CNAME analysis — 29 infrastructure signatures (CloudFront, Fastly, Akamai, Netlify, Vercel, etc.)
- TLS certificate inspection — 8 certificate authority signatures (Cloudflare, DigiCert, Let's Encrypt, etc.)
- Custom header matching — security headers like HSTS, server identification
Quick Example
curl "https://detectzestack.p.rapidapi.com/analyze?url=example.com" \
-H "X-RapidAPI-Key: YOUR_KEY" \
-H "X-RapidAPI-Host: detectzestack.p.rapidapi.com"
Response:
{
"domain": "example.com",
"technologies": [
{
"name": "Nginx",
"categories": ["Web servers"],
"confidence": 100,
"cpe": "cpe:2.3:a:nginx:nginx:*:*:*:*:*:*:*:*"
},
{
"name": "jQuery",
"categories": ["JavaScript libraries"],
"confidence": 100,
"cpe": "cpe:2.3:a:jquery:jquery:*:*:*:*:*:*:*:*"
}
]
}
Each technology with a known CPE includes it in the response. You can then query the NVD API directly:
curl "https://services.nvd.nist.gov/rest/json/cves/2.0?cpeName=cpe:2.3:a:nginx:nginx:*"
Building a Vulnerability Scanner
Here's a practical Python script that ties it together — detect technologies, extract CPEs, and check for known vulnerabilities:
import requests
import time
RAPIDAPI_KEY = "your_key_here"
def detect_stack(url):
resp = requests.get(
"https://detectzestack.p.rapidapi.com/analyze",
params={"url": url},
headers={
"X-RapidAPI-Key": RAPIDAPI_KEY,
"X-RapidAPI-Host": "detectzestack.p.rapidapi.com"
}
)
return resp.json()
def check_cves(cpe_name):
resp = requests.get(
"https://services.nvd.nist.gov/rest/json/cves/2.0",
params={"cpeName": cpe_name}
)
data = resp.json()
return data.get("vulnerabilities", [])
# Detect technologies
result = detect_stack("yoursite.com")
for tech in result["technologies"]:
cpe = tech.get("cpe")
if not cpe:
continue
print(f"\n{tech['name']} ({cpe})")
vulns = check_cves(cpe)
if vulns:
print(f" Found {len(vulns)} known CVEs:")
for v in vulns[:5]:
cve = v["cve"]
severity = "N/A"
metrics = cve.get("metrics", {})
if "cvssMetricV31" in metrics:
severity = metrics["cvssMetricV31"][0]["cvssData"]["baseSeverity"]
print(f" {cve['id']} - {severity}")
else:
print(" No known CVEs")
time.sleep(1) # Rate limit NVD API
Use Cases for Security Teams
1. Asset inventory — Scan all your public-facing domains to build a technology inventory. Use the /analyze/batch endpoint to check up to 10 URLs per request.
2. Continuous monitoring — Set up webhook subscriptions to get notified every time a domain is analyzed. Track technology changes over time with the /history endpoint.
3. Vendor risk assessment — Before onboarding a third-party vendor, scan their web properties. Know what they're running before signing the contract.
4. Incident response — When a new CVE is published, immediately scan your domains to check for affected technologies. The 24-hour cache means repeated checks are instant and free.
Try It Out
You can test DetectZeStack right now — no signup required. Visit detectzestack.fly.dev and use the live demo to analyze any website.
For API access, grab a free key on RapidAPI (100 requests/month, no credit card required).
What security automation workflows are you building? I'd love to hear how you're using technology detection in your security pipeline. Drop a comment below.
Top comments (0)