Retour aux mises à jour
New releaseSep 1, 2026

puncia v0.36

Panthera(P.)uncia - Utilitaire CLI officiel pour Subdomain Center & Exploit Observer.

Partager

Panthera(P.)uncia

Utilitaire CLI officiel pour Subdomain Center & Exploit Observer

Downloads GitHub stars

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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é.
  8. 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.
  9. 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.
  10. 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.
  11. Reconnaissance passive pour les Red Teams
    Menez une reconnaissance furtive en utilisant des sources de données passives (aucune interaction directe avec les cibles).
  12. Collecte d'Open Source Intelligence (OSINT)
    Combinez le renseignement sur les sous-domaines et les exploits pour enrichir les enquêtes OSINT.
  13. 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

  1. Depuis PyPi - pip3 install puncia
  2. 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.

  1. (PAYANT) Stocker une clé API (storekey) - puncia storekey <api-key>

    • Stockée dans ~/.puncia avec des permissions 0600. $PUNCIA_API_KEY la remplace, ce qui est généralement ce que vous voulez en CI.
  2. (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/keyword parcourent 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 :
      puncia 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
      
      Les requêtes anonymes ignorent --limit/--offset cô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) : --crawl complè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) (également partial / cooldown / disabled).
      puncia subdomain bigco.com --crawl
      
  3. (FREEMIUM) Interroger des domaines répliques, regroupés par marque (moteur replica / octopus) - puncia replica <domain> --match <prefix|exact|substring> <output-file>

  4. (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
  5. 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>
  6. (FREEMIUM) Enrichir les identifiants CVE/GHSA (enrich) - puncia enrich <cve-id/ghsa-id> <output-file>

    • enrich=true ne prend effet que pour les identifiants CVE-/GHSA- ; il fusionne l'enregistrement d'avis amont complet avec le scoring EPSS + VEDAS.
  7. (PAYANT) Identifiants non-CVE par groupe VEDAS (noncve) - puncia noncve <browser/china/russia/europe/exploitable> <output-file>

  8. (GRATUIT) Santé du service Subdomain Center (^HEALTH) - puncia subdomain ^HEALTH <output-file>

  9. 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.

  10. (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

Catégories