FlawPilot
From the blog

The Security Debt Ledger: What Ships Today That You'll Regret Later

Every engineering team already understands tech debt: the shortcut you take today to ship faster, and the slower, more expensive work you'll owe later because of it. It's a familiar enough idea…

The FlawPilot TeamSecurity research24 Sept 20267 min read

Every engineering team already understands tech debt: the shortcut you take today to ship faster, and the slower, more expensive work you'll owe later because of it. It's a familiar enough idea that teams track it, discuss it in sprint planning, and budget time to pay it down.

Security gaps work the same way, and almost nobody tracks them that way. A missing header, an exposed config file, a dangling DNS record, each one is a small loan against future risk, taken out the moment it ships and left unpaid until something forces the issue. The difference from ordinary tech debt is what makes it dangerous: tech debt usually announces itself, slower builds, more bugs, harder onboarding. Security debt doesn't. It sits on the books completely silent, accruing interest nobody can see, until the day it gets collected all at once.

What Actually Counts as Security Debt

Not every unfixed finding is debt in this sense. A finding is debt when someone, deliberately or by default, decided it wasn't worth fixing right now. That's true of many findings. A missing Content-Security-Policy header rarely blocks a launch. An exposed .env file doesn't fail a demo. A dangling subdomain from a marketing campaign that ended eight months ago isn't on anyone's sprint board. Each one got deferred, correctly or not, and each deferral is a line item on a ledger nobody's actually keeping.

Three things matter about each entry, the same way they matter on a real ledger:

  • The principal. What the gap actually is, and how bad it is the moment someone finds it.
  • The interest rate. How much worse it gets the longer it sits unfixed, some debt barely compounds, some compounds fast.
  • The collection event. What has to happen for the debt to actually come due. Some never get collected. Some get collected the first week.

A Sample Ledger

Here's what a handful of real, common findings look like read this way.

FindingPrincipalInterest RateWhat Collects It
Missing HttpOnly on session cookiesSession token readable by any script on the pageLow on its own, spikes sharply the moment any XSS bug exists anywhere on the siteAn unrelated XSS finding, found separately, months later
Exposed .env filePotentially exposed database credentials, API keys, and other secrets, depending on what the file containsDoesn't compound much, it's closer to a flat, immediate cost the day someone finds the URLA routine scan or a search engine indexing the file
Dangling subdomain (old DNS record)Little direct impact until the abandoned resource becomes claimable or otherwise usable by an unauthorized partyCompounds slowly at first, then jumps the moment someone registers the abandoned resourceA phishing campaign or a routine subdomain enumeration pass
Missing SPF/DKIM/DMARC enforcementReduced protection against unauthorized use of the domain in emailCompounds with your domain's reputation and how much anyone trusts email from itA business email compromise attempt against a customer or vendor
Open Redis port, no authenticationPotential unauthorized read/write access to cached data, depending on Redis configuration and network exposureDoesn't compound much technically, but the blast radius grows as more gets cached there over timeAnyone running a routine internal-service scan against the IP

None of these are hypothetical categories. Every one shows up repeatedly in real security research, and every one is the kind of finding that's easy to see on a report and easy to deprioritize in a sprint.

The important point is that two findings with the same severity can represent very different kinds of debt: one may remain relatively stable for months, while another can become substantially more consequential as the surrounding system changes.

Why Security Debt Is Worse Than It Looks

Ordinary tech debt has a built-in warning system. It shows up in complaints, slower velocity, more incidents, more time spent working around the mess instead of through it. People feel it, which means it eventually forces its own conversation.

Security debt has no such feedback loop. A missing header doesn't slow anyone down. An open port doesn't show up in a retro. The team can ship for years without a single symptom, right up until the collection event happens, and then the cost isn't gradual, it's the full principal plus however much interest accrued, due immediately, usually at the worst possible time.

That asymmetry is the actual argument for tracking this deliberately instead of trusting that it'll surface naturally the way other debt does. It won't. Nothing about ignoring a missing HttpOnly flag makes your codebase harder to work in. It just makes one specific future day much worse than it needed to be.

