Compliance

Pro Plan — This feature requires a Pro subscription. Start a 30-day free trial →

Mipiti's bottom-up threat modeling (feature → assets → attackers → control objectives → controls) ensures security coverage. But compliance frameworks like OWASP ASVS, NIST 800-53, or PCI DSS mandate controls that may go beyond what risk analysis alone produces. The Compliance module bridges this gap with top-down compliance catalogs.

How it works

  1. Select a framework for your threat model (e.g. OWASP ASVS 5.0)
  2. Generate controls — the LLM sees framework requirements and maps controls to them automatically
  3. Run gap analysis — a deterministic report shows which framework requirements are covered, partially covered, uncovered, or unmapped

No LLM is involved in the gap analysis itself — it is a pure cross-reference of your controls against the framework's requirement list.

Built-in frameworks

Mipiti ships with 11 built-in compliance frameworks, automatically seeded on startup:

Framework Requirements Levels Description
OWASP ASVS 5.0 345 L1/L2/L3 Application Security Verification Standard — 17 chapters at three cumulative verification levels
ISO/IEC 27001:2022 Annex A 93 Information security controls across 4 themes (organizational, people, physical, technological)
SOC 2 Trust Services Criteria 63 Security, Availability, Confidentiality, Processing Integrity, and Privacy criteria
NIST CSF 2.0 107 Cybersecurity Framework — 6 functions (Govern, Identify, Protect, Detect, Respond, Recover)
GDPR 122 EU data protection regulation — principles, data subject rights, controller/processor obligations
FedRAMP Rev 5 410 Low/Mod/High NIST 800-53 controls tailored for cloud service providers — 18 control families
PCI DSS 4.0.1 271 Payment card data security — 12 requirements + 3 appendices
EU Cyber Resilience Act 80 CRA (EU) 2024/2847 — product security (Annex I), manufacturer obligations, vulnerability reporting, technical documentation
ISO/SAE 21434:2021 44 Road vehicles — cybersecurity engineering across the lifecycle. Required for UNECE R155 type approval. Covers organizational management, project management, TARA, development, validation, production, operations, and end-of-support.
IEC 62443 98 Security for industrial automation and control systems (IACS). Covers Part 4-1 (Secure Product Development Lifecycle, 8 practices) and Part 3-3 (System Security Requirements, 7 Foundational Requirements: identification & authentication, use control, system integrity, data confidentiality, restricted data flow, timely response, resource availability).
IEC 62443-4-2 97 SL1/SL2/SL3/SL4 Technical security requirements for IACS components — Embedded Devices (EDR), Host Devices (HDR), Network Devices (NDR), Software Applications (SAR), plus generic Component Requirements (CR). 7 Foundational Requirements with per-component-type variants and Requirement Enhancements activating at higher Security Levels.

Frameworks with levels support cumulative filtering: L2 includes all L1 requirements, and L3 includes all L2 requirements. You can filter the compliance report by level.

Target levels

Most level-aware frameworks let you pin a model to a specific tier so control generation, gap analysis, and reports scope to that tier instead of the framework's full breadth. Where the target level lives depends on the framework:

Framework Field Range Lives on…
OWASP ASVS, FedRAMP, SOC 2, IEC 62443-3-3/-4-2, etc. target_level per-framework levels set The model's framework selection
IEC 62443-3-3 / -4-2 (Security Level) target_sl 1-4 Each Component
Common Criteria (EAL) eal 1-7 Each Component
FIPS 140-3 (cryptographic-module Security Level) fips_level 1-4 Each Component
ISO/SAE 21434 (Cybersecurity Assurance Level) cal 1-4 Each Control Objective
IEC 62443-4-1 (developer Maturity Level) target_ml 1-5 The Organization
NIST CSF 2.0 (organizational Tier) csf_tier 1-4 The Organization

These axes are orthogonal: the same Component can simultaneously target SL 3 (under 62443), EAL 4 (under Common Criteria), and FIPS Level 2 (for its cryptographic module) without conflict.

Where to set each target

