aiden-runtime 3.19.5 → 3.19.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api/server.js +24 -25
- package/dist/core/agentLoop.js +8 -6
- package/dist/core/aidenPersonality.js +20 -3
- package/dist/core/protectedContext.js +15 -2
- package/dist/core/skillLoader.js +2 -0
- package/dist/core/skillTeacher.js +18 -5
- package/dist/core/version.js +1 -1
- package/dist-bundle/cli.js +50 -18
- package/dist-bundle/index.js +73 -35
- package/package.json +2 -1
- package/scripts/postinstall.js +70 -1
- package/workspace-templates/HEARTBEAT.md +16 -0
- package/workspace-templates/SOUL.md +267 -0
- package/workspace-templates/STANDING_ORDERS.md +21 -0
- package/workspace-templates/permissions.yaml +180 -0
- package/workspace-templates/skills/architecture-diagram/SKILL.md +126 -0
- package/workspace-templates/skills/architecture-diagram/skill.json +25 -0
- package/workspace-templates/skills/arxiv/SKILL.md +124 -0
- package/workspace-templates/skills/arxiv/skill.json +26 -0
- package/workspace-templates/skills/ascii-art/SKILL.md +142 -0
- package/workspace-templates/skills/ascii-art/skill.json +26 -0
- package/workspace-templates/skills/blogwatcher/SKILL.md +147 -0
- package/workspace-templates/skills/blogwatcher/skill.json +26 -0
- package/workspace-templates/skills/censys/SKILL.md +104 -0
- package/workspace-templates/skills/censys/index.ts +133 -0
- package/workspace-templates/skills/censys/skill.json +25 -0
- package/workspace-templates/skills/clipboard-history/SKILL.md +101 -0
- package/workspace-templates/skills/clipboard-history/skill.json +23 -0
- package/workspace-templates/skills/crt-sh/SKILL.md +102 -0
- package/workspace-templates/skills/crt-sh/index.ts +59 -0
- package/workspace-templates/skills/crt-sh/skill.json +25 -0
- package/workspace-templates/skills/cveapi/SKILL.md +114 -0
- package/workspace-templates/skills/cveapi/index.ts +249 -0
- package/workspace-templates/skills/cveapi/skill.json +25 -0
- package/workspace-templates/skills/docker-management/SKILL.md +156 -0
- package/workspace-templates/skills/docker-management/skill.json +25 -0
- package/workspace-templates/skills/excalidraw/SKILL.md +148 -0
- package/workspace-templates/skills/excalidraw/skill.json +25 -0
- package/workspace-templates/skills/explainshell/SKILL.md +93 -0
- package/workspace-templates/skills/explainshell/index.ts +132 -0
- package/workspace-templates/skills/explainshell/skill.json +25 -0
- package/workspace-templates/skills/financial_research/SKILL.md +21 -0
- package/workspace-templates/skills/financial_research/skill.json +24 -0
- package/workspace-templates/skills/gif-search/SKILL.md +122 -0
- package/workspace-templates/skills/gif-search/skill.json +25 -0
- package/workspace-templates/skills/github-auth/SKILL.md +134 -0
- package/workspace-templates/skills/github-auth/skill.json +26 -0
- package/workspace-templates/skills/github-issues/SKILL.md +130 -0
- package/workspace-templates/skills/github-issues/skill.json +25 -0
- package/workspace-templates/skills/github-pr-workflow/SKILL.md +143 -0
- package/workspace-templates/skills/github-pr-workflow/skill.json +26 -0
- package/workspace-templates/skills/github-repo-management/SKILL.md +147 -0
- package/workspace-templates/skills/github-repo-management/skill.json +26 -0
- package/workspace-templates/skills/google-workspace/SKILL.md +110 -0
- package/workspace-templates/skills/google-workspace/skill.json +26 -0
- package/workspace-templates/skills/greynoise/SKILL.md +96 -0
- package/workspace-templates/skills/greynoise/index.ts +107 -0
- package/workspace-templates/skills/greynoise/skill.json +25 -0
- package/workspace-templates/skills/haveibeenpwned/SKILL.md +100 -0
- package/workspace-templates/skills/haveibeenpwned/index.ts +72 -0
- package/workspace-templates/skills/haveibeenpwned/skill.json +24 -0
- package/workspace-templates/skills/jupyter-live-kernel/SKILL.md +116 -0
- package/workspace-templates/skills/jupyter-live-kernel/skill.json +25 -0
- package/workspace-templates/skills/linear/SKILL.md +107 -0
- package/workspace-templates/skills/linear/skill.json +25 -0
- package/workspace-templates/skills/nano-pdf/SKILL.md +113 -0
- package/workspace-templates/skills/nano-pdf/skill.json +26 -0
- package/workspace-templates/skills/notion/SKILL.md +108 -0
- package/workspace-templates/skills/notion/skill.json +24 -0
- package/workspace-templates/skills/obsidian/SKILL.md +115 -0
- package/workspace-templates/skills/obsidian/skill.json +24 -0
- package/workspace-templates/skills/ocr-and-documents/SKILL.md +125 -0
- package/workspace-templates/skills/ocr-and-documents/skill.json +26 -0
- package/workspace-templates/skills/p5js/SKILL.md +163 -0
- package/workspace-templates/skills/p5js/skill.json +24 -0
- package/workspace-templates/skills/research-paper-writing/SKILL.md +158 -0
- package/workspace-templates/skills/research-paper-writing/skill.json +26 -0
- package/workspace-templates/skills/securityheaders/SKILL.md +99 -0
- package/workspace-templates/skills/securityheaders/index.ts +213 -0
- package/workspace-templates/skills/securityheaders/skill.json +26 -0
- package/workspace-templates/skills/shodan/SKILL.md +113 -0
- package/workspace-templates/skills/shodan/index.ts +94 -0
- package/workspace-templates/skills/shodan/skill.json +26 -0
- package/workspace-templates/skills/songsee/SKILL.md +152 -0
- package/workspace-templates/skills/songsee/skill.json +25 -0
- package/workspace-templates/skills/ssllabs/SKILL.md +107 -0
- package/workspace-templates/skills/ssllabs/index.ts +208 -0
- package/workspace-templates/skills/ssllabs/skill.json +27 -0
- package/workspace-templates/skills/stable-diffusion-image-generation/SKILL.md +136 -0
- package/workspace-templates/skills/stable-diffusion-image-generation/skill.json +24 -0
- package/workspace-templates/skills/systematic-debugging/SKILL.md +131 -0
- package/workspace-templates/skills/systematic-debugging/skill.json +25 -0
- package/workspace-templates/skills/test-driven-development/SKILL.md +164 -0
- package/workspace-templates/skills/test-driven-development/skill.json +25 -0
- package/workspace-templates/skills/urlscan/SKILL.md +118 -0
- package/workspace-templates/skills/urlscan/index.ts +94 -0
- package/workspace-templates/skills/urlscan/skill.json +24 -0
- package/workspace-templates/skills/virustotal/SKILL.md +120 -0
- package/workspace-templates/skills/virustotal/index.ts +124 -0
- package/workspace-templates/skills/virustotal/skill.json +26 -0
- package/workspace-templates/skills/web_research/SKILL.md +18 -0
- package/workspace-templates/skills/web_research/skill.json +20 -0
- package/workspace-templates/skills/xitter/SKILL.md +148 -0
- package/workspace-templates/skills/xitter/skill.json +26 -0
- package/workspace-templates/skills/youtube-content/SKILL.md +121 -0
- package/workspace-templates/skills/youtube-content/skill.json +25 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// skills/censys/index.ts
|
|
2
|
+
// Programmatic handler — host lookup, search, and certificate analysis via Censys v2 API.
|
|
3
|
+
|
|
4
|
+
import { ApiSkill } from '../../core/apiSkillBase'
|
|
5
|
+
|
|
6
|
+
// Censys uses HTTP Basic auth: Base64(API_ID:API_SECRET)
|
|
7
|
+
// We build the credential lazily so env vars can be set after module load.
|
|
8
|
+
|
|
9
|
+
let _skill: ApiSkill | null = null
|
|
10
|
+
|
|
11
|
+
function getSkill(): ApiSkill {
|
|
12
|
+
if (_skill) return _skill
|
|
13
|
+
|
|
14
|
+
const apiId = process.env['CENSYS_API_ID'] ?? ''
|
|
15
|
+
const apiSecret = process.env['CENSYS_API_SECRET'] ?? ''
|
|
16
|
+
|
|
17
|
+
if (!apiId || !apiSecret) {
|
|
18
|
+
throw new Error(
|
|
19
|
+
'CENSYS_API_ID and CENSYS_API_SECRET are not configured.\n' +
|
|
20
|
+
'Add them to .env:\n CENSYS_API_ID=your-id\n CENSYS_API_SECRET=your-secret\n' +
|
|
21
|
+
'Free account: https://search.censys.io/register',
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const encoded = Buffer.from(`${apiId}:${apiSecret}`).toString('base64')
|
|
26
|
+
|
|
27
|
+
_skill = new ApiSkill({
|
|
28
|
+
name: 'censys',
|
|
29
|
+
baseUrl: 'https://search.censys.io/api/v2',
|
|
30
|
+
authType: 'header',
|
|
31
|
+
authHeader: 'Authorization',
|
|
32
|
+
apiKey: `Basic ${encoded}`,
|
|
33
|
+
rateLimit: { requests: 4, windowMs: 10_000 }, // 0.4 req/sec
|
|
34
|
+
timeout: 20_000,
|
|
35
|
+
retries: 2,
|
|
36
|
+
})
|
|
37
|
+
return _skill
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ── Output types ──────────────────────────────────────────────
|
|
41
|
+
|
|
42
|
+
export interface CensysService {
|
|
43
|
+
port: number
|
|
44
|
+
protocol: string // e.g. "TCP"
|
|
45
|
+
name: string // e.g. "HTTP", "HTTPS"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface CensysHost {
|
|
49
|
+
ip: string
|
|
50
|
+
asn: number
|
|
51
|
+
asnName: string
|
|
52
|
+
country: string
|
|
53
|
+
city: string
|
|
54
|
+
services: CensysService[]
|
|
55
|
+
lastUpdated: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface CensysSearchResult {
|
|
59
|
+
total: number
|
|
60
|
+
hits: Array<{
|
|
61
|
+
ip: string
|
|
62
|
+
asn: number
|
|
63
|
+
asnName: string
|
|
64
|
+
country: string
|
|
65
|
+
}>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface CensysCertificate {
|
|
69
|
+
fingerprint: string
|
|
70
|
+
subjectDn: string
|
|
71
|
+
issuerDn: string
|
|
72
|
+
names: string[]
|
|
73
|
+
validStart: string
|
|
74
|
+
validEnd: string
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ── Public API ────────────────────────────────────────────────
|
|
78
|
+
|
|
79
|
+
/** Look up a specific IP address in Censys. */
|
|
80
|
+
export async function hostLookup(ip: string): Promise<CensysHost> {
|
|
81
|
+
const raw = await getSkill().get(`/hosts/${encodeURIComponent(ip)}`)
|
|
82
|
+
const r = raw.result ?? raw // some responses nest under result
|
|
83
|
+
|
|
84
|
+
const services: CensysService[] = (r.services ?? []).map((s: any) => ({
|
|
85
|
+
port: s.port ?? 0,
|
|
86
|
+
protocol: s.transport_protocol ?? 'TCP',
|
|
87
|
+
name: s.service_name ?? s.extended_service_name ?? '',
|
|
88
|
+
}))
|
|
89
|
+
|
|
90
|
+
const as = r.autonomous_system ?? {}
|
|
91
|
+
const loc = r.location ?? {}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
ip: r.ip ?? ip,
|
|
95
|
+
asn: as.asn ?? 0,
|
|
96
|
+
asnName: as.name ?? as.bgp_prefix ?? '',
|
|
97
|
+
country: loc.country ?? loc.country_code ?? '',
|
|
98
|
+
city: loc.city ?? '',
|
|
99
|
+
services,
|
|
100
|
+
lastUpdated: r.last_updated_at ?? '',
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Search Censys hosts with a query string. */
|
|
105
|
+
export async function hostSearch(query: string, perPage = 25): Promise<CensysSearchResult> {
|
|
106
|
+
const raw = await getSkill().get('/hosts/search', { q: query, per_page: String(perPage) })
|
|
107
|
+
const r = raw.result ?? raw
|
|
108
|
+
|
|
109
|
+
const hits = (r.hits ?? []).map((h: any) => ({
|
|
110
|
+
ip: h.ip ?? '',
|
|
111
|
+
asn: h.autonomous_system?.asn ?? 0,
|
|
112
|
+
asnName: h.autonomous_system?.name ?? '',
|
|
113
|
+
country: h.location?.country ?? h.location?.country_code ?? '',
|
|
114
|
+
}))
|
|
115
|
+
|
|
116
|
+
return { total: r.total ?? hits.length, hits }
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/** Look up a TLS certificate by its SHA-256 fingerprint. */
|
|
120
|
+
export async function certificateLookup(sha256: string): Promise<CensysCertificate> {
|
|
121
|
+
const raw = await getSkill().get(`/certificates/${sha256.toLowerCase()}`)
|
|
122
|
+
const parsed = (raw.result ?? raw).parsed ?? {}
|
|
123
|
+
const val = parsed.validity ?? {}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
fingerprint: sha256,
|
|
127
|
+
subjectDn: parsed.subject_dn ?? '',
|
|
128
|
+
issuerDn: parsed.issuer_dn ?? '',
|
|
129
|
+
names: parsed.names_from_san ?? [],
|
|
130
|
+
validStart: val.start ?? '',
|
|
131
|
+
validEnd: val.end ?? '',
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "censys",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Search Censys for internet-exposed hosts, certificates, and services — host lookups, queries, and certificate analysis",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"security",
|
|
15
|
+
"censys",
|
|
16
|
+
"osint",
|
|
17
|
+
"recon",
|
|
18
|
+
"ports",
|
|
19
|
+
"certificates",
|
|
20
|
+
"tls",
|
|
21
|
+
"asset-discovery",
|
|
22
|
+
"internet-scan"
|
|
23
|
+
],
|
|
24
|
+
"created": "2026-04-27T17:11:39.264Z"
|
|
25
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clipboard-history
|
|
3
|
+
description: Read, write, and manage Windows clipboard content including text, HTML, images, and clipboard history via PowerShell
|
|
4
|
+
category: windows
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
platform: windows
|
|
7
|
+
tags: clipboard, copy, paste, history, windows, powershell, text
|
|
8
|
+
license: Apache-2.0
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Clipboard History
|
|
12
|
+
|
|
13
|
+
Read and write Windows clipboard content, access clipboard history (Win+V), and manipulate clipboard data — text, HTML, and file lists — via PowerShell.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to read what's currently on the clipboard
|
|
18
|
+
- User asks Aiden to set or overwrite clipboard content
|
|
19
|
+
- User wants to pipe command output directly to the clipboard
|
|
20
|
+
- User needs to clear the clipboard or check clipboard history
|
|
21
|
+
- User wants to copy a file path, URL, or code snippet to clipboard
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### Read current clipboard text
|
|
26
|
+
```powershell
|
|
27
|
+
Get-Clipboard
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Write text to clipboard
|
|
31
|
+
```powershell
|
|
32
|
+
Set-Clipboard -Value "Hello from Aiden!"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Pipe command output to clipboard
|
|
36
|
+
```powershell
|
|
37
|
+
Get-Process | Out-String | Set-Clipboard
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Copy a file path to clipboard
|
|
41
|
+
```powershell
|
|
42
|
+
Set-Clipboard -Value "C:\Users\shiva\Documents\report.pdf"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Clear the clipboard
|
|
46
|
+
```powershell
|
|
47
|
+
Set-Clipboard -Value $null
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Read clipboard as HTML (if HTML is on clipboard)
|
|
51
|
+
```powershell
|
|
52
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
53
|
+
[System.Windows.Forms.Clipboard]::GetText([System.Windows.Forms.TextDataFormat]::Html)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Check if clipboard contains an image
|
|
57
|
+
```powershell
|
|
58
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
59
|
+
[System.Windows.Forms.Clipboard]::ContainsImage()
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Save clipboard image to file
|
|
63
|
+
```powershell
|
|
64
|
+
Add-Type -AssemblyName System.Windows.Forms
|
|
65
|
+
$img = [System.Windows.Forms.Clipboard]::GetImage()
|
|
66
|
+
if ($img) {
|
|
67
|
+
$img.Save("$env:USERPROFILE\Desktop\clipboard-image.png")
|
|
68
|
+
Write-Host "Saved to Desktop"
|
|
69
|
+
} else {
|
|
70
|
+
Write-Host "No image on clipboard"
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Access clipboard history entries (Win+V API)
|
|
75
|
+
```powershell
|
|
76
|
+
# Clipboard history requires Windows 10 1809+ and history enabled in Settings
|
|
77
|
+
# Use the ContentDeliveryManager workaround or UWP API via PowerShell
|
|
78
|
+
Add-Type -AssemblyName Windows.ApplicationModel
|
|
79
|
+
$history = [Windows.ApplicationModel.DataTransfer.Clipboard,Windows.ApplicationModel,ContentType=WindowsRuntime]
|
|
80
|
+
# Note: full UWP clipboard history requires a packaged app context
|
|
81
|
+
# For CLI use, pipe history via the built-in Win+V UI or a third-party tool
|
|
82
|
+
Write-Host "Open Win+V to view clipboard history interactively"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Examples
|
|
86
|
+
|
|
87
|
+
**"Copy the output of dir to clipboard"**
|
|
88
|
+
→ `Get-ChildItem | Out-String | Set-Clipboard`
|
|
89
|
+
|
|
90
|
+
**"Put my public IP address on the clipboard"**
|
|
91
|
+
→ `(Invoke-RestMethod -Uri 'https://api.ipify.org').Trim() | Set-Clipboard`
|
|
92
|
+
|
|
93
|
+
**"Clear whatever is on the clipboard"**
|
|
94
|
+
→ `Set-Clipboard -Value $null`
|
|
95
|
+
|
|
96
|
+
## Cautions
|
|
97
|
+
|
|
98
|
+
- `Set-Clipboard` requires PowerShell 5.1+ on Windows; earlier versions use `clip.exe` as fallback
|
|
99
|
+
- Clipboard history (Win+V) requires it to be enabled in Settings → System → Clipboard
|
|
100
|
+
- Image and HTML clipboard operations require `System.Windows.Forms` assembly — only available on Windows
|
|
101
|
+
- Clipboard contents are not persisted across reboots unless pinned in the clipboard history UI
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "clipboard-history",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Read, write, and manage Windows clipboard content including text, HTML, images, and clipboard history via PowerShell",
|
|
5
|
+
"author": "local",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"clipboard",
|
|
15
|
+
"copy",
|
|
16
|
+
"paste",
|
|
17
|
+
"history",
|
|
18
|
+
"windows",
|
|
19
|
+
"powershell",
|
|
20
|
+
"text"
|
|
21
|
+
],
|
|
22
|
+
"created": "2026-04-27T17:11:39.322Z"
|
|
23
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: crt.sh
|
|
3
|
+
description: Search certificate transparency logs to enumerate subdomains and TLS certificates for any domain — no API key required
|
|
4
|
+
category: security
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
origin: aiden
|
|
8
|
+
tags: security, osint, certificates, subdomains, tls, ssl, ct-logs, recon, crt.sh
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Certificate Transparency Search (crt.sh)
|
|
12
|
+
|
|
13
|
+
Query [crt.sh](https://crt.sh) to enumerate all TLS/SSL certificates ever issued for a domain. Certificate transparency logs are public — no API key or account needed.
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
|
|
17
|
+
- User wants to find all subdomains of a domain (recon / asset discovery)
|
|
18
|
+
- User wants to see what TLS certificates have been issued for their domain
|
|
19
|
+
- User is doing OSINT on an organization's infrastructure
|
|
20
|
+
- User asks "what subdomains does X have" or "find all certs for domain"
|
|
21
|
+
- Security audit: discover forgotten or misconfigured subdomains
|
|
22
|
+
|
|
23
|
+
## How to Use
|
|
24
|
+
|
|
25
|
+
### List all certificates for a domain
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
$domain = "taracod.com"
|
|
29
|
+
$url = "https://crt.sh/?q=$domain&output=json"
|
|
30
|
+
|
|
31
|
+
$certs = Invoke-RestMethod -Uri $url
|
|
32
|
+
Write-Host "Found $($certs.Count) certificate records"
|
|
33
|
+
$certs | Select-Object -First 10 | Format-Table id, name_value, not_before, not_after -AutoSize
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Extract unique subdomain names
|
|
37
|
+
|
|
38
|
+
```powershell
|
|
39
|
+
$domain = "taracod.com"
|
|
40
|
+
$url = "https://crt.sh/?q=$([Uri]::EscapeDataString("*.$domain"))&output=json"
|
|
41
|
+
|
|
42
|
+
$certs = Invoke-RestMethod -Uri $url
|
|
43
|
+
$names = $certs | ForEach-Object { $_.name_value -split "`n" } |
|
|
44
|
+
Sort-Object -Unique |
|
|
45
|
+
Where-Object { $_ -ne "" -and $_ -ne "*.$domain" }
|
|
46
|
+
|
|
47
|
+
Write-Host "Unique subdomains / names ($($names.Count)):"
|
|
48
|
+
$names | ForEach-Object { Write-Host " $_" }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Search for certificates by organization (CA issuance)
|
|
52
|
+
|
|
53
|
+
```powershell
|
|
54
|
+
$domain = "taracod.com"
|
|
55
|
+
$url = "https://crt.sh/?q=$domain&output=json"
|
|
56
|
+
$certs = Invoke-RestMethod -Uri $url
|
|
57
|
+
|
|
58
|
+
$certs | Select-Object issuer_name, not_before, not_after, name_value |
|
|
59
|
+
Sort-Object not_before -Descending |
|
|
60
|
+
Select-Object -First 20 |
|
|
61
|
+
Format-Table -AutoSize
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Find recently issued certificates (last 30 days)
|
|
65
|
+
|
|
66
|
+
```powershell
|
|
67
|
+
$domain = "example.com"
|
|
68
|
+
$url = "https://crt.sh/?q=$domain&output=json"
|
|
69
|
+
$certs = Invoke-RestMethod -Uri $url
|
|
70
|
+
$cutoff = (Get-Date).AddDays(-30)
|
|
71
|
+
|
|
72
|
+
$recent = $certs | Where-Object {
|
|
73
|
+
[datetime]$_.not_before -gt $cutoff
|
|
74
|
+
} | Select-Object name_value, not_before, issuer_name
|
|
75
|
+
|
|
76
|
+
Write-Host "Certificates issued in the last 30 days: $($recent.Count)"
|
|
77
|
+
$recent | Format-Table -AutoSize
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Examples
|
|
81
|
+
|
|
82
|
+
**"Find all subdomains for google.com"**
|
|
83
|
+
→ Use the subdomain extraction snippet with `$domain = "google.com"`.
|
|
84
|
+
|
|
85
|
+
**"What TLS certificates has github.com had?"**
|
|
86
|
+
→ Use the first snippet with `$domain = "github.com"` and look at `not_before`/`not_after`.
|
|
87
|
+
|
|
88
|
+
**"Show me recently issued certs for competitor.com"**
|
|
89
|
+
→ Use the "recently issued" snippet — useful for tracking new infrastructure.
|
|
90
|
+
|
|
91
|
+
## Cautions
|
|
92
|
+
|
|
93
|
+
- crt.sh is a free public service — do not hammer it with rapid requests; add a short delay between bulk queries
|
|
94
|
+
- Results include historical (expired) certificates unless you filter by `not_after`
|
|
95
|
+
- Wildcard certificates (`*.example.com`) are returned — the `name_value` field may contain multiple names separated by newlines
|
|
96
|
+
- Subdomains found here may no longer be active — always verify with DNS before assuming they are live
|
|
97
|
+
- Certificate transparency data is public by design; this is open-source intelligence, not hacking
|
|
98
|
+
|
|
99
|
+
## Requirements
|
|
100
|
+
|
|
101
|
+
- No API key required — crt.sh is fully public
|
|
102
|
+
- PowerShell's `Invoke-RestMethod` handles JSON parsing automatically
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// skills/crt-sh/index.ts
|
|
2
|
+
// Programmatic handler — no auth required, uses ApiSkill for retries/timeout.
|
|
3
|
+
|
|
4
|
+
import { ApiSkill } from '../../core/apiSkillBase'
|
|
5
|
+
|
|
6
|
+
const skill = new ApiSkill({
|
|
7
|
+
name: 'crt.sh',
|
|
8
|
+
baseUrl: 'https://crt.sh',
|
|
9
|
+
authType: 'none',
|
|
10
|
+
timeout: 30_000,
|
|
11
|
+
retries: 3,
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
export interface CertRecord {
|
|
15
|
+
id: number
|
|
16
|
+
name_value: string
|
|
17
|
+
issuer_name: string
|
|
18
|
+
not_before: string
|
|
19
|
+
not_after: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export async function searchCerts(domain: string): Promise<{
|
|
23
|
+
total: number
|
|
24
|
+
subdomains: string[]
|
|
25
|
+
raw: CertRecord[]
|
|
26
|
+
}> {
|
|
27
|
+
const results: CertRecord[] = await skill.get('/', {
|
|
28
|
+
q: `%.${domain}`,
|
|
29
|
+
output: 'json',
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
if (!Array.isArray(results) || results.length === 0) {
|
|
33
|
+
return { total: 0, subdomains: [], raw: [] }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Flatten multi-value name fields and deduplicate
|
|
37
|
+
const subdomains = [
|
|
38
|
+
...new Set(
|
|
39
|
+
results
|
|
40
|
+
.flatMap(r => r.name_value.split('\n'))
|
|
41
|
+
.map(s => s.trim())
|
|
42
|
+
.filter(s => s && !s.startsWith('*.')),
|
|
43
|
+
),
|
|
44
|
+
].sort()
|
|
45
|
+
|
|
46
|
+
return { total: results.length, subdomains, raw: results }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export async function formatSubdomains(domain: string): Promise<string> {
|
|
50
|
+
const { total, subdomains } = await searchCerts(domain)
|
|
51
|
+
|
|
52
|
+
if (total === 0) return `No certificates found for ${domain}`
|
|
53
|
+
|
|
54
|
+
return [
|
|
55
|
+
`Found ${total} certificate records for ${domain}.`,
|
|
56
|
+
`Unique subdomains/names (${subdomains.length}):`,
|
|
57
|
+
...subdomains.map(s => ` ${s}`),
|
|
58
|
+
].join('\n')
|
|
59
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "crt-sh",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Search certificate transparency logs to enumerate subdomains and TLS certificates for any domain — no API key required",
|
|
5
|
+
"author": "aiden",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"tools": [],
|
|
8
|
+
"trigger_phrases": [],
|
|
9
|
+
"compatible_agents": [
|
|
10
|
+
"aiden"
|
|
11
|
+
],
|
|
12
|
+
"min_agent_version": "3.0.0",
|
|
13
|
+
"tags": [
|
|
14
|
+
"security",
|
|
15
|
+
"osint",
|
|
16
|
+
"certificates",
|
|
17
|
+
"subdomains",
|
|
18
|
+
"tls",
|
|
19
|
+
"ssl",
|
|
20
|
+
"ct-logs",
|
|
21
|
+
"recon",
|
|
22
|
+
"crt.sh"
|
|
23
|
+
],
|
|
24
|
+
"created": "2026-04-27T17:11:39.411Z"
|
|
25
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cveapi
|
|
3
|
+
description: Look up CVE vulnerability details by ID via MITRE CVE API with NVD fallback — severity, CVSS score, affected products, and references
|
|
4
|
+
category: security
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
license: Apache-2.0
|
|
7
|
+
origin: aiden
|
|
8
|
+
tags: security, cve, vulnerability, nvd, mitre, cvss, patch, incident-response, compliance
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# CVE API — Vulnerability Lookup
|
|
12
|
+
|
|
13
|
+
Look up any CVE (Common Vulnerabilities and Exposures) by ID to get severity, CVSS score, affected products, and reference links. Uses the MITRE CVE API (cveawg.mitre.org) with automatic fallback to the NVD (National Vulnerability Database) for richer data.
|
|
14
|
+
|
|
15
|
+
**No API key required.** Optionally set `NVD_API_KEY` for higher rate limits on the NVD endpoint.
|
|
16
|
+
|
|
17
|
+
## When to Use
|
|
18
|
+
|
|
19
|
+
- User asks about a specific CVE by ID (e.g. "what is CVE-2021-44228?")
|
|
20
|
+
- Security team needs severity and CVSS score for patch prioritization
|
|
21
|
+
- Incident response: quickly triage whether a reported CVE is critical
|
|
22
|
+
- Compliance audit: confirm affected software versions for a given vulnerability
|
|
23
|
+
- User asks "is this CVE critical?", "what does CVE-XXXX-XXXXX affect?"
|
|
24
|
+
|
|
25
|
+
## How to Use
|
|
26
|
+
|
|
27
|
+
### Look up a single CVE (MITRE CVE API)
|
|
28
|
+
|
|
29
|
+
```powershell
|
|
30
|
+
$cveId = "CVE-2021-44228"
|
|
31
|
+
$url = "https://cveawg.mitre.org/api/cve/$cveId"
|
|
32
|
+
|
|
33
|
+
$result = Invoke-RestMethod -Uri $url
|
|
34
|
+
$cna = $result.containers.cna
|
|
35
|
+
$desc = ($cna.descriptions | Where-Object { $_.lang -eq 'en' } | Select-Object -First 1).value
|
|
36
|
+
$cvss = $cna.metrics | ForEach-Object {
|
|
37
|
+
$_.PSObject.Properties | Where-Object { $_.Name -like 'cvssV3*' } |
|
|
38
|
+
Select-Object -First 1 -ExpandProperty Value
|
|
39
|
+
} | Select-Object -First 1
|
|
40
|
+
|
|
41
|
+
Write-Host "CVE: $($result.cveMetadata.cveId)"
|
|
42
|
+
Write-Host "State: $($result.cveMetadata.state)"
|
|
43
|
+
Write-Host "Published: $($result.cveMetadata.datePublished)"
|
|
44
|
+
Write-Host "Score: $($cvss.baseScore) ($($cvss.baseSeverity))"
|
|
45
|
+
Write-Host "Description: $desc"
|
|
46
|
+
Write-Host "References: $(($cna.references | Select-Object -First 3 -ExpandProperty url) -join ', ')"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Look up via NVD (richer data, optional API key)
|
|
50
|
+
|
|
51
|
+
```powershell
|
|
52
|
+
$cveId = "CVE-2021-44228"
|
|
53
|
+
$headers = @{}
|
|
54
|
+
if ($env:NVD_API_KEY) { $headers['apiKey'] = $env:NVD_API_KEY }
|
|
55
|
+
|
|
56
|
+
$url = "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=$cveId"
|
|
57
|
+
$result = Invoke-RestMethod -Uri $url -Headers $headers
|
|
58
|
+
$cve = $result.vulnerabilities[0].cve
|
|
59
|
+
$desc = ($cve.descriptions | Where-Object { $_.lang -eq 'en' } | Select-Object -First 1).value
|
|
60
|
+
$metric = $cve.metrics.cvssMetricV31[0].cvssData
|
|
61
|
+
|
|
62
|
+
Write-Host "CVE: $($cve.id)"
|
|
63
|
+
Write-Host "Published: $($cve.published)"
|
|
64
|
+
Write-Host "Score: $($metric.baseScore) ($($metric.baseSeverity))"
|
|
65
|
+
Write-Host "Vector: $($metric.vectorString)"
|
|
66
|
+
Write-Host "Desc: $($desc.Substring(0, [Math]::Min(200, $desc.Length)))..."
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Batch lookup — check multiple CVEs
|
|
70
|
+
|
|
71
|
+
```powershell
|
|
72
|
+
$cveIds = @("CVE-2021-44228", "CVE-2023-4863", "CVE-2024-3094")
|
|
73
|
+
|
|
74
|
+
foreach ($id in $cveIds) {
|
|
75
|
+
try {
|
|
76
|
+
$url = "https://cveawg.mitre.org/api/cve/$id"
|
|
77
|
+
$result = Invoke-RestMethod -Uri $url
|
|
78
|
+
$cna = $result.containers.cna
|
|
79
|
+
$cvss = ($cna.metrics | Where-Object { $_.PSObject.Properties.Name -like 'cvssV3*' } |
|
|
80
|
+
Select-Object -First 1).PSObject.Properties.Value | Select-Object -First 1
|
|
81
|
+
Write-Host "$id Score: $($cvss.baseScore ?? 'N/A') ($($cvss.baseSeverity ?? 'UNKNOWN'))"
|
|
82
|
+
} catch {
|
|
83
|
+
Write-Host "$id ERROR: $($_.Exception.Message)"
|
|
84
|
+
}
|
|
85
|
+
Start-Sleep -Milliseconds 200 # polite rate limiting
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Examples
|
|
90
|
+
|
|
91
|
+
**"Look up CVE-2021-44228"**
|
|
92
|
+
→ Returns Log4Shell details: CVSS 10.0 CRITICAL, affects Apache Log4j 2.x.
|
|
93
|
+
|
|
94
|
+
**"What's the severity of CVE-2023-4863?"**
|
|
95
|
+
→ Returns WebP heap buffer overflow: CVSS 8.8 HIGH, affects Chrome/libwebp.
|
|
96
|
+
|
|
97
|
+
**"Get details for CVE-2024-3094"**
|
|
98
|
+
→ Returns XZ Utils backdoor: CVSS 10.0 CRITICAL, supply-chain attack.
|
|
99
|
+
|
|
100
|
+
**"Is CVE-2024-12345 critical?"**
|
|
101
|
+
→ Looks up and reports severity tier: CRITICAL / HIGH / MEDIUM / LOW / NONE.
|
|
102
|
+
|
|
103
|
+
## Cautions
|
|
104
|
+
|
|
105
|
+
- MITRE CVE API has no documented rate limit — use 1–2 req/sec as a courtesy
|
|
106
|
+
- NVD has stricter rate limiting: 5 req/30s without a key, 50 req/30s with `NVD_API_KEY`
|
|
107
|
+
- Some CVEs are `RESERVED` (not yet disclosed) — the API returns limited data
|
|
108
|
+
- CVSS score may be absent for very new or disputed CVEs
|
|
109
|
+
- NVD and MITRE may have slightly different data — NVD is generally more complete
|
|
110
|
+
|
|
111
|
+
## Requirements
|
|
112
|
+
|
|
113
|
+
- No key required for basic use
|
|
114
|
+
- `NVD_API_KEY` (optional) — free at https://nvd.nist.gov/developers/request-an-api-key
|