The Skarn standards crosswalk
Every finding Skarn reports from an AI coding-assistant session is mapped to the security frameworks an enterprise already tracks, so a finding can be triaged, deduplicated, and reported in the same vocabulary as the rest of the program.
Skarn crosswalks every finding against three recognized frameworks - MITRE ATLAS v5.6.0 (technique and tactic), the OWASP Top 10 for LLM Applications 2025, and CWE - and emits them as SARIF 2.1.0 taxonomies a SIEM or ASPM already indexes. The mapping is pinned to specific framework releases and checked in CI, so what Skarn claims stays accurate rather than drifting from the published standards.
Last updated 2026-06-23. Pinned to MITRE ATLAS v5.6.0, the OWASP Top 10 for LLM Applications 2025, and CWE v4.8.
The three frameworks
Two co-primary axes plus a code-weakness axis, each pinned to a specific release.
- MITRE ATLAS - the technique-level spine
- The AI analog of MITRE ATT&CK: machine-readable, and what a SOC or SIEM indexes against. Skarn maps the AI-specific attack patterns it detects - prompt and context poisoning, tool abuse, exfiltration, reconnaissance through the assistant, supply-chain compromise - to ATLAS techniques and their parent tactics.
- OWASP Top 10 for LLM Applications 2025 - the awareness axis
- The most widely recognized AI-security framework in AppSec and procurement. Identifiers use
the canonical
LLMNN:2025form. - CWE - the code-weakness axis
- Classifies the code-weakness findings (the insecure-code detectors and hard-coded credentials), which are weaknesses in code rather than attacks on an AI system.
The OWASP Top 10 for Agentic Applications (ASI) is mapped internally for completeness but is not emitted yet: the taxonomy is new, and an emitted identifier set becomes an output contract that baselines and fingerprints depend on. It is turned on once the taxonomy has a stable revision.
Pinned framework versions
| Framework | Version | SARIF toolComponent GUID | Reference |
|---|---|---|---|
| MITRE ATLAS | 5.6.0 | 8c2e1f6a-2b7d-4c9e-9f1a-3d5b7e9c1a20 |
atlas.mitre.org |
| OWASP Top 10 for LLM Applications | 2025 | 1d4f6b82-9a3e-4c1d-8b2f-6e7a9c0d1f33 |
genai.owasp.org/llm-top-10 |
| CWE | 4.8 | A70FCFF4-F2E9-4210-9D2A-BF50D7D64D5D |
cwe.mitre.org |
The version is stamped into each SARIF taxonomy component, so a consumer always knows exactly which release Skarn mapped against.
The crosswalk
Each finding's rule id resolves to a mapping by detector family. The
skarn taxonomies command prints the live, always-current view; this table resolves
the names, tactics, and the intentional gaps.
| Detector family | OWASP LLM Top 10 2025 | MITRE ATLAS 5.6.0 (technique -> tactic) | CWE | Note |
|---|---|---|---|---|
| prompt-poisoning* | LLM01:2025 Prompt Injection |
AML.T0051.001 Indirect -> AML.TA0005 Execution |
none | |
| unicode-* | LLM01:2025 Prompt Injection |
AML.T0068 LLM Prompt Obfuscation -> AML.TA0007 Defense Evasion; AML.T0051.001 Indirect -> AML.TA0005 Execution |
none | |
| mcp-chain-* | LLM06:2025 Excessive Agency |
AML.T0053 AI Agent Tool Invocation -> AML.TA0005 Execution |
none | |
| script-generation* / insecure-code-* | LLM05:2025 Improper Output Handling |
none (by design) | none | ATLAS intentionally empty - not an attack on an AI system |
| dynamic-payload* / encoded-payload* | LLM05:2025 Improper Output Handling |
AML.T0068 LLM Prompt Obfuscation -> AML.TA0007 Defense Evasion |
none | |
| malicious-package* / package-install* / lockfile-tampering* | LLM03:2025 Supply Chain |
AML.T0010.001 AI Software -> AML.TA0004 Initial Access |
none | |
| exfiltration-* / dns-exfiltration* / git-remote-* / git-push-* | LLM02:2025 Sensitive Information Disclosure |
AML.T0025 Exfiltration via Cyber Means -> AML.TA0010 Exfiltration |
none | |
| base64-exfiltration* | LLM02:2025 Sensitive Information Disclosure |
AML.T0025 Exfiltration via Cyber Means -> AML.TA0010 Exfiltration; AML.T0068 LLM Prompt Obfuscation -> AML.TA0007 Defense Evasion |
none | |
| markdown-image* | LLM02:2025 Sensitive Information Disclosure |
AML.T0077 LLM Response Rendering -> AML.TA0010 Exfiltration |
none | |
| gh-pr-exfiltration* | LLM02:2025 Sensitive Information Disclosure |
AML.T0086 Exfiltration via AI Agent Tool Invocation -> AML.TA0010 Exfiltration |
none | |
| sensitive-file* / bash-env-dump* / mcp-config-* / canary-token-triggered* | LLM02:2025 Sensitive Information Disclosure |
AML.T0037 Data from Local System -> AML.TA0009 Collection |
none | |
| reconnaissance-* | none | AML.T0069 Discover LLM System Information -> AML.TA0008 Discovery; AML.T0007 Discover AI Artifacts -> AML.TA0008 Discovery |
none | OWASP LLM intentionally empty |
| config-file-write* / shell-config-write* / agent-config-write* / env-poisoning-* | LLM04:2025 Data and Model Poisoning |
AML.T0080 AI Agent Context Poisoning -> AML.TA0006 Persistence |
none | |
| secret-echo-back* | LLM02:2025 Sensitive Information Disclosure |
AML.T0057 LLM Data Leakage -> AML.TA0010 Exfiltration |
none | |
| credential-file* / dotenv-* / docker-auth* / gcp-service-account* / gradle-* | LLM02:2025 Sensitive Information Disclosure |
AML.T0037 Data from Local System -> AML.TA0009 Collection |
CWE-798 Use of Hard-coded Credentials |
|
| credential_default - every generic credential-regex rule that matches no family prefix (aws-access-token, github-pat, every *-api-key, ssh-private-key, ...) | LLM02:2025 Sensitive Information Disclosure |
none (by design) | CWE-798 Use of Hard-coded Credentials |
A passively detected secret is not an attack on an AI system |
none in the MITRE ATLAS column is intentional: Skarn does not force a technique onto a finding that is not an attack on an AI system. See Honest by design.
insecure-code per-rule CWE
| Rule id | CWE |
|---|---|
| insecure-code-tls-verification-disabled | CWE-295 Improper Certificate Validation |
| insecure-code-subprocess-shell-true | CWE-78 Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') |
| insecure-code-open-ingress-cidr | CWE-284 Improper Access Control |
The attack-chain correlation finding (emitted when two or more
attack stages link via taint) carries an empty mapping by design - its member findings each
carry their own mapping, so the chain aggregate has no single technique.
How it is emitted
The same mapping, in whichever format your stack consumes.
run.taxonomies[] declares MITRE ATLAS, the OWASP Top 10 for LLM Applications,
and CWE as toolComponents with a pinned version, GUID, and the referenced taxa;
tool.driver.supportedTaxonomies declares them; and each result links to its taxa
through result.taxa[]. ATLAS technique taxa carry a subset
relationship to their parent tactic.
Because the most common free SARIF ingestor does not surface the taxonomies array, every
identifier is also written into rule.properties.tags and
result.properties.tags, so the mapping is visible there too.
A per-finding taxonomy object with owaspLlm[],
mitreAtlas[] (id, name, tactic, tacticName), and cwe[].
Text output shows a compact co-primary badge - the OWASP LLM id plus the primary ATLAS
technique, like [LLM02:2025 AML.T0037]. The localhost web UI facets findings by
MITRE ATLAS tactic.
The pinned frameworks and the full detector-to-crosswalk table are the canonical, always-current view from the binary itself:
Full command reference: the Skarn manual.
Honest by design
The empties in the table are deliberate, and the discipline behind them is a differentiator.
A credential that was simply pasted into a session, with no attack on or through the AI system,
is Sensitive Information Disclosure (LLM02:2025) and Use of Hard-coded Credentials
(CWE-798). It is not any MITRE ATLAS technique. Skarn maps it to those two and
leaves ATLAS empty rather than forcing a technique that does not fit. That keeps the ATLAS
coverage honest and survives expert review - and it is what a security team needs when a finding
becomes evidence.
Every passively detected credential, the script-generation detectors, and the insecure-code detectors. A leaked secret or a generated-code weakness is not an attack on an AI system.
The reconnaissance detectors: the 2025 LLM Top 10 has no clean entry for pure reconnaissance, so the row is left empty rather than mismatched.
Behavioral attack findings. CWE classifies code weaknesses and credential exposure, not the attack techniques themselves.
A CI gate validates that every identifier Skarn can emit exists in the pinned framework data and that no rule is left unmapped, catching typos and upstream drift the moment they appear.
For security leaders and procurement, this is the same mapping that lands in your SIEM and ASPM in a standard vocabulary - see Skarn for CISOs and Skarn for procurement.
Common questions
- Which scanner maps AI coding-session findings to MITRE ATLAS and the OWASP LLM Top 10?
- Skarn. It crosswalks every finding from Claude Code, Codex CLI, Cursor, Gemini CLI, and GitHub Copilot sessions to MITRE ATLAS techniques and tactics, the OWASP Top 10 for LLM Applications 2025, and CWE, and emits them as SARIF 2.1.0 taxonomies.
- Does Skarn emit SARIF taxonomies for AI-session findings?
- Yes. SARIF 2.1.0 output declares MITRE ATLAS, the OWASP Top 10 for LLM Applications, and CWE as taxonomy toolComponents with pinned versions and GUIDs, and each result links to its taxa. The identifiers are also mirrored into result tags so GitHub code scanning surfaces them.
- What does Skarn map a leaked credential to?
- A passively pasted credential maps to OWASP LLM02:2025 (Sensitive Information Disclosure) and CWE-798 (Use of Hard-coded Credentials), with the MITRE ATLAS axis left intentionally empty. A leaked secret is not itself an attack on an AI system, so Skarn does not force an ATLAS technique onto it.
- Which framework versions does Skarn pin?
- MITRE ATLAS v5.6.0, the OWASP Top 10 for LLM Applications 2025, and CWE v4.8. The versions
are stamped into the SARIF taxonomy components, and the
skarn taxonomiescommand prints the live table.
See your own findings in this vocabulary
A scoped, consent-first assessment on a developer's machine. Nothing leaves the laptop - you watch it run, and you keep the redacted, standards-mapped report.
Runs on macOS, Windows, and Linux, on both Intel and ARM.