Reading Your Own Ledger

The instinct is to triage by principal alone, fix whatever looks worst on paper first. That's not wrong, but it misses half the picture. Interest rate matters just as much, because a small principal with a fast compounding rate can become the most expensive item on the ledger faster than a larger one that barely compounds at all.

A practical read of a real ledger looks like this:

  • High principal, fast interest. These generally deserve the most urgent attention. An exposed .env file with active credentials is exactly this.
  • Low principal, fast interest. These are the ones teams miss. A missing cookie flag looks minor in isolation and becomes serious the moment anything else goes wrong nearby.
  • High principal, slow interest. These can still require prompt attention, even when the risk does not rapidly increase over time. Something serious but genuinely hard for anyone to actually find or exploit.
  • Low principal, slow interest. Fine to schedule, not to ignore forever. These are legitimately low priority, as long as someone's actually tracking that they exist.

The mistake isn't leaving debt on the books. Every team does that, on purpose, constantly. The mistake is not knowing the ledger exists, so nobody's making that trade-off deliberately.

Building the Habit

This doesn't need new tooling to start. It needs the same discipline already applied to tech debt: a place findings get logged, not just found; a rough sense of principal and interest per item, even informally; and a recurring point, sprint planning, a quarterly review, wherever tech debt already gets discussed, where security debt gets read alongside it instead of living in a separate, forgotten report.

Automated scans are useful here mainly because they keep the ledger current without relying on anyone remembering to re-check manually. A finding that was accurate three months ago can be stale today, a header removed during a refactor, a new dangling subdomain nobody noticed. The ledger only works if it reflects what's actually true right now, not what was true the last time someone happened to look.

Frequently asked questions

Severity alone tells you how bad a finding is today. Interest rate tells you how much worse it gets if you wait, which severity alone doesn't capture. A low-severity finding with a fast interest rate can outrank a higher-severity one that barely compounds.

Final Thoughts

Every team already accepts that some amount of tech debt is unavoidable, the question is always whether it's tracked or invisible. Security debt deserves exactly the same standard, and right now it rarely gets it.

The gap isn't usually a lack of findings. Most teams have a scan report or an audit sitting somewhere with all of this already listed. The gap is that nobody reads it as a ledger, something with a principal and an interest rate and a collection event still to come. Read it that way once, and it stops being a list of things to feel vaguely bad about, and starts being something you can actually manage.

How FlawPilot helps

FlawPilot finds security and quality issues in your AI-built app and shows you how to fix them. It checks your deployed site across security, performance, infrastructure, and SEO, and scans your source code for vulnerabilities, hardcoded secrets, and vulnerable dependencies.

Every finding is prioritized and explained in plain English, with the actual fix: the configuration change, DNS record, security header, or code change needed. For supported findings, AI-powered guidance adds step-by-step instructions and suggested code fixes.

Connect your Git provider to scan your repository alongside your live site, so application findings, code vulnerabilities, secrets, and dependency issues all land in one place.

It fits your existing workflow too: a REST API for scores and findings, an embeddable security badge, and an MCP server so tools like Claude, Cursor, or ChatGPT can read your findings and help you work through them.

The boundaries are clear: the public website scan reads only publicly accessible signals, with no agent or credentials required, and source-code scanning is opt-in and read-only. Fixes are never applied or merged without your review.

Security DebtWebsite SecurityDevSecOpsSecurity ChecklistApplication SecurityTechnical Debt)

Verify your AI-generated app is production-ready.

117 security checks in 60 seconds - free, no account needed.

Scan one page

Enter a URL - no account, no install.

Run a Site Health check

Requires a free account

Crawls every page we can reach and scores each one, so a slow template deep in the site stops hiding behind a healthy homepage.

Scan your source code

Requires a free account

Connect a Git provider to check for vulnerabilities, secrets, and risky dependencies.

Featured on