microsoft / microsoft/PromptKit

One-pass CAPEC ingestion → generate per-domain attack pattern taxonomies for PromptKit security audits

Open
#231 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
105
Forks
23
PR merge metrics
No merged PRs in 30d

Description

Problem / Motivation

PromptKit security audits currently scope what weakness to look for (via CWE taxonomies from #228), but do not scope how attackers exploit those weaknesses. CAPEC (Common Attack Pattern Enumeration and Classification) is the complementary MITRE database that classifies attack patterns — the adversary-side view of CWE weaknesses.

Adding CAPEC-derived taxonomies would let security audit prompts guide the LLM with domain-specific attack patterns, improving threat modeling and exploit path analysis.

CAPEC entries cross-reference CWE IDs, so the two taxonomy sets can be composed: "look for these weaknesses (CWE) using these attack patterns (CAPEC)."

Goal

Implement a pipeline (modeled on the CWE ingestion skill from #228/#229) that:

  1. Ingests the official CAPEC corpus (versioned XML) from MITRE: https://capec.mitre.org/data/downloads.html
  2. In a single run, generates per-domain CAPEC taxonomies (reusing the same 13-domain registry from #228).
  3. Cross-references CWE IDs in each CAPEC entry to enable CWE↔CAPEC composition at audit time.

Deliverables

  • /ingest-capec-taxonomies prompt file (.github/prompts/) and matching CLI skill (.github/skills/)
  • Reusable Python script at scripts/ingest-capec.py
  • Per-domain taxonomy files: taxonomies/capec-<domain>.md
  • Normalized data: data/capec/<version>/
  • Updated manifest.yaml

Design Notes

  • Same architecture as CWE ingestion: 6-phase pipeline (Acquisition → Normalization → Domain Mapping → Taxonomy Generation → Integration → Verification)
  • Same domain registry: Reuse the 13 domains from #228. Consider extracting the registry to a shared data/domain-registry.json so both skills reference the same list.
  • CAPEC XML schema differs from CWE — separate parsing logic required. Key fields: attack pattern ID, name, abstraction, prerequisites, related weaknesses (CWE IDs), execution flow, consequences.
  • Domain mapping: Use CAPEC Related_Weakness CWE cross-references as the primary signal (map CAPEC entries to domains via their associated CWEs). Fall back to CAPEC-specific Prerequisites and Skills_Required fields.
  • Separate skill from CWE ingestion — different input format, different semantics (attack patterns vs weakness classes), different parsing.

External References

Non-Goals

  • Do not merge with the CWE ingestion skill — keep as separate, composable skills.
  • Do not claim exploitability of specific code from attack patterns.
  • Do not fork or maintain a separate CAPEC; track upstream MITRE versions.

Relationship to Other Issues

  • Depends on #228 for the domain registry and taxonomy file conventions.
  • CAPEC taxonomies complement CWE taxonomies — together they scope both the "what" and "how" of security audits.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the CWE ingestion implementation from #228/#229, then review the CAPEC downloads and schema references. Map the work across .github/prompts/, .github/skills/, scripts/ingest-capec.py, data/capec/, taxonomies/, and manifest.yaml. Done means one run produces versioned, per-domain CAPEC taxonomies with CWE cross-references and verification.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
security, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.