elastic / elastic/integrations
[New Integration] ProjectDiscovery Cloud
- Dominant language
- Handlebars
- Stars
- 333
- Forks
- 647
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 209
Description
## Description
Project Discovery Cloud is an External Attack Surface Management (EASM) SaaS platform. It empowers customers to monitor their entire external perimeter by discovering subdomains and scanning those assets for vulnerabilities, misconfigurations, or data leakage.
Nuclei is the name of their opensource scanner which is why you can see ProjectDiscovery cloud or Nuclei cloud.
## Architecture
API documentation: https://docs.projectdiscovery.io/api-reference/results/get-all-vulnerability-changelogs
It seems that we have all the information we need in the endpoint `https://api.projectdiscovery.io/v1/scans/vuln/changelogs`
## Pagination
The pagination is based on the offset parameter that corresponds to the number of events already ingested.
Let's consider 35 events with a batch size of 10
| Call Number | Offset | Ingested events |
|--------|--------|--------|
| 1 | null or 0 | 10 |
| 2 | 10 | 20 |
| 3 | 20 | 30 |
| 4 | 30 | 35 |
The end of the pagination should be based on 2 conditions:
- Last call contains less events than the batch size
- Current call doesn't contain any events
### Request
```bash
curl --request GET \
--url 'https://api.projectdiscovery.io/v1/scans/vuln/changelogs?limit=10&offset=0&time=last_day&event_type=vuln_status&sort_desc=created_at' \
--header 'x-api-key: NUCLEI_API_KEY' \
--header 'x-team-id: NUCLEI_TEAM_ID'
```
### Response
> [!WARNING]
> Note that I've manually empty the response in the second event.
```json
{
"data": [
{
"change_event": [
{
"from": "open",
"name": "vuln_status",
"to": "fixed"
},
{
"from": true,
"name": "matcher_status",
"to": false
}
],
"created_at": "2025-08-26T03:41:56.388431",
"event": {
"host": "abc.us-east-1.aws.found.io",
"info": {
"author": [
"pussycat0x"
],
"description": "A root certificate is a digital certificate issued by a trusted certificate authority that acts as a basis for other digital certificates. An untrusted root certificate is a certificate that is issued by an authority that is not trusted by the computer, and therefore cannot be used to authenticate websites or other digital certificates.\n",
"metadata": {
"max-request": 1,
"verified": true
},
"name": "Untrusted Root Certificate - Detect",
"reference": [
"https://www.sslmarket.com/ssl/trusted-and-untrusted-certificate",
"https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/ssl-untrusted-root-certificate/"
],
"severity": "low",
"tags": [
"ssl",
"tls",
"untrusted"
]
},
"ip": "1.2.3.4",
"matcher-status": false,
"port": "80",
"response": "{\"timestamp\":\"2025-08-26T03:41:56.337646722Z\",\"host\":\"abc.us-east-1.aws.found.io\",\"ip\":\"54.160.25.132\",\"port\":\"443\",\"probe_status\":true,\"tls_version\":\"tls13\",\"cipher\":\"TLS_AES_128_GCM_SHA256\",\"not_before\":\"2025-07-13T23:50:37Z\",\"not_after\":\"2025-10-11T23:50:36Z\",\"subject_dn\":\"CN=*.test.com\",\"subject_cn\":\"*.test.com\",\"subject_an\":[\"*.test.com\"],\"serial\":\"XX:XX:XX\",\"issuer_dn\":\"CN=R11, O=Let's Encrypt, C=US\",\"issuer_cn\":\"R11\",\"issuer_org\":[\"Let's Encrypt\"],\"fingerprint_hash\":{\"md5\":\"XXX\",\"sha1\":\"XXX\",\"sha256\":\"XXX\"},\"wildcard_certificate\":true,\"tls_connection\":\"ctls\",\"sni\":\"abc.us-east-1.aws.found.io\"}",
"template-id": "untrusted-root-certificate",
"timestamp": "2025-08-26T03:41:56.354742956Z",
"type": "ssl"
},
"matcher_status": false,
"result_type": "",
"scan_id": "xyz",
"target": "abc.us-east-1.aws.found.io",
"template_id": "",
"template_url": "https://cloud.projectdiscovery.io/public/untrusted-root-certificate",
"updated_at": "2025-08-26T03:41:56.388431",
"vuln_hash": "0fc00913410675e57934492d761faf71",
"vuln_id": "d2c8nugviq0c9cusl19g",
"vuln_status": "fixed"
},
{
"change_event": [
{
"from": "open",
"name": "vuln_status",
"to": "fixed"
},
{
"from": true,
"name": "matcher_status",
"to": false
}
],
"created_at": "2025-08-26T03:41:55.288025",
"event": {
"host": "def.us-east-1.aws.found.io",
"info": {
"author": [
"pussycat0x"
],
"description": "A root certificate is a digital certificate issued by a trusted certificate authority that acts as a basis for other digital certificates. An untrusted root certificate is a certificate that is issued by an authority that is not trusted by the computer, and therefore cannot be used to authenticate websites or other digital certificates.\n",
"metadata": {
"max-request": 1,
"verified": true
},
"name": "Untrusted Root Certificate - Detect",
"reference": [
"https://www.sslmarket.com/ssl/trusted-and-untrusted-certificate",
"https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/ssl-untrusted-root-certificate/"
],
"severity": "low",
"tags": [
"ssl",
"tls",
"untrusted"
]
},
"ip": "5.6.7.8",
"matcher-status": false,
"port": "80",
"response": "",
"template-id": "untrusted-root-certificate",
"timestamp": "2025-08-26T03:41:55.253477Z",
"type": "ssl"
},
"matcher_status": false,
"result_type": "",
"scan_id": "xyz",
"target": "def.us-east-1.aws.found.io",
"template_id": "",
"template_url": "https://cloud.projectdiscovery.io/public/untrusted-root-certificate",
"updated_at": "2025-08-26T03:41:55.288025",
"vuln_hash": "0f24e15216efc58d82f3fbbd4fca76c5",
"vuln_id": "d2c8nl8viq0c9dtbriag",
"vuln_status": "open"
}
]
}
```
## Parameters
### Integration
| Parameter | Value | Comment |
|--------|--------|--------|
| API key | 11111111-aaaa-2222-bbbb-333333333333 | |
### Vulnerability datastream
| Parameter | Value | Comment |
|--------|--------|--------|
| Url | https://api.projectdiscovery.io | |
| Interval | 24h | any value in h/m/s |
| Input parameters | | Optional - [Parameter lists](https://docs.projectdiscovery.io/api-reference/results/get-all-vulnerability-changelogs#parameter-time) |
| Batch size | 100 | It seems there is no batch limit |
| HTTP Client Timeout | 10m | |
| Cloud Medata Source | Provider Only | cf Qualys VMDR: ECS fields must be mapped to the PD resource and not to the agent running the integration|
| Preserve duplicate custom fields | Yes/No | Preserve projectdiscovery.vulnerability.* fields that were copied to Elastic Common Schema (ECS) fields. |
Contributor guide
Assessment
This issue has not been assessed yet.