Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
1afc88d
add decision table object
ahouseholder Jun 16, 2025
9965d16
fix unit tests
ahouseholder Jun 23, 2025
76955c5
make sure the `make docker_test` target always builds fresh
ahouseholder Jun 23, 2025
153e55e
eliminate semver warning
ahouseholder Jun 23, 2025
d7df08c
fix pydantic data type warning
ahouseholder Jun 23, 2025
83f65c9
make csv export smaller (avoid redundancy in row elements)
ahouseholder Jun 25, 2025
2f8892b
refactoring & make tests pass
ahouseholder Jun 27, 2025
268063a
remove superfluous mapping module
ahouseholder Jun 30, 2025
3f7db54
Refine decision table object, refactor methods into functions, add do…
ahouseholder Jun 30, 2025
f84e668
increase unit test coverage
ahouseholder Jun 30, 2025
f6d8eeb
add type hints
ahouseholder Jun 30, 2025
7018d2a
add feature importance and topology checks
ahouseholder Jun 30, 2025
d635e72
fix tests
ahouseholder Jun 30, 2025
84da293
update tests
ahouseholder Jul 8, 2025
a088bf1
fix test
ahouseholder Jul 8, 2025
d90ddf0
Merge branch 'main' into feature/592-we-need-a-policy-object
ahouseholder Jul 8, 2025
cb6aa04
refactor DecisionPointGroup to use a dict rather than tuple as its ma…
ahouseholder Jul 9, 2025
cb5da14
refactor dp_groups to be a dict rather than tuple of decision points.…
ahouseholder Jul 9, 2025
abb462e
add obfuscator methods to decision tables and dp groups objects
ahouseholder Jul 9, 2025
b07b7dd
pep8
ahouseholder Jul 9, 2025
e2b55c9
Merge branch 'feature/592-we-need-a-policy-object' of https://github.…
ahouseholder Jul 9, 2025
81c813e
update DPG schema and fix tests
ahouseholder Jul 9, 2025
310ad46
remove obsolete experimental code
ahouseholder Jul 9, 2025
4c5d22e
pep8 cleanup
ahouseholder Jul 14, 2025
8dba9f4
Merge branch 'main' of https://github.com/CERTCC/SSVC into feature/59…
ahouseholder Jul 18, 2025
60743f4
refactor decision table so it doesn't explicitly need a decision poin…
ahouseholder Jul 18, 2025
f8243a8
fix a bug in csv_analyzer that was assuming target values were always…
ahouseholder Jul 18, 2025
25b883e
try out the decision table object with a few known tables
ahouseholder Jul 18, 2025
dddf252
reformat
ahouseholder Jul 18, 2025
cbae08f
use dashes for schema version
ahouseholder Jul 18, 2025
e7735d5
Merge branch '820-add-a-minimalist-selection-object' into feature/592…
ahouseholder Jul 24, 2025
e944ea4
fix tests
ahouseholder Jul 24, 2025
3cef72b
bump schema version, refine doctools schema dumper, revise key descri…
ahouseholder Jul 24, 2025
e0fd076
adjust key pattern to explicitly grandfather `T*` while limiting othe…
ahouseholder Jul 24, 2025
a358c2f
update tests
ahouseholder Jul 24, 2025
1c04cbe
update current schema link
ahouseholder Jul 24, 2025
78b53cd
decouple _Versioned and _SchemaVersioned
ahouseholder Jul 24, 2025
08b74f6
relocate `ssvc._schemaVersion` to `ssvc.utils.defaults.SCHEMA_VERSION`
ahouseholder Jul 24, 2025
0e66f2b
add default setter for schemaVersion while retaining it as required i…
ahouseholder Jul 25, 2025
0389a7b
refactor mixins to use standardized _GenericSsvcObject
ahouseholder Jul 25, 2025
a9e08cf
update JSON schema
ahouseholder Jul 25, 2025
35bd9f7
reorder mixins
ahouseholder Jul 25, 2025
4b7e5b4
add lookup methods
ahouseholder Jul 25, 2025
a7f13cb
docstrings and clean up
ahouseholder Jul 25, 2025
157ff26
black cleanup
ahouseholder Jul 25, 2025
6533fdf
add decision point schema generation to doctools.py
ahouseholder Jul 25, 2025
c2c6729
update json examples
ahouseholder Jul 25, 2025
7088377
mark schema validation tests as expected failures for now
ahouseholder Jul 25, 2025
20e170e
refactor importer into separate module
ahouseholder Jul 28, 2025
548d0fc
refactor doctools for more schema dumps
ahouseholder Jul 28, 2025
f9f53af
update decision point schema
ahouseholder Jul 28, 2025
b390782
remove old registry
ahouseholder Jul 28, 2025
181177f
update schema tests and doctools to dump dp group schema
ahouseholder Jul 28, 2025
6420f5a
decrement schema version
ahouseholder Jul 28, 2025
569ba3f
move "title" to top of each schema object
ahouseholder Jul 28, 2025
cf036a1
add min_length to name, description
ahouseholder Jul 28, 2025
7f87299
Revert "add min_length to name, description"
ahouseholder Jul 28, 2025
1ed6c9a
rename 'description' to 'summary' in reference object
ahouseholder Jul 28, 2025
fe810f6
escape forward slashes in regex
ahouseholder Jul 28, 2025
2165f64
Merge branch '820-add-a-minimalist-selection-object' into feature/592…
ahouseholder Jul 28, 2025
1e080d9
update schemas after merge
ahouseholder Jul 28, 2025
6378938
Merge branch 'main' of https://github.com/CERTCC/SSVC into feature/59…
ahouseholder Jul 28, 2025
5cd6588
remove ABNF from documentation. Until we have a way to generate this,…
ahouseholder Jul 28, 2025
b96d5b3
update docstring
ahouseholder Jul 28, 2025
4c65f35
fix documentation generators
ahouseholder Jul 28, 2025
f9f428b
Merge branch 'main' into feature/592-we-need-a-policy-object
ahouseholder Jul 28, 2025
4ab754a
bump linkchecker python version
ahouseholder Jul 28, 2025
94c53a5
Merge branch 'feature/592-we-need-a-policy-object' of https://github.…
ahouseholder Jul 28, 2025
4c65caf
add test for Reference object
ahouseholder Jul 29, 2025
f2c48dd
add AIVSS namespace and base class for decision points
ahouseholder Jul 30, 2025
52c0b84
add AIVSS Model Robustness (MR) decision points and a basic table to …
ahouseholder Jul 30, 2025
b98b082
move "IN_KEV" decision point to cisa namespace. (+1 squashed commit)
ahouseholder Jul 31, 2025
188b982
create ethical implications set
ahouseholder Jul 30, 2025
aaef40b
add data sensitivity set
ahouseholder Jul 31, 2025
c39405c
add decision criticality set
ahouseholder Jul 30, 2025
5827470
registry should reject duplicate object IDs when they point to differ…
ahouseholder Jul 31, 2025
515da1c
rekey Decision Criticality and Data Confidentiality
ahouseholder Jul 31, 2025
a93c3b8
add Adaptability set
ahouseholder Jul 31, 2025
498baa5
add adversarial attack surface set
ahouseholder Jul 31, 2025
49dbd08
make decision table defs more consistent
ahouseholder Jul 31, 2025
09afc8c
add lifecycle vuls set
ahouseholder Jul 31, 2025
1eb3b3c
add governance set
ahouseholder Jul 31, 2025
ff9484c
remove extraneous prints
ahouseholder Jul 31, 2025
7f9f5b7
Merge branch 'feature/592-we-need-a-policy-object' into aivss_decisio…
ahouseholder Jul 31, 2025
5830b23
refactor graph constructor into its own method (+1 squashed commit)
ahouseholder Jul 31, 2025
3d24df2
fix test
ahouseholder Jul 31, 2025
092efbd
add a low medium high generic outcome (+1 squashed commit)
ahouseholder Jul 31, 2025
d0e879e
add a low medium high generic outcome (+1 squashed commit)
ahouseholder Jul 31, 2025
c46e7b8
Merge branch 'feature/592-we-need-a-policy-object' of https://github.…
ahouseholder Jul 31, 2025
47359da
add logging to doctools
ahouseholder Jul 31, 2025
ba97ed3
add unit tests
ahouseholder Aug 1, 2025
38e3d8a
dump the right schema. also add keys to decision tables
ahouseholder Aug 1, 2025
6e77e73
add keys to decision tables
ahouseholder Aug 1, 2025
bcdcefa
remove extraneous stuff from accidental merge
ahouseholder Aug 1, 2025
88104c7
use basic objects in constructing registry
ahouseholder Aug 1, 2025
517f644
add decision tables to doc tools dumpers
ahouseholder Aug 1, 2025
51a40e3
dump registry from doctools.py
ahouseholder Aug 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/link_checker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
python-version: '3.12'

