FIELD NOTE / TRUST & SECURITY
Recognize the authorization, secret, data, dependency, AI workflow and recovery failures that a working vibe-coded demo can hide.
SHORT ANSWER
The security risks builders most often miss are not exotic AI attacks. They are ordinary software failures hidden behind a successful demo: trusting identifiers from the browser, exposing secrets, collecting data without boundaries, accepting dangerous input, allowing unbounded paid actions, shipping vulnerable dependencies, and discovering too late that nobody can detect or recover from an incident.
Vibe coding changes how quickly software appears; it does not change what an attacker or accidental user can do to exposed systems. A generated interface may be coherent while access control, storage policies, background jobs and operational recovery are only partially defined.
Use the vibe coding security hub for a pre-release gate. This article focuses on failure modes: how apparently reasonable implementation choices become security problems when real accounts, data and money arrive.
Risk 1: Authentication exists, but authorization is missing
A login screen proves that the app can identify a user. It does not prove that the user may read or change a particular record. The common failure is accepting a project, organization, invoice or user ID from the URL or request body and querying it without checking ownership on the server.
The interface may hide another user's records correctly while the underlying endpoint still returns them when an identifier changes. Test with two ordinary accounts. Create data as account A, capture the request, and attempt the same read, update, export and delete as account B. Repeat the check in background jobs and administrative routes.
Hidden controls are not permission checks
Removing an admin button from the browser is a usability choice. Sensitive operations still need server-side authorization tied to the authenticated user, requested resource and allowed action.
Risk 2: A secret reaches the browser, repository or logs
Anything included in client-side JavaScript should be treated as public. Renaming a variable does not protect it. Database administrator URLs, service-role keys, model-provider secrets, payment keys and signing material belong in controlled server environments with the narrowest practical scope.
Generated debugging output creates another path. Full request objects, error payloads and model prompts may contain credentials or personal data. Review deployment logs, analytics events and error reports with the same care as the database. If a credential may have been exposed, rotate it; deleting the visible line is not containment.
Risk 3: Database policies are broader than the product model
Low-code backends can make data persistence easy. The dangerous assumption is that a table connected to an authenticated app is automatically isolated between users or organizations. Public read policies, client-writable ownership fields, service-role use in general endpoints and missing row-level conditions can undermine the whole account model.
Write the intended rule in plain language first: “A member may read active workspaces they belong to, but only an owner may invite or remove members.” Then test each role against each action. Database policy and application authorization should reinforce the same boundary rather than rely on one hidden layer.
Risk 4: Files and user input cross a trust boundary unchecked
File uploads introduce size, type, storage, malware, parsing and access questions. Validate by content and context, not filename alone. Store objects under server-generated identifiers, restrict size, keep untrusted content away from executable paths, and authorize every download.
Ordinary text can also become dangerous when it reaches a database query, HTML template, shell command, URL fetch, email header or model-driven tool. Encode for the destination and use parameterized APIs. For AI workflows, treat retrieved documents and model output as untrusted; do not let a generated string trigger a consequential action without validation and, where appropriate, human approval.
Hidden failure-mode map for AI-built apps
Visible feature
Trust boundary
Hidden assumption
Abuse or failure path
Verification evidence
Risk map connecting visible product features to hidden authorization, data, secret, dependency, abuse and recovery failure modes
Risk 5: One user can create unlimited cost or workload
A model call, email send, image render, web crawl or background job can cost money even when no data is stolen. Repeated form submissions, retries and concurrency can turn an ordinary endpoint into a denial-of-wallet problem.
Set controls at more than one layer: request rate, payload size, account allowance, concurrent jobs, provider budget, timeout, cancellation and daily alert. Make irreversible or expensive work idempotent so a retry does not duplicate it. Test what happens when the downstream provider slows, rejects the request or succeeds after your app has timed out.
Risk 6: Dependencies and generated patterns remain unowned
AI tools may select packages and implementation patterns the builder did not consciously choose. That makes inventory important. Keep a lockfile, remove unused packages, review vulnerability alerts, record runtime versions and read material release notes before major upgrades.
An automated alert is a signal, not proof that a patch is safe. Test the affected flow and verify the deployed artifact. NIST's Secure Software Development Framework emphasizes integrating secure practices into the development lifecycle rather than treating security as a final scan.
Risk 7: Production and preview environments share too much
Preview deployments are convenient and frequently numerous. They should not automatically receive production data, powerful service credentials or administrative webhooks. Use separated databases or sanitized data, scoped environment variables and explicit promotion paths.
Also check domain and callback configuration. Authentication, payment and email providers often trust exact origins or redirect URLs. Wildcards and stale preview domains expand the attack surface. Remove abandoned environments and credentials when a project or branch is finished.
Risk 8: The owner cannot detect or recover from failure
An app without useful logs and alerts can remain compromised or broken while the homepage still responds. Monitor the outcomes users depend on: sign-in, authorization denials, core-job success, error rate, latency, queue failures, administrative changes and abnormal vendor spend.
Backups are evidence only after a restore works. Record who can pause deploys, rotate credentials, disable an integration and communicate with users. Test a code rollback separately from a database recovery; reversing an application deploy does not undo a destructive migration.
Use two-account tests for every user-owned or organization-owned resource
Search browser bundles, repositories and logs for secret material
Verify database policies and server authorization against the same written rules
Limit file, request, job and paid-provider usage before public exposure
Inventory dependencies, environments, owners and recovery actions
How should you prioritize these security risks?
Rank by exposure, consequence and reversibility. A private prototype using invented data has a different risk profile from a public multi-tenant service that stores customer documents or takes payment. Fix paths that can expose another user's data, execute privileged actions, reveal credentials or create uncontrolled cost before cosmetic hardening.
OWASP ASVS provides verification requirements that can turn vague concerns into testable controls. OWASP Top 10 summarizes common web-application risk classes. CISA's Secure by Design guidance places responsibility on product makers to ship safer defaults rather than requiring each user to discover and configure essential protections.
How we researched the failure-mode map
We translated OWASP ASVS areas, OWASP Top 10 risk classes, CISA Secure by Design principles and NIST SSDF lifecycle practices into product-level failure paths an independent AI builder can recognize. We intentionally excluded exploit payloads, invented incident statistics and claims that a specific AI tool causes a specific vulnerability rate.
Use this failure-mode map as an orientation, not a certification. A qualified security reviewer should check the prioritization, safe-testing approach, and scope for higher-risk products. A checklist can reveal missing evidence, but it cannot replace a risk-appropriate code and configuration review.
What should a builder do first?
Draw one core user journey and mark every point where identity, data, files, secrets, external services or money cross a boundary. For each boundary, write the expected rule and one negative test. If you cannot verify the rule, reduce exposure or ask a qualified developer to review that narrow gap.
Public feedback should not include vulnerability details. Use a private disclosure path and avoid accessing data you do not own. If you need focused help, the developer directory is the next step after documenting the affected boundary and desired evidence.
Sources
NEXT STEP
Bring in help without losing the project context
Publish the project first so accepted feedback and owner decisions stay attached to the work.
