"매 vulnerable function 매 actually called 인지 — 매 noise 80%+ filter". 매 SCA (Software Composition Analysis) 매 evolution. Endor Labs / Snyk Reachability / Semgrep Supply Chain / Socket — 매 2026 standard for security triage.
매 핵심
매 reachability levels
Package-level: 매 dependency installed? (CVE found, but unused — 매 false positive 80%+)
Module-level: 매 module imported?
Function-level: 매 vulnerable function in call graph from app entry?
Conditional reachability: 매 reachable only under specific input?
{"vulnerabilities":[{"id":"CVE-2024-12345","affects":[{"ref":"pkg:npm/lodash@4.17.15"}],"analysis":{"state":"not_affected","justification":"vulnerable_code_not_in_execute_path","detail":"merge() function not called from any entry point"}}]}
Java — Soot points-to
// pseudocode for Soot frameworkPackManager.v().getPack("wjtp").add(newTransform("wjtp.callgraph",newSceneTransformer(){protectedvoidinternalTransform(Stringphase,Mapopts){CallGraphcg=Scene.v().getCallGraph();Set<MethodOrMethodContext>reachable=newHashSet<>();Iterator<MethodOrMethodContext>it=cg.sourceMethods();while(it.hasNext())reachable.add(it.next());// intersect with vulnerable methods}}));
Runtime reachability (Datadog ASM-style)
# Instrument vulnerable function@trace_calldefvulnerable_lib_func(*args):record_call_site(inspect.stack())returnoriginal(*args)# After load test → know which CVEs actually hit
언제: 매 vulnerability summary, 매 fix PR generation (deps upgrade + breaking change risk), 매 VEX justification drafting.
언제 X: 매 call graph itself — LLM 매 hallucinate edges. 매 deterministic tools (Soot, jedi).
❌ 안티패턴
All CVEs are critical: 매 noise overwhelm — alert fatigue. 매 reachability filter 필수.
Static only: 매 dynamic dispatch / reflection 매 miss. 매 runtime confirmation.
No transitive coverage: 매 only direct deps — transitive vulns invisible.
Reachability = exploitability: 매 reachable ≠ exploitable (auth, sandboxing). 매 still triage.