Join our Newsletter — 33% off our NHI Course

Call Graph

A map of which functions call which other functions in an application and its dependencies. Security tools use it to trace whether a vulnerable function sits on a live execution path or remains unreachable in practice.

Expanded Definition

A call graph shows the directed relationships between caller and callee functions across an application, libraries, and sometimes runtime-loaded components. In security work, its value is not the diagram itself but the path analysis it enables: teams can determine whether a vulnerable routine is actually reachable from an exposed entry point, or whether it is present only in dead code, test utilities, or non-production paths. That distinction matters because reachability often changes remediation priority.

Definitions vary across vendors and static analysis engines, especially when asynchronous calls, reflection, dependency injection, or dynamic imports are involved. Some tools build a static call graph from source code, while others enrich it with runtime observation to reduce false positives. For governance purposes, the concept is best understood as an evidence model for code execution paths, not as a complete statement of runtime behavior. The NIST Cybersecurity Framework 2.0 is relevant here because secure development practices depend on knowing where software risk is actually exposed.

The most common misapplication is treating any listed vulnerable function as immediately exploitable, which occurs when teams ignore whether the function can be invoked from a real, reachable execution path.

Examples and Use Cases

Implementing call graph analysis rigorously often introduces coverage and precision tradeoffs, requiring organisations to weigh broader code visibility against the cost of false positives and analysis overhead.

  • A code scanning tool flags a vulnerable deserialization function, then uses the call graph to show that no production endpoint can reach it.
  • A software composition analysis workflow traces dependency calls to determine whether a known library flaw is invoked by the application at runtime.
  • A security engineer reviews a service entry point and follows the call graph to confirm whether authentication checks happen before sensitive database operations.
  • An incident responder uses a runtime call graph to understand which internal functions executed after a malicious payload reached an API handler.
  • A platform team compares static and observed call graphs to identify gaps caused by reflection, plugins, or dynamically generated code.

For teams working with modern software supply chain controls, call graph evidence often complements guidance from NIST Cybersecurity Framework 2.0 by making software exposure more measurable. It also helps security reviewers separate theoretical vulnerability presence from actual exploitability in deployed builds.

Why It Matters for Security Teams

Security teams need call graph insight because remediation resources are limited and not every vulnerability warrants the same response. Without reachability context, teams can over-prioritise dormant code while missing high-risk paths that connect public interfaces to sensitive operations. That leads to noisy backlog management, wasted patch effort, and incomplete risk decisions.

In application security, the call graph becomes especially important when software includes microservices, shared libraries, plugin architectures, or agentic AI components that invoke tools through layered abstractions. In those environments, execution authority is distributed across many functions, and a weak assumption about one call path can hide an exposure that only appears in production. The term is also useful when tracing how secrets, tokens, or privileged actions flow through code paths that should be gated by strong controls.

Practitioners typically encounter the operational importance of a call graph only after a scan produces too many findings or an incident exposes an unexpected execution path, at which point it becomes unavoidable to distinguish reachable risk from theoretical risk.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

NIST CSF 2.0 and NIST SP 800-53 Rev 5 set the technical controls, while ISO/IEC 27001:2022 define the regulatory obligations.

Framework Control / Reference Relevance
NIST CSF 2.0 ID.RA-01 Risk analysis depends on knowing whether vulnerable code is reachable in practice.
NIST SP 800-53 Rev 5 SA-11 Secure code testing benefits from call graph analysis to validate executable paths.
ISO/IEC 27001:2022 Secure development governance benefits from evidence about reachable application logic.

Use call graph evidence to refine risk prioritisation for reachable software exposure.