Tooling for maintaining this dataset.
Checks every mitreAttack block in every dataset JSON against the official MITRE ATT&CK STIX bundle for a pinned version. Reports — does not modify — entries whose techniqueId, techniqueName, tacticId, tacticName, or (technique, tactic) pairing diverges from MITRE.
node scripts/validate-mitre.mjs # validate every dataset file
node scripts/validate-mitre.mjs --file FN # validate a single file (basename or path)
node scripts/validate-mitre.mjs --refresh # force re-download of the STIX bundleExit code is 0 when clean, 1 when there are findings. The full report is written to scripts/mitre-v<N>-report.json; a per-file and per-issue summary goes to stdout. Requires Node 18+ (uses built-in fetch); no npm install step.
technique-revoked/technique-deprecated— the technique no longer exists. Includes therevoked-bytarget if MITRE provides one (e.g.T1562.001 → T1685).technique-unknown— thetechniqueIddoesn't appear in the bundle (often a stray Mobile/ICS ID in an Enterprise dataset).technique-name-mismatch—techniqueNamedoesn't match. The script accepts both the bare STIX form (DCSync) and the dataset'sParent: Subform (OS Credential Dumping: DCSync).tactic-unknown—tacticIdisn't in the v19 tactic list.tactic-name-mismatch—tacticIdis fine but thetacticNamedoesn't match (e.g.TA0005was renamed from "Defense Evasion" to "Stealth" in v19).technique-tactic-mismatch— the(techniqueId, tacticId)pair is not associated in the current bundle. Thesuggestion.validTacticsfield lists the tactics MITRE currently associates with that technique.
- Update
ATTACK_VERSIONat the top ofvalidate-mitre.mjs(e.g."19.0"→"20.0"). - Run
node scripts/validate-mitre.mjs --refreshto fetch the new bundle. - Work through findings. Mechanical updates (renames, no-op tactic-name changes) can be applied directly. Tactic reassignments and revoked-technique replacements require reading the EID's
details/notesGuidanceto pick the most appropriate replacement. - For each modified entry, set
lastReviewedto the review date and bump the file'sversion(MINOR) andgeneratedAt. See the General Rules in the repo root. - Re-run until the script reports zero findings.
validate-mitre.mjs— the validator (committed)..cache/— local STIX bundle cache (gitignored).mitre-v<N>-report.json— last run's findings (gitignored).