Target UI surface
Per-framework target_level The "Next Step" widget on the model's Assurance tab — when you pick a framework, a "Target: Lx" dropdown appears (only when the framework has multiple levels) and is saved alongside the framework selection.
Component.target_sl / eal / fips_level The Component edit modal (Assurance → View Model → click pencil on a component → expand "Compliance level targets (optional)"). Inputs are optional; leave empty to mean "not set".
ControlObjective.cal The CO Card (Assurance → click a control → "Covered by" expanded view, each CO Card has a small "CAL N" badge or "Set CAL" link). Click to edit inline. Saving does NOT fork a new model version — cal lives on the identity side-table next to removed_at.
Organization.target_ml / csf_tier Settings → Organizations → select your org → expand "Compliance posture targets (optional)". Org-admin gated. Empty input clears a previously-set value via the explicit clear_* flag.

How these targets affect generation and reports

Cross-references inside requirement descriptions (e.g. an AC control referencing [AU-2a] in FedRAMP) are now rendered as proper inline links — clicking them scrolls to and briefly highlights the referenced requirement on the same compliance page.

Importing custom frameworks

If your organization follows a framework that is not built-in, you can import it as CSV or JSON.

CSV format

Minimum columns: id and description. Optional columns: chapter_id, chapter_name, section_id, section_name, title, level.

id,description,level
REQ-1,"All user input must be validated",1
REQ-2,"Sensitive data must be encrypted at rest",1
REQ-3,"HSM required for key management",2

JSON format

{
  "name": "My Framework",
  "version": "1.0",
  "level_definitions": {
    "1": {"name": "Baseline", "description": "Minimum controls every system implements.", "source": "authoritative"},
    "2": {"name": "Hardened", "description": "Adds controls for sensitive data systems.", "source": "authoritative"}
  },
  "requirements": [
    {"id": "REQ-1", "description": "All user input must be validated", "level": 1},
    {"id": "REQ-2", "description": "Sensitive data must be encrypted at rest", "level": 1},
    {
      "id": "REQ-3",
      "description": "Passwords meet length / complexity requirements",
      "level": 1,
      "level_specific_text": {
        "1": "Minimum 8 characters.",
        "2": "Minimum 14 characters; multi-factor required."
      }
    }
  ]
}

level_definitions (top-level, optional) — per-level semantic legend. Keys MUST be stringified integer levels ("1", "2", …) and the import endpoint rejects non-integer keys with HTTP 400. The reason: levels are an ordinal that drives the cumulative filter (level <= target_level) and the level: int field on every requirement — the key IS the ordinal. Display naming is decoupled: the human label ("Baseline", "Hardened", "SL3", "CAL Critical") lives in the name field, not in the key. Each entry takes name, description, and source: "authoritative" (paraphrased from the published standard) or source: "mipiti_convention" (you defined the tiers). Surfaced in the LLM prompt when this framework is selected, so reasoning about levels stays grounded in your definitions instead of training-data recall.

level_specific_text (per requirement, optional) — when a requirement has parameters or rigour that vary by level, encode them here. Same stringified-integer-key rule and same 400-on-malformed-key behavior. The LLM prompt and the framework-detail UI render these inline.

Requirements are displayed in the order they appear in the file — place chapters and sections in the order you want them shown. Import via the Import Framework button on the Compliance page. Custom frameworks can be deleted; built-in frameworks cannot.

After import, target levels work identically to built-ins: pin a model to a tier when selecting the framework, and control generation and gap analysis scope to level <= target automatically. (CSV import does not currently carry level_definitions or level_specific_text — use JSON when your framework is level-aware.)

Framework-aware control generation

When you select frameworks for a model before generating controls, the control generation prompt includes the framework's requirements. The LLM:

These LLM-generated mappings have a confidence level of llm. You can manually add, remove, or verify mappings in the compliance report.

Auto-mapping existing controls

If you select a framework after controls already exist, click the Auto-Map Controls button in the compliance report. This sends your existing controls and the framework's requirements to the LLM in a single call, which identifies which controls satisfy which requirements and creates mappings automatically. No controls are regenerated — only mappings are created.

Gap analysis

The compliance report evaluates every framework requirement against your controls:

Each requirement is assessed on two independent dimensions:

Mapping status (do the right controls exist?):

Status Meaning
Covered Mapped controls collectively address the full requirement
Partial Mapped controls address some aspects but not all
Uncovered Mapped controls don't adequately address the requirement
Unmapped No controls have been mapped to this requirement
Excluded Marked as not applicable to this model

Implementation status (are mapped controls done?):

Status Meaning
Complete All mapped controls are implemented
In progress Some mapped controls are implemented
Not started No mapped controls are implemented

The report shows a coverage progress bar, a breakdown by mapping status, and an implementation summary. Click any requirement to see its mapped controls and add new mappings.

