Safeguard
Security Guides•

How does ASPM route findings to the right team?

ASPM routes findings using code owners files, repository maps and service catalogs. How routing works, where it fails, and how to fix bad ownership data.

Safeguard Security Team
6 min read

ASPM routes findings by looking up who owns the affected repository, path or service, using sources such as code owners files, a service catalog or a manual mapping. The routing is only as accurate as that ownership data, so fixing the data matters more than the tool.

What routing does

Routing turns a finding into a task for a named team. It answers "who should look at this first?" Without it, findings collect in a central queue where security staff become the default fixers for code they did not write.

Where ownership data comes from

SourceHow it worksWeakness
Code owners fileA file in the repository lists people or teams per pathGoes stale after reorganizations
Service catalogA central list of services and teamsNeeds someone to maintain it
Source control team settingsRepository access by teamAccess is not the same as ownership
Commit historyMost frequent recent committersFails for quiet or abandoned code
Manual mapA spreadsheet or configEasy to start, easy to forget

Most organizations end up with a blend. The order of preference matters: an explicit declaration from the owners beats an inference from history.

Common routing failures

  • The orphan. A repository with no owner. Findings pile up.
  • The shared library. Used by many teams, owned by none. Decide on an owning team, even if informal.
  • The departed owner. The named person left. Route to the team, not the individual.
  • The wrong layer. A vulnerable base image belongs to a platform team, but the finding shows up in each application repository.

A fix cycle you can run monthly

  1. List findings with no owner, and sort by repository.
  2. For each repository, ask the most recent contributors who should own it.
  3. Add or update the code owners file, and link it from the platform.
  4. List repositories with no commits for a long period and propose archiving.
  5. Recheck unowned count. It should fall each month.

Handling the shared dependency problem

For a base image or common library, route the root cause to the team that maintains it, and let consuming teams see a read only reference. This avoids ten teams opening ten tickets for one fix. It also pairs well with deduplication, since the same flaw appears once and links to the places it matters.

Rules for escalation

Decide in advance what happens when a team does not respond. A simple rule is that unacknowledged high priority items go to the team's lead after a set number of days, and then to the engineering director. Write the rule down so it does not feel personal.

Measuring it

Track the share of open findings with an owner, and the median time from detection to acknowledgment. If the second number is large, routing may be correct but the notification channel is not being watched.

A worked example: one finding, three possible routes

A vulnerable library is found in a repository called payments-service. Three sources disagree.

SourceSays owner isReliability
Code owners filePayments teamHigh, edited last month
Source control accessPlatform team (they have admin rights)Low, access is not ownership
Commit historyAn individual who left the companyStale

The routing rule should choose the code owners file, and ignore the other two. Writing the rule down, in order of trust, prevents arguments later: "Declared ownership first, then the service catalog, then a manual map. Commit history is a hint, not an owner."

Step by step: building a routing policy

  1. List the ownership sources you have and rank them by how often they are correct.
  2. Write the order of precedence in one paragraph.
  3. Decide what happens when no source gives an answer. Routing to an unassigned queue with a visible count works well.
  4. Name who triages the unassigned queue and how often.
  5. Test the policy on twenty findings and note the misroutes.
  6. Fix the data behind each misroute rather than adding special cases.

Notification channels

Routing can still fail if the team never sees the message. Choose channels that people actually watch. Options include a team channel, a ticket in the team's board or an email list. Avoid personal direct messages as the main channel because people go on leave. Test it by sending a low severity message and checking the response time.

Handling cross team issues

Some findings involve more than one team: a base image used by many services, or a shared library. Create a parent item for the root cause, owned by the maintaining team, and link child items for consumers. Consumers watch the parent and apply the update when it ships. This avoids duplicate work and duplicate noise.

What to report

Show leadership the percentage of findings with an owner, the median time to acknowledgment and the count of items in the unassigned queue. If the unassigned count is not shrinking, the problem is ownership data, not the platform.

Where Safeguard fits

Safeguard provides asset discovery and policies, gates and guardrails. Try a free scan at gold.safeguard.sh/scan.

Try it yourself

Click through it at your own pace, or open it full screen. Look for where an owner is shown next to each issue.

Quick check

Should findings go to a person or a team?

A team. People change roles, and a team name survives that.

What if two teams both claim a repository?

Name one primary owner and list the other as a contact. Dual ownership usually means no ownership.

Should security be the fallback owner for unowned code?

Only briefly. Security can triage and find a real owner, but making security the permanent owner means developers never take responsibility for code they ship.

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.