up
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"schema": "ground-truth-v1",
|
||||
"sampleId": "sample:csharp:dead-code:001",
|
||||
"generatedAt": "2025-12-13T12:00:00Z",
|
||||
"generator": {
|
||||
"name": "manual-annotation",
|
||||
"version": "1.0.0",
|
||||
"annotator": "scanner-guild"
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"symbolId": "sym:csharp:JsonConvert.DeserializeObject",
|
||||
"display": "Newtonsoft.Json.JsonConvert.DeserializeObject<T>(string, JsonSerializerSettings)",
|
||||
"purl": "pkg:nuget/Newtonsoft.Json@13.0.1",
|
||||
"expected": {
|
||||
"latticeState": "CU",
|
||||
"bucket": "unreachable",
|
||||
"reachable": false,
|
||||
"confidence": 0.95,
|
||||
"pathLength": null,
|
||||
"path": null
|
||||
},
|
||||
"reasoning": "DeserializeObject referenced in deprecated LegacyParser class but LegacyParser is never instantiated - new SafeParser uses System.Text.Json instead"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:csharp:LegacyParser.ParseJson",
|
||||
"display": "SampleApp.LegacyParser.ParseJson(string)",
|
||||
"purl": "pkg:generic/SampleApp@1.0.0",
|
||||
"expected": {
|
||||
"latticeState": "SU",
|
||||
"bucket": "unreachable",
|
||||
"reachable": false,
|
||||
"confidence": 0.90,
|
||||
"pathLength": null,
|
||||
"path": null
|
||||
},
|
||||
"reasoning": "LegacyParser.ParseJson exists but LegacyParser is never instantiated - replaced by SafeParser"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:csharp:SafeParser.ParseJson",
|
||||
"display": "SampleApp.SafeParser.ParseJson(string)",
|
||||
"purl": "pkg:generic/SampleApp@1.0.0",
|
||||
"expected": {
|
||||
"latticeState": "SR",
|
||||
"bucket": "direct",
|
||||
"reachable": true,
|
||||
"confidence": 0.95,
|
||||
"pathLength": 2,
|
||||
"path": [
|
||||
"sym:csharp:Program.Main",
|
||||
"sym:csharp:SafeParser.ParseJson"
|
||||
]
|
||||
},
|
||||
"reasoning": "SafeParser.ParseJson is the active implementation called from Main"
|
||||
}
|
||||
],
|
||||
"entryPoints": [
|
||||
{
|
||||
"symbolId": "sym:csharp:Program.Main",
|
||||
"display": "SampleApp.Program.Main(string[])",
|
||||
"phase": "runtime",
|
||||
"source": "manifest"
|
||||
}
|
||||
],
|
||||
"expectedUncertainty": {
|
||||
"states": [],
|
||||
"aggregateTier": "T4",
|
||||
"riskScore": 0.0
|
||||
},
|
||||
"expectedGateDecisions": [
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"targetSymbol": "sym:csharp:JsonConvert.DeserializeObject",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "allow",
|
||||
"expectedReason": "CU state allows not_affected - confirmed unreachable"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"targetSymbol": "sym:csharp:JsonConvert.DeserializeObject",
|
||||
"requestedStatus": "affected",
|
||||
"expectedDecision": "warn",
|
||||
"expectedReason": "Marking as affected when CU suggests false positive"
|
||||
}
|
||||
]
|
||||
}
|
||||
27
datasets/reachability/samples/csharp/dead-code/manifest.json
Normal file
27
datasets/reachability/samples/csharp/dead-code/manifest.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"sampleId": "sample:csharp:dead-code:001",
|
||||
"version": "1.0.0",
|
||||
"createdAt": "2025-12-13T12:00:00Z",
|
||||
"language": "csharp",
|
||||
"category": "negative",
|
||||
"description": "C# app where vulnerable code exists but is never called - deprecated API replaced by safe implementation",
|
||||
"source": {
|
||||
"repository": "synthetic",
|
||||
"commit": "synthetic-sample",
|
||||
"buildToolchain": "dotnet:10.0"
|
||||
},
|
||||
"vulnerabilities": [
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"purl": "pkg:nuget/Newtonsoft.Json@13.0.1",
|
||||
"affectedSymbol": "Newtonsoft.Json.JsonConvert.DeserializeObject"
|
||||
}
|
||||
],
|
||||
"artifacts": [
|
||||
{
|
||||
"path": "artifacts/app.dll",
|
||||
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000002",
|
||||
"type": "application/x-msdownload"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"schema": "ground-truth-v1",
|
||||
"sampleId": "sample:csharp:simple-reachable:001",
|
||||
"generatedAt": "2025-12-13T12:00:00Z",
|
||||
"generator": {
|
||||
"name": "manual-annotation",
|
||||
"version": "1.0.0",
|
||||
"annotator": "scanner-guild"
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"symbolId": "sym:csharp:JsonConvert.DeserializeObject",
|
||||
"display": "Newtonsoft.Json.JsonConvert.DeserializeObject<T>(string, JsonSerializerSettings)",
|
||||
"purl": "pkg:nuget/Newtonsoft.Json@13.0.1",
|
||||
"expected": {
|
||||
"latticeState": "SR",
|
||||
"bucket": "direct",
|
||||
"reachable": true,
|
||||
"confidence": 0.95,
|
||||
"pathLength": 2,
|
||||
"path": [
|
||||
"sym:csharp:Program.Main",
|
||||
"sym:csharp:JsonConvert.DeserializeObject"
|
||||
]
|
||||
},
|
||||
"reasoning": "Direct call from Main() to JsonConvert.DeserializeObject with TypeNameHandling.All settings"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:csharp:JsonConvert.SerializeObject",
|
||||
"display": "Newtonsoft.Json.JsonConvert.SerializeObject(object)",
|
||||
"purl": "pkg:nuget/Newtonsoft.Json@13.0.1",
|
||||
"expected": {
|
||||
"latticeState": "SU",
|
||||
"bucket": "unreachable",
|
||||
"reachable": false,
|
||||
"confidence": 0.90,
|
||||
"pathLength": null,
|
||||
"path": null
|
||||
},
|
||||
"reasoning": "SerializeObject is present in the dependency but never called from any entry point"
|
||||
}
|
||||
],
|
||||
"entryPoints": [
|
||||
{
|
||||
"symbolId": "sym:csharp:Program.Main",
|
||||
"display": "SampleApp.Program.Main(string[])",
|
||||
"phase": "runtime",
|
||||
"source": "manifest"
|
||||
}
|
||||
],
|
||||
"expectedUncertainty": {
|
||||
"states": [],
|
||||
"aggregateTier": "T4",
|
||||
"riskScore": 0.0
|
||||
},
|
||||
"expectedGateDecisions": [
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"targetSymbol": "sym:csharp:JsonConvert.DeserializeObject",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "block",
|
||||
"expectedBlockedBy": "LatticeState",
|
||||
"expectedReason": "SR state incompatible with not_affected - code path exists from entry point"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"targetSymbol": "sym:csharp:JsonConvert.DeserializeObject",
|
||||
"requestedStatus": "affected",
|
||||
"expectedDecision": "allow"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"targetSymbol": "sym:csharp:JsonConvert.SerializeObject",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "allow",
|
||||
"expectedReason": "SU state allows not_affected - unreachable code path"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"sampleId": "sample:csharp:simple-reachable:001",
|
||||
"version": "1.0.0",
|
||||
"createdAt": "2025-12-13T12:00:00Z",
|
||||
"language": "csharp",
|
||||
"category": "positive",
|
||||
"description": "Simple C# console app with direct call path to vulnerable Newtonsoft.Json TypeNameHandling usage",
|
||||
"source": {
|
||||
"repository": "synthetic",
|
||||
"commit": "synthetic-sample",
|
||||
"buildToolchain": "dotnet:10.0"
|
||||
},
|
||||
"vulnerabilities": [
|
||||
{
|
||||
"vulnId": "CVE-2024-21907",
|
||||
"purl": "pkg:nuget/Newtonsoft.Json@13.0.1",
|
||||
"affectedSymbol": "Newtonsoft.Json.JsonConvert.DeserializeObject"
|
||||
}
|
||||
],
|
||||
"artifacts": [
|
||||
{
|
||||
"path": "artifacts/app.dll",
|
||||
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"type": "application/x-msdownload"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
{
|
||||
"schema": "ground-truth-v1",
|
||||
"sampleId": "sample:java:vulnerable-log4j:001",
|
||||
"generatedAt": "2025-12-13T12:00:00Z",
|
||||
"generator": {
|
||||
"name": "manual-annotation",
|
||||
"version": "1.0.0",
|
||||
"annotator": "security-team"
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"symbolId": "sym:java:log4j.JndiLookup.lookup",
|
||||
"display": "org.apache.logging.log4j.core.lookup.JndiLookup.lookup(LogEvent, String)",
|
||||
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1",
|
||||
"expected": {
|
||||
"latticeState": "CR",
|
||||
"bucket": "runtime",
|
||||
"reachable": true,
|
||||
"confidence": 0.98,
|
||||
"pathLength": 4,
|
||||
"path": [
|
||||
"sym:java:HttpRequestHandler.handle",
|
||||
"sym:java:LogManager.getLogger",
|
||||
"sym:java:Logger.info",
|
||||
"sym:java:log4j.JndiLookup.lookup"
|
||||
]
|
||||
},
|
||||
"reasoning": "Confirmed reachable via runtime probe - HTTP request handler logs user-controlled input which triggers JNDI lookup via message substitution"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:java:log4j.JndiManager.lookup",
|
||||
"display": "org.apache.logging.log4j.core.net.JndiManager.lookup(String)",
|
||||
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1",
|
||||
"expected": {
|
||||
"latticeState": "CU",
|
||||
"bucket": "unreachable",
|
||||
"reachable": false,
|
||||
"confidence": 0.92,
|
||||
"pathLength": null,
|
||||
"path": null
|
||||
},
|
||||
"reasoning": "JndiManager.lookup is present in log4j-core but the direct JndiManager usage path is not exercised - only JndiLookup wrapper is used"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:java:log4j.ScriptLookup.lookup",
|
||||
"display": "org.apache.logging.log4j.core.lookup.ScriptLookup.lookup(LogEvent, String)",
|
||||
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1",
|
||||
"expected": {
|
||||
"latticeState": "SU",
|
||||
"bucket": "unreachable",
|
||||
"reachable": false,
|
||||
"confidence": 0.85,
|
||||
"pathLength": null,
|
||||
"path": null
|
||||
},
|
||||
"reasoning": "ScriptLookup exists in log4j-core but is disabled by default and no configuration enables it"
|
||||
}
|
||||
],
|
||||
"entryPoints": [
|
||||
{
|
||||
"symbolId": "sym:java:HttpRequestHandler.handle",
|
||||
"display": "com.example.app.HttpRequestHandler.handle(HttpExchange)",
|
||||
"phase": "runtime",
|
||||
"source": "servlet"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:java:Application.main",
|
||||
"display": "com.example.app.Application.main(String[])",
|
||||
"phase": "main",
|
||||
"source": "manifest"
|
||||
}
|
||||
],
|
||||
"expectedUncertainty": {
|
||||
"states": [],
|
||||
"aggregateTier": "T4",
|
||||
"riskScore": 0.0
|
||||
},
|
||||
"expectedGateDecisions": [
|
||||
{
|
||||
"vulnId": "CVE-2021-44228",
|
||||
"targetSymbol": "sym:java:log4j.JndiLookup.lookup",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "block",
|
||||
"expectedBlockedBy": "LatticeState",
|
||||
"expectedReason": "CR state blocks not_affected - runtime evidence confirms reachability"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2021-44228",
|
||||
"targetSymbol": "sym:java:log4j.JndiLookup.lookup",
|
||||
"requestedStatus": "affected",
|
||||
"expectedDecision": "allow"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2021-44228",
|
||||
"targetSymbol": "sym:java:log4j.JndiManager.lookup",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "allow",
|
||||
"expectedReason": "CU state allows not_affected - confirmed unreachable"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2021-44228",
|
||||
"targetSymbol": "sym:java:log4j.ScriptLookup.lookup",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "warn",
|
||||
"expectedReason": "SU state allows not_affected but with warning - static analysis only, no runtime confirmation"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"sampleId": "sample:java:vulnerable-log4j:001",
|
||||
"version": "1.0.0",
|
||||
"createdAt": "2025-12-13T12:00:00Z",
|
||||
"language": "java",
|
||||
"category": "positive",
|
||||
"description": "Log4Shell CVE-2021-44228 reachable via JNDI lookup in logging path from HTTP request handler",
|
||||
"source": {
|
||||
"repository": "synthetic",
|
||||
"commit": "synthetic-sample",
|
||||
"buildToolchain": "maven:3.9.0,jdk:17"
|
||||
},
|
||||
"vulnerabilities": [
|
||||
{
|
||||
"vulnId": "CVE-2021-44228",
|
||||
"purl": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1",
|
||||
"affectedSymbol": "org.apache.logging.log4j.core.lookup.JndiLookup.lookup"
|
||||
}
|
||||
],
|
||||
"artifacts": [
|
||||
{
|
||||
"path": "artifacts/app.jar",
|
||||
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000004",
|
||||
"type": "application/java-archive"
|
||||
},
|
||||
{
|
||||
"path": "artifacts/sbom.cdx.json",
|
||||
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000005",
|
||||
"type": "application/vnd.cyclonedx+json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"schema": "ground-truth-v1",
|
||||
"sampleId": "sample:native:stripped-elf:001",
|
||||
"generatedAt": "2025-12-13T12:00:00Z",
|
||||
"generator": {
|
||||
"name": "manual-annotation",
|
||||
"version": "1.0.0",
|
||||
"annotator": "scanner-guild"
|
||||
},
|
||||
"targets": [
|
||||
{
|
||||
"symbolId": "sym:binary:ossl_punycode_decode",
|
||||
"display": "ossl_punycode_decode",
|
||||
"purl": "pkg:deb/ubuntu/openssl@3.0.2?arch=amd64",
|
||||
"expected": {
|
||||
"latticeState": "SR",
|
||||
"bucket": "direct",
|
||||
"reachable": true,
|
||||
"confidence": 0.85,
|
||||
"pathLength": 4,
|
||||
"path": [
|
||||
"sym:binary:_start",
|
||||
"sym:binary:main",
|
||||
"sym:binary:SSL_connect",
|
||||
"sym:binary:ossl_punycode_decode"
|
||||
]
|
||||
},
|
||||
"reasoning": "punycode_decode is reachable via SSL certificate validation during SSL_connect - lower confidence due to stripped binary heuristics"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:binary:sub_401000",
|
||||
"display": "sub_401000 (heuristic function)",
|
||||
"purl": "pkg:generic/app@1.0.0",
|
||||
"expected": {
|
||||
"latticeState": "U",
|
||||
"bucket": "unknown",
|
||||
"reachable": null,
|
||||
"confidence": 0.4,
|
||||
"pathLength": null,
|
||||
"path": null
|
||||
},
|
||||
"reasoning": "Stripped symbol detected by heuristic CFG analysis - function boundaries uncertain"
|
||||
}
|
||||
],
|
||||
"entryPoints": [
|
||||
{
|
||||
"symbolId": "sym:binary:_start",
|
||||
"display": "_start",
|
||||
"phase": "load",
|
||||
"source": "e_entry"
|
||||
},
|
||||
{
|
||||
"symbolId": "sym:binary:main",
|
||||
"display": "main",
|
||||
"phase": "runtime",
|
||||
"source": "symbol"
|
||||
},
|
||||
{
|
||||
"symbolId": "init:binary:0x401000",
|
||||
"display": "DT_INIT_ARRAY[0]",
|
||||
"phase": "init",
|
||||
"source": "DT_INIT_ARRAY"
|
||||
}
|
||||
],
|
||||
"expectedUncertainty": {
|
||||
"states": [
|
||||
{
|
||||
"code": "U1",
|
||||
"entropy": 0.35
|
||||
}
|
||||
],
|
||||
"aggregateTier": "T2",
|
||||
"riskScore": 0.25
|
||||
},
|
||||
"expectedGateDecisions": [
|
||||
{
|
||||
"vulnId": "CVE-2022-3602",
|
||||
"targetSymbol": "sym:binary:ossl_punycode_decode",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "block",
|
||||
"expectedBlockedBy": "LatticeState",
|
||||
"expectedReason": "SR state blocks not_affected - static analysis shows reachability"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2022-3602",
|
||||
"targetSymbol": "sym:binary:ossl_punycode_decode",
|
||||
"requestedStatus": "affected",
|
||||
"expectedDecision": "warn",
|
||||
"expectedReason": "T2 uncertainty tier requires review for affected status"
|
||||
},
|
||||
{
|
||||
"vulnId": "CVE-2022-3602",
|
||||
"targetSymbol": "sym:binary:sub_401000",
|
||||
"requestedStatus": "not_affected",
|
||||
"expectedDecision": "block",
|
||||
"expectedBlockedBy": "UncertaintyTier",
|
||||
"expectedReason": "Unknown state with U1 uncertainty blocks not_affected without justification"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"sampleId": "sample:native:stripped-elf:001",
|
||||
"version": "1.0.0",
|
||||
"createdAt": "2025-12-13T12:00:00Z",
|
||||
"language": "native",
|
||||
"category": "positive",
|
||||
"description": "Stripped ELF binary linking to vulnerable OpenSSL version with reachable SSL_read path",
|
||||
"source": {
|
||||
"repository": "synthetic",
|
||||
"commit": "synthetic-sample",
|
||||
"buildToolchain": "gcc:13.0,openssl:3.0.2"
|
||||
},
|
||||
"vulnerabilities": [
|
||||
{
|
||||
"vulnId": "CVE-2022-3602",
|
||||
"purl": "pkg:deb/ubuntu/openssl@3.0.2?arch=amd64",
|
||||
"affectedSymbol": "ossl_punycode_decode"
|
||||
}
|
||||
],
|
||||
"artifacts": [
|
||||
{
|
||||
"path": "artifacts/app",
|
||||
"hash": "sha256:0000000000000000000000000000000000000000000000000000000000000003",
|
||||
"type": "application/x-executable"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user