gethacked.ai

WHAT WE FIND

The failure catalogue.

Most of what we find comes from how a real product behaves when valid features get combined or abused. Check it against your own product, before anyone charges you for it.

One customer reads another customer’s data.

The app answers who you are and never asks whether this record is yours. It is a URL with a number in it, an export, a search, a webhook, or a whole second tenant visible by accident. The cost is the contract you lose and the years of explaining it.

Someone runs up your bill.

Your product calls something you pay for, and a user can decide how much of it happens. A missing cap on one request, an unbounded loop, a replayed webhook, a free tier with no quota. Nothing is broken. The numbers simply do not match your users at the end of the month.

The product works exactly as built, and the outcome is wrong.

Every request is valid, every permission is correct, and the result is a discount applied five times, a refund for an order that never shipped, a trial that keeps its credits after cancelling. The rules of your product and the code that enforces them have drifted apart.

Your agent does something you never intended.

Systems that read, send, buy and act on your behalf introduce a new category of problem. Instructions hidden in content the agent reads. Permission scopes that were never narrowed. Two agents talking to each other with no shared limit. What could it do that you did not intend?

A secret sits where it can be read.

An API key in the repository. A provider key in the browser bundle, where anybody can read it and use it on your account. A credential in a log file a third party now stores. Cheap to check for, expensive to ignore, because the bill arrives on somebody else’s card.

Personal data ends up where it should not be.

Error messages that contain what the user typed. Analytics that record more than the product needs. Support tools that show a colleague a customer’s whole history. A support ticket that carries the payload it was supposed to strip. The privacy assumption it breaks is the one you told your users you had.

A payment or a webhook can be replayed.

Your payment provider tells you money arrived. The order was never marked as paid, or it was marked as paid twice, or the credit was issued twice. The same happens with webhooks that retry. Money paths need one decision point and an idempotency key.

A request your server trusts becomes a request somewhere else.

Your app fetches a URL that a user supplied. A link preview, a file import, a webhook test, a screenshot service. If the fetch runs on your network, the user gets to choose what it reaches, including the parts of your infrastructure that were never meant to be addressed directly.

The small things that still hurt.

Missing security headers. Cookies without the right flags. Verbose errors that tell a stranger what your stack is. Open redirects that turn your domain into somebody else’s phishing link. Default credentials on something that was supposed to be internal. None of these end a company on their own. All of them make the next finding cheaper.

The longer version of each of these: Broken access control, IDOR and BOLA, Running up your API bill, What rate limits protect, Business logic abuse, and testing a startup that ships agents.