2026-09-06 09:06:09 +02:00
# Closed family taxonomy (learning-harness, Req 1). A family is the ONLY key that routes work and
# scores a pair; CWE ids and mechanism ids are attributes looked up through a family and are never
# keys themselves. `verifier` says what can confirm a claim in this family: a canary oracle in the
# sandbox, static corroboration from another checker, or nothing (the claim stays a suspicion).
# `unknown` carries the generic mechanisms and the deliberately out-of-scope weaknesses, so a row we
# have considered and declined is visible instead of silently unresolved. Bump `version` on any change.
version = "1"
[[ family ]]
id = "injection"
description = "Untrusted input reaches an interpreter: SQL, OS command, code, expression or server-side template."
cwes = [ "CWE-77" , "CWE-78" , "CWE-88" , "CWE-89" , "CWE-90" , "CWE-91" , "CWE-94" , "CWE-95" , "CWE-564" , "CWE-917" , "CWE-943" , "CWE-1336" ]
mechanisms = []
verifier = "canary"
[[ family ]]
id = "path"
description = "Untrusted input reaches a filesystem path: traversal, unsafe join, file inclusion."
cwes = [ "CWE-22" , "CWE-23" , "CWE-36" , "CWE-73" , "CWE-98" , "CWE-99" ]
mechanisms = [ "path_join_user_input" ]
verifier = "canary"
[[ family ]]
id = "deserialization"
description = "Untrusted data is deserialized into objects the process then trusts."
cwes = [ "CWE-502" ]
mechanisms = []
verifier = "canary"
[[ family ]]
id = "access_control"
description = "An operation on a protected resource is reached without the guard or ownership constraint its siblings carry."
cwes = [ "CWE-284" , "CWE-285" , "CWE-306" , "CWE-425" , "CWE-566" , "CWE-639" , "CWE-862" , "CWE-863" , "CWE-1220" ]
mechanisms = [
"identity_from_request_body" ,
"missing_auth_guard" ,
"unconstrained_protected_read" ,
"unconstrained_protected_write" ,
"unguarded_privileged_action" ,
]
verifier = "static"
[[ family ]]
id = "output_encoding"
description = "Untrusted data reaches a rendered document or a header without encoding: cross-site scripting, response splitting."
cwes = [ "CWE-79" , "CWE-80" , "CWE-83" , "CWE-113" , "CWE-116" ]
mechanisms = []
verifier = "none"
[[ family ]]
id = "untrusted_destination"
description = "Untrusted input controls where a request or a redirect goes: server-side request forgery and open redirect."
cwes = [ "CWE-441" , "CWE-601" , "CWE-611" , "CWE-918" ]
mechanisms = []
verifier = "none"
[[ family ]]
id = "prototype"
description = "Untrusted keys reach an object merge or attribute assignment and change behaviour other code relies on."
cwes = [ "CWE-471" , "CWE-915" , "CWE-1321" ]
mechanisms = [ "prototype_pollution" ]
verifier = "none"
[[ family ]]
id = "config_secrets"
description = "A security setting ships permissive or a credential ships in the artifact: CORS, debug, cookie flags, weak crypto, hardcoded secrets."
cwes = [
"CWE-16" ,
"CWE-215" ,
"CWE-259" ,
"CWE-311" ,
"CWE-312" ,
"CWE-315" ,
"CWE-326" ,
"CWE-327" ,
"CWE-346" ,
"CWE-489" ,
"CWE-522" ,
"CWE-614" ,
"CWE-798" ,
"CWE-942" ,
"CWE-1004" ,
]
mechanisms = [ "config_sink_weak_literal" , "permissive_default" , "secret_in_client" ]
verifier = "none"
[[ family ]]
id = "memory"
2026-09-09 15:08:01 +02:00
description = "Misuse of unbounded string and format APIs in C and C++: a tainted value reaching gets, strcpy, strcat, sprintf or a non-literal format string."
limits = """Models CALLS, not arithmetic. It cannot decide an overflow expressed as an index, a pointer offset, or a memcpy whose size is computed -- which is how most real C overflows are written, and how every one of libpng's is. A scan of C code that reports nothing from this family has established that no tainted value reached a modelled string API, and nothing at all about its buffer arithmetic."""
2026-09-06 09:06:09 +02:00
cwes = [
"CWE-119" ,
"CWE-120" ,
"CWE-121" ,
"CWE-122" ,
"CWE-125" ,
"CWE-126" ,
"CWE-131" ,
"CWE-134" ,
"CWE-190" ,
"CWE-191" ,
"CWE-401" ,
"CWE-415" ,
"CWE-416" ,
"CWE-476" ,
"CWE-680" ,
"CWE-770" ,
"CWE-787" ,
"CWE-843" ,
]
mechanisms = [
"fixed_buffer_capacity" ,
"null_deref_unguarded" ,
"signed_size_operand" ,
"type_confusion" ,
"uaf" ,
"unchecked_alloc_size" ,
"unchecked_length_copy" ,
]
verifier = "none"
[[ family ]]
id = "unknown"
description = "No family admitted: a mechanism that spans families, or a weakness this project deliberately does not target."
cwes = [ "CWE-20" , "CWE-835" ]
mechanisms = [ "container_taint" , "cross_artifact" , "other" , "redos" , "source_reaches_sink" , "validation_strength" ]
verifier = "none"