All field notes
Security90 signal · Security review for vibe-coded apps

Vibe-Coded Apps Need a Production Security Review

Fast AI-assisted app building can put working software in front of users quickly. Use a focused review of code, data flows and access controls before release.

OSIS Engineering
September 28, 2026 · 6 min read

AI-assisted and low-code tools can help teams turn an idea into a working app quickly. That speed is useful for prototypes, internal tools and early product experiments, but a successful demo does not establish that the software is safe to operate with real users or business data. A recent WeLiveSecurity item asks whether a new “vibe coded” app is safe and points to questions worth asking before adoption. For engineering leaders, the practical issue is not whether a tool wrote the code; it is whether the team can verify the app’s behavior, dependencies and access boundaries. Treat generated code like any other untrusted contribution: review it against the product’s actual risk.

01 / 03

Decide what the app is allowed to touch

Start by drawing a simple map of the app’s inputs, data and external connections. Record what users enter, what the app stores, which APIs it calls, what credentials it uses and which third-party services receive information. This inventory turns a vague safety question into concrete review work. Pay particular attention to personal information, payment or account data, internal records, and any secrets embedded in configuration. A prototype with synthetic data has a different exposure from a production service connected to customer accounts. If the team cannot explain where data travels or why a permission is needed, pause deployment until the flow is understood.

Define the intended users and the consequences of misuse before testing. An internal dashboard, public consumer app and workflow that can change business records need different safeguards. Write down the assets to protect, likely misuse cases, and the actions that should require stronger authorization or human confirmation. Include abuse from an ordinary account, not only an external attacker: can one user view another user’s record, alter a privileged setting, or trigger an operation repeatedly? This brief threat model gives reviewers a basis for prioritizing checks and helps prevent a polished interface from distracting decision-makers from backend risk.

  • Inventory data, APIs, permissions, secrets and third-party services before connecting real users or records.
  • Set a clear rule for whether the prototype may use production data; default to synthetic or minimized data until reviewed.
02 / 03

Verify the code and the boundaries, not the demo

A functional screen proves that a path worked once; it does not prove that validation, authorization or error handling is correct. Review the generated implementation as you would a new code contribution. Check that server-side endpoints validate input, enforce authorization on every relevant object and avoid exposing sensitive details in errors or logs. Confirm that secrets are kept out of client bundles and source control, and that access tokens and session data are handled deliberately. For mobile software, inspect requested permissions and local storage choices. For web apps, examine session behavior and cross-origin assumptions. Tests should include unauthenticated requests, a user attempting to access another user’s records, malformed inputs and unexpected API responses.

Review dependencies and build provenance as part of the same release decision. Identify the packages and services the app relies on, check that dependencies come from expected sources, and remove components the product does not need. Run the security checks already available in your engineering workflow, such as dependency scanning, static analysis and secret detection, but treat their results as evidence to investigate rather than a guarantee. Then have a developer who did not generate or assemble the app walk through the critical flows. Independent review is especially valuable when the original builder cannot explain a code path or when the product handles sensitive information.

  • Test authorization at the API boundary; hiding a button in the interface is not an access control.
  • Review dependency and secret-scan findings, and document unresolved risks rather than silently accepting them.
03 / 03

Make release approval repeatable

A one-time code review is not enough if the app will keep changing. Put the application into a normal delivery process: version its source, separate development and production environments, protect production credentials, and require review before changes are deployed. Add automated tests for the security-critical rules identified in the threat model, especially permissions and access to records. Keep a way to disable a risky feature or revoke a credential if a problem appears. Define who owns updates, monitoring and incident response after launch. These controls make the app supportable and give the business a clear answer to the question of who is accountable when the generated implementation changes.

Set release gates proportionate to the product’s impact. A disposable internal experiment might require an owner, synthetic data and basic access restrictions. A customer-facing app or service handling sensitive data deserves deeper review, documented authorization tests and an explicit go/no-go decision from the accountable engineering and business leads. Do not treat a vendor’s claim, a clean scanner report or a successful demo as a substitute for evidence about this particular app. Record what was tested, what remains uncertain, and which risks were accepted. Revisit that record when the app gains new data, permissions, integrations or capabilities.

  • Require an accountable owner, review record and rollback or disable plan before production release.
  • Repeat the assessment when data types, integrations, permissions or user-facing capabilities change.

AI-assisted development changes how quickly software can be assembled, not the responsibility to understand and operate it safely. Before adopting a generated app, map its data and integrations, test authorization and input handling, review its dependencies, and put ownership and release controls in place. Keep the depth of review proportional to the information and actions the app can access. If the team cannot explain a sensitive flow or verify a critical boundary, the prudent decision is to limit the app to synthetic data and a non-production environment until it can.