Repository navigation
Refresh reference data, add a threat-intel layer, triage-script builder and automation - #78
Merged
Merged
Conversation
…er and automation Reference data: - ATLAS 2026.09. The pin is now bucketed by object type (tactics, techniques, mitigations, case studies) and keeps no upstream free text. ATT&CK 19.2 groups and campaigns are pinned by id and name only. - OWASP LLM 2026 and Agentic 2026 lists in schema/owasp.json, with Appendix A's 2025 ids translated to 2026 ids. - CISA KEV status for every cited CVE (schema/cve-status.json), with a gate on KEV claims (cve_status.py). It corrected the Ray rule, which claimed CVE-2023-48022 is listed. - The id gate covers every surface. It remapped the retired AML.T0104 and AML.T0019, and fixed parser bugs that dropped MAPPINGS section 04 and atlas.aml-t tags and read ATT&CK ids as ATLAS. MAPPINGS gains an ASI column and generated index tables (sync_mappings.py). Threat intel: - 20 actor profiles (attributed groups and reporter-named clusters) and case studies AIRT-CS-0015 to -0022 from primary sources, including 131 indicators from Anthropic's September 2026 IOC release. Existing cases gain structured actor, victim and framework fields. - Closed schemas: case-study.schema.json, actor.schema.json and intel-vocab.json. - intel_graph.py derives the entity graph, per-actor hunt, detect and collect tables, coverage gaps, and analytics: IDF-weighted similarity, clustering, co-occurrence and a detection backlog. It exports intel.json, a STIX 2.1 bundle and Maltego CSVs, deterministically. - Two Sigma rules: AI CLIs started with their approval-bypass flag by a package manager (s1ngularity), and Claude Code settings or hooks writes. Site: - a cross-filtering Threat intel view with pivots, timeline, ATLAS matrix, victimology, heatmaps and similarity - a graph workbench (Cytoscape.js, vendored and hash-pinned, lazy-loaded) - a collection-plan triage-script generator (PowerShell or bash) that hashes rather than copies credentials, including ones swept up by a directory row, plus Velociraptor, KAPE and Python-collector commands - a wider, resizable drawer, and tabs that scroll instead of wrapping Automation: - framework-refresh.yml re-pins weekly and auto-merges only a diff confined to reference data (refresh_guard.py) - intel-watch.yml files intel-candidate issues from KEV, ATLAS, AVID, AIID (MIT risk domains), the OWASP ASI tracker, vendor feeds and GitHub advisories - forbidden_terms.py fails CI on terms held in a FORBIDDEN_TERMS secret, which are never committed or printed Docs: CLAUDE.md, CONTRIBUTING, the authoring skill, both READMEs, LICENSE-DATA (third-party facts policy) and the CHANGELOG. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V2zNmjhpmRmMobbbDgSmSY
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull request
What this PR does
Reference data
schema/owasp.jsonholds the OWASP LLM 2026 and Agentic 2026 (ASI01–ASI10) lists. Appendix A's 2025 LLM ids are stored translated to 2026 ids.schema/cve-status.jsonpins the CISA KEV status of every cited CVE.cve_status.pyfails any line that calls a CVE KEV-listed when the pin disagrees. It corrected the Ray rule, which said CVE-2023-48022 is on KEV; it is not.AML.T0104→T0115.002, andT0019→T0049(per ATLAS's own ShadowRay case study).atlas.aml-tNNNNtags were discarded, and ATT&CK ids were read as ATLAS ids.sync_mappings.py)Threat intel
artifacts/intel/actors/), covering attributed groups and reporter-named clusters.AIRT-CS-0015to0022:case-study.schema.json,actor.schema.json,intel-vocab.json.intel_graph.pyderives, per actor, the techniques used, which rule detects each one (a coverage gap where none does), and which catalogued artifacts to collect. It also computes analytics: IDF-weighted similarity, clusters, technique co-occurrence and a detection backlog.intel.json, a STIX 2.1 bundle and Maltego import CSVs.ai_cli_permission_bypass_invocation.yml: an AI CLI started with its approval-bypass flag by a package manager (the s1ngularity pattern)ai_agent_hook_config_modification.yml: writes to Claude Code settings/hooksai_agent_credential_file_access.ymlremapped from T0082 to T0083 and T0055.Site
vendor/VENDOR.jsonand loaded only when the tab opens.</script>.Automation
framework-refresh.ymlruns weekly. It re-pins, runs every gate, and auto-merges only whenrefresh_guard.pyfinds the diff confined to reference data.intel-watch.ymlruns weekly and filesintel-candidateissues from CISA KEV, ATLAS, AVID, AIID (MIT AI Risk Repository domains 2.2 and 4.2), the OWASP ASI tracker, vendor feeds and GitHub advisories. It never merges anything.forbidden_terms.pyfails CI on terms held in aFORBIDDEN_TERMSsecret. The terms are never committed or printed.Docs: CLAUDE.md, CONTRIBUTING, the authoring skill, both READMEs, LICENSE-DATA (third-party facts policy), CHANGELOG, VERIFICATION.
Type
Attack technique / reference
Checklist
tests/(for new rules). Not added; the two new rules are Sigma process/file events with no file fixture.MAPPINGS.mdupdated (for new rules)README.mdupdated (for new rules):artifacts/detections/README.mdtests/validate.shpasses locally (YARA rules). Not run: the YARA CLI isn't installed here. Every.yarcompiles under yara-python instead.Testing
validate.py,validate_techniques.py,cve_status.pysync_mappings.py --check,intel_graph.py --check,data_sources.py --checkexport_kape.py --check,export_velociraptor.py --check,normalize_notes.py --checkreadme_counts.py --check,build_site.py --checkgen_credential_targets.py --check,check_target_drift.pyvalidate_mappings.py, the CACAO playbook validatorstix2, and every indicator pattern validates.SHA256SUMSverifies. The PowerShell variant was reviewed but not executed (nopwshavailable); please test it on a Windows host.refresh_guard.pywas tested in a scratch worktree: a pin-only change is auto-merge, while an unrelated file or a forbidden term is held for review.intel_watch.pywas run offline against local mirrors. After tightening matching to tool names and aliases, it raises 5 real candidates (Langflow KEV additions) instead of 420 noisy ones.Additional context
FORBIDDEN_TERMSrepository secret. Until it exists, the check passes with a notice.AUTOMATION_TOKENsecret, branch protection onmain, and "Allow auto-merge". Without them the refresh PR opens and waits.basis.last_verifiedwas not stamped from search results.🤖 Generated with Claude Code
https://claude.ai/code/session_01V2zNmjhpmRmMobbbDgSmSY
Generated by Claude Code