
puncia v0.36
Panthera(P.)uncia - Utilitaire CLI officiel pour Subdomain Center & Exploit Observer.
Panthera(P.)uncia
Utilitaire CLI officiel pour Subdomain Center & Exploit Observer
Puncia est le client en ligne de commande officiel de deux API de renseignement d'A.R.P. Syndicate — pointez-le vers un domaine, une marque ou un identifiant de vulnérabilité et obtenez un JSON structuré en quelques secondes, sans navigateur :
- 🕸️ Subdomain Center — énumération de sous-domaines, détection de subdomain takeover, découverte de shadow IT, et détection d'usurpation de marque / de domaines ressemblants (typosquat) à l'échelle d'Internet.
- 💥 Exploit Observer — renseignement sur les exploits et vulnérabilités couvrant plus de 150 schémas d'identifiants (CVE, GHSA, EDB, MSF, ZDI, flux d'États-nations et plus), avec enrichissement CVE/GHSA (scoring de maturité EPSS + VEDAS) et analyse de SBOM.
$ puncia subdomain arpsyndicate.io
╭──────────────────────────────────────────────────────────────────────╮
│ Panthera(P.)uncia v0.38 │
│ subdomain recon · brand impersonation · exploit intel · sbom analysis│
│ A.R.P. Syndicate — https://www.arpsyndicate.io │
╰──────────────────────────────────────────────────────────────────────╯
[
"advisories.arpsyndicate.io",
"asm.arpsyndicate.io",
"blog.arpsyndicate.io",
...
]
$ puncia sbom bom.json ./out
puncia ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% (128/128) 0:00:41
Veuillez noter que bien que ces résultats puissent parfois être assez imprécis et peu fiables, ils peuvent grandement varier d'un moment à l'autre en raison de leurs capacités d'auto-amélioration.
Les limites de débit agressives peuvent être évitées avec une clé API : https://www.arpsyndicate.io/pricing.html
Applications pratiques
- Détection d'usurpation de marque et de domaines de phishing
Faites surface les domaines répliques, ressemblants et typosquats exploitant votre marque avant qu'ils ne soient utilisés contre vous ou vos clients. - Découverte de shadow IT et de la surface d'attaque externe
Identifiez et surveillez les sous-domaines exposés et les infrastructures déployées en dehors des canaux officiels. - Reconnaissance pour subdomain takeover
Énumérez l'empreinte complète des sous-domaines d'une cible, une première étape clé pour repérer les enregistrements orphelins/propices au takeover. - Recherche et surveillance avancées des vulnérabilités
Découvrez et suivez les menaces connues et émergentes, y compris les vulnérabilités obscures ou non répertoriées. - Enrichissement contextuel des données CVE/GHSA
Ajoutez de la profondeur et du renseignement exploitable (scores de maturité EPSS + VEDAS) aux vulnérabilités connues pour une meilleure priorisation. - Détection de vulnérabilités dans les Software Bill of Materials (SBOM)
Analysez les composants logiciels à la recherche d'exploits connus et de problèmes de sécurité à l'aide de données SBOM structurées. - Intégration transparente avec les workflows CI/CD et de threat intel
Automatisez la collecte de renseignements et les vérifications de vulnérabilités au sein des pipelines de développement ou de sécurité. - Surveillance des tendances d'exploits d'États-nations
Gardez une longueur d'avance sur les menaces en suivant les vulnérabilités signalées par des acteurs étrangers mais pas encore reconnues par les bases de données grand public. - Découverte de sous-domaines par mot-clé
Faites surface les hôtes portant un mot-clé donné à travers Internet, indépendamment d'un domaine parent spécifique. - Traitement en masse de threat intelligence
Lancez des requêtes par lots (domaines, vulnérabilités, etc.) pour une analyse évolutive sur de grands ensembles de données ou des inventaires d'actifs d'entreprise. - Reconnaissance passive pour les Red Teams
Menez une reconnaissance furtive en utilisant des sources de données passives (aucune interaction directe avec les cibles). - Collecte d'Open Source Intelligence (OSINT)
Combinez le renseignement sur les sous-domaines et les exploits pour enrichir les enquêtes OSINT. - Support à la conformité et à la gestion des risques
Enrichissez les données de vulnérabilités pour appuyer les audits de conformité (par ex. ISO 27001, SOC 2) avec un contexte plus approfondi.
Installation
- Depuis PyPi -
pip3 install puncia - Depuis les sources -
pip3 install .
Démarrage rapide en 30 secondes
pip3 install puncia
# subdomain footprint of a target (shadow IT / attack surface / takeover recon)
puncia subdomain example.com
# lookalike / typosquat / brand-impersonation domains
puncia replica example.com
# what's known about a CVE
puncia exploit CVE-2021-44228
Utilisation
puncia <mode> <query> [output] [--match M] [--domain D] [--limit N] [--offset N]
[--crawl] [--api-key K] [--concurrency N]
[--timeout S] [--retries N] [--quiet]
Lancez puncia --help pour la référence complète. Les résultats sont affichés sur stdout ; la
bannière, les barres de progression, les avertissements et les erreurs vont tous sur stderr, donc
puncia subdomain example.com > out.json produit toujours un JSON propre et valide.
Codes de sortie : 0 succès · 1 erreur de requête ou d'entrée · 2 erreur d'utilisation.
-
(PAYANT) Stocker une clé API (storekey) -
puncia storekey <api-key>- Stockée dans
~/.punciaavec des permissions0600.$PUNCIA_API_KEYla remplace, ce qui est généralement ce que vous voulez en CI.
- Stockée dans
-
(FREEMIUM) Interroger des domaines, regroupés par domaine (moteur subdomain /
cuttlefish) -puncia subdomain <domain> <output-file>- Pagination (authentifié uniquement) : un résultat authentifié n'a pas de plafond
total. Par défaut,
subdomain/replica/keywordparcourent toutes les pages et les fusionnent pour vous. Passez--offset(avec ou sans--limit) pour récupérer exactement une page brute vous-même à la place, par ex. pour un parcours reprenable ou en streaming :Les requêtes anonymes ignorentpuncia subdomain bigco.com --limit 50000 --offset 0 # stderr prints: note: more results available — continue with --offset 50000 puncia subdomain bigco.com --limit 50000 --offset 50000--limit/--offsetcôté serveur (toujours un échantillon mélangé de jusqu'à 500 lignes) ; puncia avertit plutôt que de prétendre qu'elles ont fait quelque chose. - Crawl en direct (authentifié uniquement) :
--crawlcomplète les résultats stockés avec une passe de découverte en direct. Un domaine donné n'est réellement re-crawlé qu'une fois toutes les ~6h — les requêtes dans cette fenêtre reçoivent le résultat de crawl en cache instantanément. Puncia rapporte le résultat sur stderr :crawl: fresh, 12 newly discovered name(s)(égalementpartial/cooldown/disabled).puncia subdomain bigco.com --crawl
- Pagination (authentifié uniquement) : un résultat authentifié n'a pas de plafond
total. Par défaut,
-
(FREEMIUM) Interroger des domaines répliques, regroupés par marque (moteur replica /
octopus) -puncia replica <domain> --match <prefix|exact|substring> <output-file> -
(FREEMIUM) Interroger par mot-clé, regroupés par mot-clé (moteur keyword /
ammonites) -puncia keyword <keyword> --match <exact|prefix> <output-file>- Limitez éventuellement le mot-clé à un seul domaine avec
--domain:puncia keyword blog --domain bandcamp.com
- Limitez éventuellement le mot-clé à un seul domaine avec
-
Interroger les identifiants d'exploits et de vulnérabilités (exploit)
- (GRATUIT) Liste de surveillance des identifiants de vulnérabilités et d'exploits (^WATCHLIST_IDES) -
puncia exploit ^WATCHLIST_IDES <output-file> - (GRATUIT) Liste de surveillance des identifiants de vulnérabilités et d'exploits avec descriptions (^WATCHLIST_INFO) -
puncia exploit ^WATCHLIST_INFO <output-file> - (GRATUIT) Liste de surveillance des technologies vulnérables (^WATCHLIST_TECH) -
puncia exploit ^WATCHLIST_TECH <output-file> - (GRATUIT) Statistiques agrégées de vulnérabilités/exploits (^STATS) -
puncia exploit ^STATS <output-file> - (GRATUIT) Santé du service (^HEALTH) -
puncia exploit ^HEALTH <output-file> - (FREEMIUM) Identifiants de vulnérabilités pris en charge -
puncia exploit <eoidentifier> --match <substring|prefix|exact> <output-file>
- (GRATUIT) Liste de surveillance des identifiants de vulnérabilités et d'exploits (^WATCHLIST_IDES) -
-
(FREEMIUM) Enrichir les identifiants CVE/GHSA (enrich) -
puncia enrich <cve-id/ghsa-id> <output-file>enrich=truene prend effet que pour les identifiantsCVE-/GHSA-; il fusionne l'enregistrement d'avis amont complet avec le scoring EPSS + VEDAS.
-
(PAYANT) Identifiants non-CVE par groupe VEDAS (noncve) -
puncia noncve <browser/china/russia/europe/exploitable> <output-file> -
(GRATUIT) Santé du service Subdomain Center (^HEALTH) -
puncia subdomain ^HEALTH <output-file> -
Requêtes multiples (bulk/sbom)
- (FREEMIUM) Format de fichier JSON d'entrée en masse -
puncia bulk <json-file> <output-directory>{ "subdomain": [ "domainA.com", "domainB.com" ], "replica": [ "domainA.com", "domainB.com" ], "keyword": [ "keywordA", "keywordB" ], "exploit": [ "eoidentifierA", "eoidentifierB" ], "enrich": [ "eoidentifierA", "eoidentifierB" ] } - (FREEMIUM) Format de fichier JSON d'entrée SBOM -
puncia sbom <json-file> <output-directory>
Les exécutions bulk et SBOM dédupliquent les requêtes, plafonnent le parallélisme à
--concurrency(10 par défaut), et — lorsqu'aucune clé API n'est présente — rythment les requêtes pour rester dans le budget du niveau gratuit automatiquement. - (FREEMIUM) Format de fichier JSON d'entrée en masse -
-
(FREEMIUM) Import externe
import asyncio
import puncia
async def main():
# Without an API key (ratelimited)
print(await puncia.query_api("exploit", "CVE-2021-3450"))
print(await puncia.query_api("subdomain", "arpsyndicate.io"))
# With an API key
await puncia.store_key("ARPS-xxxxxxxxxx")
api_key = await puncia.read_key()
print(await puncia.query_api("subdomain", "arpsyndicate.io", apikey=api_key))
print(await puncia.query_api("replica", "arpsyndicate.io", match="exact", apikey=api_key))
print(await puncia.query_api("enrich", "CVE-2021-3450", apikey=api_key))
print(await puncia.query_api("noncve", "exploitable", apikey=api_key))
# Static endpoints (unauthenticated, unlimited)
print(await puncia.query_api("subdomain", "^HEALTH"))
print(await puncia.query_api("exploit", "^STATS"))
# Live crawl, with the outcome surfaced via a callback
await puncia.query_api(
"subdomain", "bigco.com", apikey=api_key, crawl=True,
on_crawl=lambda h: print("crawl status:", h.get("X-Crawl-Status")),
)
# Write straight to disk
await puncia.query_api("subdomain", "arpsyndicate.io", "out.json", apikey=api_key)
asyncio.run(main())
Les échecs lèvent puncia.PunciaError ; un résultat vide ({} / []) est renvoyé
tel quel plutôt que d'être traité comme une erreur. Réutilisez une session sur de nombreuses
requêtes en passant session= et un limiter= partagé, exactement comme
le fait process_bulk().
from puncia import PunciaError, query_api
try:
data = await query_api("exploit", "CVE-2021-3450", apikey=api_key)
except PunciaError as exc:
print(f"lookup failed: {exc}")
Développement
git clone https://github.com/ARPSyndicate/puncia && cd puncia
pip install --upgrade pip # editable installs need pip >= 21.3
pip install -e ".[dev]"
pytest # 42 offline tests, no API calls or network access
La suite de tests est entièrement hors ligne — elle couvre la construction d'URL, le confinement des chemins de sortie, l'analyse de SBOM, la planification bulk et le timing du ratelimiter sans toucher au réseau, elle est donc sûre à exécuter dans n'importe quel environnement.
Enrichissement CVE
Enrichissement GHSA
Mentions notables
- Passive Subdomain Enumeration: Uncovering More Subdomains than Subfinder & Amass
- Around 1000 exploitable cybersecurity vulnerabilities that MITRE & NIST ‘might’ have missed but China or Russia didn’t.
- Utilizing GitHub Actions for gathering Subdomain & Exploit Intelligence
- Introducing Exploit Observer — More than Shodan Exploits, Less than Vulners
- PUNCIA — The Panthera(P.)uncia of Cybersecurity
- Subdomain Enumeration Tool Face-off - 2023 Edition