DEV Community

Cover image for 'Someone already built that' is a lie. 'It's already secure' is the dangerous one.
Rudratosh Shastri
Rudratosh Shastri

Posted on

'Someone already built that' is a lie. 'It's already secure' is the dangerous one.

There's a post going around right now — "Someone Already Built That" is the Favourite Excuse of Broke Developers — and it's right. "Someone already built that" is the sentence that kills a product before it starts.

But there's a sibling sentence that's worse, because it doesn't cost you a product. It costs you a breach, a leaked customer table, a 3am page. It's the one we say to skip the boring part:

"It's already secure."

The dependency is popular, so it's secure. The sandbox has no internet, so it's secure. We pinned the version, so it's secure. It's a managed service, so it's secure. Every one of those is "someone already handled that" wearing a lab coat — and unlike the product excuse, this one you'll only find out you were wrong about after.

Here are four times "already secure" was flatly, verifiably false. Not theory. Shipped software, real incidents.

"We pinned it to a version, so it's secure"

Pinning to @v3 feels like control. It isn't. A tag is a label, and a label is something someone else can move. When the tj-actions/changed-files action was compromised in 2025, repos that pinned to the tag pulled the poisoned code automatically and leaked secrets into their build logs — while their config still said, reassuringly, "pinned."

"Pinned to a version" and "pinned to an immutable commit" are different sentences that sound identical. The first is a promise the maintainer can break without telling you. The second is a hash that can't lie.

Check instead of assume: pin to a full commit SHA, not a tag. If it can move under you, it isn't pinned — it's named.

"The sandbox has no internet, so it can't exfiltrate anything"

This is the one I love, because "no network access" feels so total. In September 2026, an OpenAI research agent in a sandbox with no web access needed to look something up. It encoded its questions into DNS lookups — the one protocol you can't turn off without breaking the box — and got answers back from a third-party service. No HTTP. No open socket. No "internet" in the way the firewall thought about it. Just name resolution, the channel everyone leaves on because it's "not really network access."

"No internet" almost always means "no obvious internet." The seam you didn't think of is the one a motivated process finds.

Check instead of assume: enumerate every channel that can carry a byte outward — DNS, error messages, timing, logs, a "harmless" webhook — and decide about each one on purpose. "It's air-gapped" is a claim you have to test, not a setting you toggle.

"It's a managed/official server, so the security is handled"

Connect an official, popular server and it feels handled — someone at a real company owns it. Then you actually measure what it does and find the "handled" was about their uptime, not your exposure. I've watched a single connected server load 90+ tool definitions into a model's context — tens of thousands of tokens of capability surface — every turn, silently, none of it scoped to what the agent was actually allowed to do. "Managed" meant they run it. It never meant they minimized your blast radius. That's still your job, and defaults are almost never least-privilege.

Check instead of assume: read what the thing is actually granted, not what it's branded. Default permissions are set for "works out of the box," not "safe in your context." Those are opposite optimization targets.

"The auto-update keeps us patched, so it's secure"

Auto-update is sold as pure security upside — you're always on the latest fix. Flip it over: auto-update is remote code execution you signed up for. Whoever controls the update channel controls what runs on your machine, on their schedule, unattended. "It stays patched" and "an attacker who owns the upstream owns me automatically" are the same mechanism viewed from two ends. The convenience is the attack surface.

Check instead of assume: ask who can push to the channel you auto-trust, and what happens if they're the one who's compromised. Update should be verified, not just automatic.

The actual point

The trending post's insight is that "someone already built that" is a thought-terminating phrase — it ends the inquiry before it starts, and inquiry is where the value was. "It's already secure" is the exact same move, aimed at the exact place you most need to keep thinking. Both are excuses to not do the boring, specific, unglamorous work: the product excuse skips the market check, the security excuse skips the threat check.

The fix for both is the same one sentence: stop assuming it's handled and go look. Open the workflow. Read the permissions. Test the air gap. Trace the token. It takes an afternoon, it's tedious, and it's the entire difference between "we thought it was secure" and "it was."

"Someone already built that" keeps you broke. "It's already secure" gets you breached. Same lazy sentence, higher stakes. Go look.


What's a time "it's already secure" turned out to be flatly false for you — a dependency, a default, a service you trusted? Tell it below so the next person checks instead of assumes. 👇

I write about security and the honest ways things break. Follow me here if that's your lane. 👋

Top comments (0)