Orphaned controls do not contribute to coverage. A control whose every mapped control objective was tombstoned (because its (asset, attacker) pair was removed in a later version) addresses no live threat on the current version. Letting it claim coverage credit would lie to the auditor — the implementation exists, but it defends a pair that's no longer part of the model. If you see a requirement drop from covered to unmapped after soft-deleting an asset, that's why: the control that satisfied it is now orphaned. Either remap it to a live CO or mark the requirement not-applicable with a rationale — the coverage number stays honest either way.

Mapping confidence

Each control-to-requirement mapping has a confidence level:

Gap remediation

When the compliance report shows unmapped, uncovered, or partial requirements, the Remediate Gaps button uses the LLM to propose fixes. The remediation pipeline:

  1. Analyzes gaps — identifies requirements without adequate control coverage
  2. Proposes entities — for each gap, the LLM suggests one of four actions:
    • Add asset + attacker — the most common case; both a new asset and a new threat actor are needed
    • Add asset only — existing attackers already cover the threat, but a new asset is needed
    • Add attacker only — existing assets cover the data/system, but a new attacker capability is needed
    • Not applicable — the requirement does not apply to this system (creates an exclusion)
  3. Review — a modal shows all suggestions with proposed entity details and rationale. You can approve or reject each suggestion individually
  4. Apply — approved suggestions are applied in a single version bump. The system adds the new entities, carries forward existing controls, generates new controls, and auto-maps them to the framework

The LLM deduplicates against existing entities — it will not propose an asset or attacker that already exists in your model.

Requirement exclusions

Requirements marked as "not applicable" are excluded from the gap analysis. They appear with a blue excluded badge in the report. You can restore an excluded requirement by expanding its row and clicking Restore.

Exclusions can also be created directly from the compliance report without running the full remediation pipeline.

Multiple rounds

After applying remediation, some requirements may still be unmapped if the new controls were not mapped to them. You can re-run gap remediation or use Auto-Map to create additional mappings.

MCP integration

Compliance-related tools available via the MCP endpoint:

Framework selection & reporting:

Target-level configuration (see Target levels for the full grade-encoding model):

Pinning a model to a per-framework target level (e.g. ASVS L1/L2/L3, FedRAMP Low/Mod/High, IEC 62443 SL 1–4) is currently a UI-only or HTTP-API operation: PATCH /api/models/{model_id}/compliance/frameworks/{framework_id} with {"target_level": int | null}. An MCP tool for this surface is not yet exposed.

Per-entity factor re-baselining:

System-level compliance

When multiple threat models are grouped in a system container, you can run compliance analysis across all member models from the system's Compliance tab.

How it works

  1. Select a framework on the system — the selection automatically propagates to all member models
  2. View the aggregated report — coverage is computed across all models with scope-aware logic
  3. Exclude requirements at the system level ("not applicable to this product") — separate from model-level exclusions ("not applicable to this feature")

Requirement scope

Each framework requirement is classified as one of two scopes:

Scope Rule Example
System Covered if ANY model in the system covers it "Security architecture is documented"
Component Covered only if ALL relevant models cover it "Passwords are at least 12 characters"

Scope is determined by an LLM analysis when a framework is first selected on a system. It is an inherent property of the requirement, not the system.

Relevance matrix

For component-scope requirements, not every model may be relevant. For example, a password-length requirement is irrelevant to a file storage model. The system computes a relevance matrix using an LLM that analyzes each model's assets against each requirement. Only relevant models must provide coverage for a component-scope requirement to be considered "covered".

The relevance matrix refreshes automatically when models change (entity additions, removals, or edits), and is also checked for freshness at report time.

Per-model coverage and actions

After running the aggregated report, a Per-Model Coverage section shows each model's individual coverage percentage with a progress bar and status breakdown. Models are sorted lowest-coverage-first so you can see where to focus.

Each model card has a Manage link that deep-links to the model's full compliance page (/compliance?model=X&framework=Y), where you can auto-map controls, remediate gaps, and manage individual mappings.

Model badges in the requirements table are also clickable — click any model pill to jump directly to that model's compliance page.

Framework propagation

MCP integration

Two system compliance tools are available via the MCP endpoint:

Relationship to Assurance

Compliance and Assurance are complementary:

A model can be fully mitigated (all COs addressed) but not fully compliant (missing framework-mandated controls that risk analysis did not produce). The compliance module closes this gap.