- name: Install dependencies
run: |
Expand Down
2 changes: 2 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ test:
pytest -v src/test

docker_test:
@echo "Building the latest test image..."
pushd $(DOCKER_DIR) && docker-compose build test
@echo "Running tests in Docker..."
pushd $(DOCKER_DIR) && docker-compose run --rm test

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"namespace": "basic",
"key": "IKE",
"version": "1.0.0",
"name": "Do, Schedule, Delegate, Delete",
"description": "The Eisenhower outcome group.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "D",
"name": "Delete",
"description": "Delete"
},
{
"key": "G",
"name": "Delegate",
"description": "Delegate"
},
{
"key": "S",
"name": "Schedule",
"description": "Schedule"
},
{
"key": "O",
"name": "Do",
"description": "Do"
}
]
}
25 changes: 25 additions & 0 deletions data/json/decision_points/basic/lowmediumhigh_1_0_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"namespace": "basic",
"key": "LMH",
"version": "1.0.0",
"name": "LowMediumHigh",
"description": "A Low/Medium/High decision point / outcome group.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
"name": "Low",
"description": "Low"
},
{
"key": "M",
"name": "Medium",
"description": "Medium"
},
{
"key": "H",
"name": "High",
"description": "High"
}
]
}
30 changes: 30 additions & 0 deletions data/json/decision_points/basic/moscow_1_0_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"namespace": "basic",
"key": "MSCW",
"version": "1.0.0",
"name": "MoSCoW",
"description": "The MoSCoW (Must, Should, Could, Won't) outcome group.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "W",
"name": "Won't",
"description": "Won't"
},
{
"key": "C",
"name": "Could",
"description": "Could"
},
{
"key": "S",
"name": "Should",
"description": "Should"
},
{
"key": "M",
"name": "Must",
"description": "Must"
}
]
}
30 changes: 30 additions & 0 deletions data/json/decision_points/basic/value_complexity_1_0_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"namespace": "basic",
"key": "VALUE_COMPLEXITY",
"version": "1.0.0",
"name": "Value, Complexity",
"description": "The Value/Complexity outcome group.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "D",
"name": "Drop",
"description": "Drop"
},
{
"key": "R",
"name": "Reconsider Later",
"description": "Reconsider Later"
},
{
"key": "E",
"name": "Easy Win",
"description": "Easy Win"
},
{
"key": "F",
"name": "Do First",
"description": "Do First"
}
]
}
20 changes: 20 additions & 0 deletions data/json/decision_points/basic/yesno_1_0_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"namespace": "basic",
"key": "YN",
"version": "1.0.0",
"name": "YesNo",
"description": "A Yes/No decision point / outcome group.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "N",
"name": "No",
"description": "No"
},
{
"key": "Y",
"name": "Yes",
"description": "Yes"
}
]
}
8 changes: 4 additions & 4 deletions data/json/decision_points/cisa/cisa_levels_1_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "CISA Levels",
"description": "The CISA outcome group. CISA uses its own SSVC decision tree model to prioritize relevant vulnerabilities into four possible decisions: Track, Track*, Attend, and Act.",
"namespace": "cisa",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "CISA",
"version": "1.0.0",
"name": "CISA Levels",
"description": "The CISA outcome group. CISA uses its own SSVC decision tree model to prioritize relevant vulnerabilities into four possible decisions: Track, Track*, Attend, and Act.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "T",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"namespace": "cisa",
"key": "KEV",
"version": "1.0.0",
"name": "In KEV",
"description": "Denotes whether a vulnerability is in the CISA Known Exploited Vulnerabilities (KEV) list.",
"namespace": "ssvc",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "KEV",
"schemaVersion": "2.0.0",
"values": [
{
"key": "N",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Mission Prevalence",
"description": "Prevalence of the mission essential functions",
"namespace": "cisa",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "MP",
"version": "1.0.0",
"name": "Mission Prevalence",
"description": "Prevalence of the mission essential functions",
"schemaVersion": "2.0.0",
"values": [
{
"key": "M",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/access_complexity_1_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Access Complexity",
"description": "This metric measures the complexity of the attack required to exploit the vulnerability once an attacker has gained access to the target system.",
"namespace": "cvss",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "AC",
"version": "1.0.0",
"name": "Access Complexity",
"description": "This metric measures the complexity of the attack required to exploit the vulnerability once an attacker has gained access to the target system.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/access_complexity_2_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Access Complexity",
"description": "This metric measures the complexity of the attack required to exploit the vulnerability once an attacker has gained access to the target system.",
"namespace": "cvss",
"version": "2.0.0",
"schemaVersion": "1-0-1",
"key": "AC",
"version": "2.0.0",
"name": "Access Complexity",
"description": "This metric measures the complexity of the attack required to exploit the vulnerability once an attacker has gained access to the target system.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/access_vector_1_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Access Vector",
"description": "This metric measures whether or not the vulnerability is exploitable locally or remotely.",
"namespace": "cvss",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "AV",
"version": "1.0.0",
"name": "Access Vector",
"description": "This metric measures whether or not the vulnerability is exploitable locally or remotely.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/access_vector_2_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Access Vector",
"description": "This metric reflects the context by which vulnerability exploitation is possible.",
"namespace": "cvss",
"version": "2.0.0",
"schemaVersion": "1-0-1",
"key": "AV",
"version": "2.0.0",
"name": "Access Vector",
"description": "This metric reflects the context by which vulnerability exploitation is possible.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/attack_complexity_3_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Attack Complexity",
"description": "This metric describes the conditions beyond the attacker's control that must exist in order to exploit the vulnerability.",
"namespace": "cvss",
"version": "3.0.0",
"schemaVersion": "1-0-1",
"key": "AC",
"version": "3.0.0",
"name": "Attack Complexity",
"description": "This metric describes the conditions beyond the attacker's control that must exist in order to exploit the vulnerability.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/attack_complexity_3_0_1.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Attack Complexity",
"description": "This metric captures measurable actions that must be taken by the attacker to actively evade or circumvent existing built-in security-enhancing conditions in order to obtain a working exploit. ",
"namespace": "cvss",
"version": "3.0.1",
"schemaVersion": "1-0-1",
"key": "AC",
"version": "3.0.1",
"name": "Attack Complexity",
"description": "This metric captures measurable actions that must be taken by the attacker to actively evade or circumvent existing built-in security-enhancing conditions in order to obtain a working exploit. ",
"schemaVersion": "2.0.0",
"values": [
{
"key": "L",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Attack Requirements",
"description": "This metric captures the prerequisite deployment and execution conditions or variables of the vulnerable system that enable the attack.",
"namespace": "cvss",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "AT",
"version": "1.0.0",
"name": "Attack Requirements",
"description": "This metric captures the prerequisite deployment and execution conditions or variables of the vulnerable system that enable the attack.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "N",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/attack_vector_3_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Attack Vector",
"description": "This metric reflects the context by which vulnerability exploitation is possible. ",
"namespace": "cvss",
"version": "3.0.0",
"schemaVersion": "1-0-1",
"key": "AV",
"version": "3.0.0",
"name": "Attack Vector",
"description": "This metric reflects the context by which vulnerability exploitation is possible. ",
"schemaVersion": "2.0.0",
"values": [
{
"key": "P",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/attack_vector_3_0_1.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Attack Vector",
"description": "This metric reflects the context by which vulnerability exploitation is possible. This metric value (and consequently the resulting severity) will be larger the more remote (logically, and physically) an attacker can be in order to exploit the vulnerable system. The assumption is that the number of potential attackers for a vulnerability that could be exploited from across a network is larger than the number of potential attackers that could exploit a vulnerability requiring physical access to a device, and therefore warrants a greater severity.",
"namespace": "cvss",
"version": "3.0.1",
"schemaVersion": "1-0-1",
"key": "AV",
"version": "3.0.1",
"name": "Attack Vector",
"description": "This metric reflects the context by which vulnerability exploitation is possible. This metric value (and consequently the resulting severity) will be larger the more remote (logically, and physically) an attacker can be in order to exploit the vulnerable system. The assumption is that the number of potential attackers for a vulnerability that could be exploited from across a network is larger than the number of potential attackers that could exploit a vulnerability requiring physical access to a device, and therefore warrants a greater severity.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "P",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/authentication_1_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Authentication",
"description": "This metric measures whether or not an attacker needs to be authenticated to the target system in order to exploit the vulnerability.",
"namespace": "cvss",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "Au",
"version": "1.0.0",
"name": "Authentication",
"description": "This metric measures whether or not an attacker needs to be authenticated to the target system in order to exploit the vulnerability.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "N",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/authentication_2_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Authentication",
"description": "This metric measures the number of times an attacker must authenticate to a target in order to exploit a vulnerability. This metric does not gauge the strength or complexity of the authentication process, only that an attacker is required to provide credentials before an exploit may occur. The possible values for this metric are listed in Table 3. The fewer authentication instances that are required, the higher the vulnerability score.",
"namespace": "cvss",
"version": "2.0.0",
"schemaVersion": "1-0-1",
"key": "Au",
"version": "2.0.0",
"name": "Authentication",
"description": "This metric measures the number of times an attacker must authenticate to a target in order to exploit a vulnerability. This metric does not gauge the strength or complexity of the authentication process, only that an attacker is required to provide credentials before an exploit may occur. The possible values for this metric are listed in Table 3. The fewer authentication instances that are required, the higher the vulnerability score.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "M",
Expand Down
8 changes: 4 additions & 4 deletions data/json/decision_points/cvss/automatable_1_0_0.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Automatable",
"description": "The \"Automatable\" metric captures the answer to the question \"Can an attacker automate exploitation events for this vulnerability across multiple targets?\" based on steps 1-4 of the kill chain.",
"namespace": "cvss",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "AU",
"version": "1.0.0",
"name": "Automatable",
"description": "The \"Automatable\" metric captures the answer to the question \"Can an attacker automate exploitation events for this vulnerability across multiple targets?\" based on steps 1-4 of the kill chain.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "N",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "Availability Impact",
"description": "This metric measures the impact on availability a successful exploit of the vulnerability will have on the target system.",
"namespace": "cvss",
"version": "1.0.0",
"schemaVersion": "1-0-1",
"key": "A",
"version": "1.0.0",
"name": "Availability Impact",
"description": "This metric measures the impact on availability a successful exploit of the vulnerability will have on the target system.",
"schemaVersion": "2.0.0",
"values": [
{
"key": "N",
Expand Down
Loading