Any signed-in user can read another tenant's invoices
GET /api/invoices/8812
Cookie: session=tenant-b
HTTP/1.1 200 OK
About Envenox
Envenox is a software development company that keeps an offensive security practice on staff. We design and ship production systems, and the same sprint puts them in front of people whose job is to break them, so what reaches your users has already survived an attack.
GET /api/invoices/8812
Cookie: session=tenant-b
HTTP/1.1 200 OK
- db.invoice.findUnique({ where: { id } })
+ db.invoice.findFirst({
+ where: { id, tenantId: session.tenantId },
+ })
Sample finding and fix, shown for illustration
Our services
Two practices under one roof: a development team that ships production systems, and a security team that attacks them.
Systems built to survive an audit, a breach attempt and a handover.
Discuss thisFast on a throttled corporate network, correct without JavaScript, and accessible by construction.
Discuss thisDeployment that is boring, and a rollback somebody has actually rehearsed.
Discuss thisThe processes you actually run, not the ones a vendor template assumes.
Discuss thisA pipeline your sales team updates because it helps them, not because it is mandated.
Discuss thisEmployee data handled with the care a regulator expects, and a joiner process that finishes.
Discuss thisCompletion you can evidence to an auditor, and content people finish.
Discuss thisA suite people trust enough to block a release on.
Discuss thisFindings your engineers can fix on Monday, not a PDF nobody opens.
Discuss thisFix the class of bug, not the instance. Then make it impossible to reintroduce.
Discuss thisThe identity graph, not the misconfiguration list.
Discuss thisCertification as a by-product of controls that work, not a parallel paperwork exercise.
Discuss thisAnalysts who read your architecture before they read your alerts.
Discuss thisA responder who knows your systems, and a forensic record that holds up afterwards.
Discuss thisA test of your detection and response, not of your patch level.
Discuss thisSecurity leadership at the board table, at a fraction of a hire.
Discuss thisIndustries we serve
Sectors where a breach or an outage costs more than the project did.
How we work
Threat models shape the build. The build gets attacked. The attack rewrites the threat model.
Book a scoping callBefore the first sprint, with the engineers who will own each component. The cheapest security finding is an architecture decision.
Two-week sprints, trunk-based, deployed to staging continuously. Security reviews each architectural decision record as it is written.
Continuous review of the sensitive paths during the build, then an independent pre-release test by a tester who wrote none of the code.
Detections written for the system as built, by people who have been reading it for months rather than meeting it at handover.
What the testing and the monitoring find goes back into the threat model. That is the loop, and it is why the second year costs less than the first.
05 returns to 01, Model. The output of 05 is the input to 01. That return path is the only unusual part of this, and it is the part that requires both practices to be in one firm.
Engagement models
No published price list: every engagement is quoted in writing after a scoping call.
A defined outcome, an agreed scope and a delivery date, quoted as one piece of work.
A longer body of work delivered in phases, planned and reviewed with you as it goes.
Ongoing security capacity, from testing to response, available when you need it.
Our engineers and testers working inside your team, to your cadence.
Technology stack
Mainstream, well-supported technology your own team can maintain after we hand over.
FAQ
What most teams ask us before the first call.
Yes. Most clients start with one practice. The Adversary Loop is how we work when we do both, and it is where having both teams pays for itself.
Every engagement is quoted after a 60-minute scoping call. The written proposal, with scope, team and price, arrives within three to five days.
Four ways: a fixed-scope project, a programme, a security retainer, or an embedded team. The proposal says which one fits your work and why.
Contracting usually takes one to two weeks, and the team mobilises one to three weeks after that.
Financial services, healthcare, SaaS and technology, logistics, the public sector, and retail and payments.
It becomes a ticket in your tracker with the request that proves it, a pull request that fixes it, and a retest before the ticket closes.
Contact us
Tell us what you are working on. We will set up a 60-minute scoping call with the engineer who would lead the work.