LOCAL EVIDENCE · EXPLICIT SCOPE

Local AppSec Lab

Application security assessment · local-active · partial

/assessed-project
Run 6c78c5a4487a482e9472fa98602f1592 · 2026-10-27T12:24:27.976051+00:00 · 3.6s
deterministic-workers

4source files inspected
0dependencies identified
3services identified
2services started
0routes discovered
1routes tested
10http requests
0browser workflows
0stateful workflows
0fuzz properties
0adaptive new coverage
4dynamic checks completed
11worker assignments completed
0candidate findings
1confirmed findings
0false positives
1blocked checks
6not tested checks
Falseruntime startup failed
Truecleanup completed
0model tokens reserved
0model cost upper bound usd
0model calls
Nonemodel reported tokens
Nonemodel reported cost usd
Nonenative hard token cap
0analysis cache hits
10analysis cache misses
Trueanalysis cache verified

Findings

critical: 0  high: 1  medium: 0  low: 0  informational: 0  

HIGH · confirmed · LAB-f83eded2773d4eb4

Synthetic access policy violated: vulnerable-cross-user

The owner baseline succeeded and the disallowed synthetic request received an unexpected response.

Location
/records/vulnerable/42
Root cause
Exact source-level cause is not established by the available evidence.
Expected
Actor response status in [401, 403, 404]; protected record inaccessible.
Observed
Actor received the configured synthetic resource or disallowed response.
Remediation
Enforce the configured ownership/role/input policy at the server-side resource boundary.
Regression
Run `appsec-lab verify --finding <id> --authorize` after fixing scenario vulnerable-cross-user; actor must be denied.
Limitations
Conclusion depends on the explicitly configured synthetic users, records and expected policy.
Evidence and independent verification
{
  "evidence": [
    {
      "test_id": "vulnerable-cross-user",
      "category": "authorization",
      "method": "GET",
      "path": "/records/vulnerable/42",
      "timestamp": "2026-10-27T12:24:30.702891+00:00",
      "owner": {
        "status": 200,
        "body_sha256": "25b562d9bec6c7296370d66bb2a739bce7a06e7a2dbee859aababaece81f5468",
        "body_bytes": 55,
        "truncated": false,
        "marker_present": true,
        "security_headers": {
          "content-type": "application/json"
        }
      },
      "actor": {
        "status": 200,
        "body_sha256": "25b562d9bec6c7296370d66bb2a739bce7a06e7a2dbee859aababaece81f5468",
        "body_bytes": 55,
        "truncated": false,
        "marker_present": true,
        "security_headers": {
          "content-type": "application/json"
        }
      },
      "owner_precondition": true,
      "expected_status": [
        401,
        403,
        404
      ],
      "violation": true,
      "actor_identity": "configured-synthetic-actor",
      "duration_seconds": 0.21063562499330146,
      "limitations": "Expected policy and fixture ownership are supplied by the developer."
    }
  ],
  "verification": [
    {
      "reviewer": "independent-deterministic-verifier",
      "timestamp": "2026-10-27T12:24:30.906403+00:00",
      "previous_state": "candidate",
      "conclusion": "confirmed",
      "new_observation": {
        "test_id": "vulnerable-cross-user",
        "category": "authorization",
        "method": "GET",
        "path": "/records/vulnerable/42",
        "timestamp": "2026-10-27T12:24:31.116525+00:00",
        "owner": {
          "status": 200,
          "body_sha256": "25b562d9bec6c7296370d66bb2a739bce7a06e7a2dbee859aababaece81f5468",
          "body_bytes": 55,
          "truncated": false,
          "marker_present": true,
          "security_headers": {
            "content-type": "application/json"
          }
        },
        "actor": {
          "status": 200,
          "body_sha256": "25b562d9bec6c7296370d66bb2a739bce7a06e7a2dbee859aababaece81f5468",
          "body_bytes": 55,
          "truncated": false,
          "marker_present": true,
          "security_headers": {
            "content-type": "application/json"
          }
        },
        "owner_precondition": true,
        "expected_status": [
          401,
          403,
          404
        ],
        "violation": true,
        "actor_identity": "configured-synthetic-actor",
        "duration_seconds": 0.2101504170059343,
        "limitations": "Expected policy and fixture ownership are supplied by the developer."
      }
    }
  ],
  "cvss": null,
  "engineering_guidance": {
    "affected_component": "/records/vulnerable/42",
    "root_cause": "Exact source-level cause is not established by the available evidence.",
    "impact": "The configured lower-trust synthetic actor received the prohibited fixture response.",
    "recommended_fix": "Enforce the configured ownership/role/input policy at the server-side resource boundary.",
    "regression": "Run `appsec-lab verify --finding <id> --authorize` after fixing scenario vulnerable-cross-user; actor must be denied.",
    "framework_context": {},
    "compatibility": "Review existing callers and deployment controls; run application regression tests before release.",
    "verification": "Repeat the recorded check with the same synthetic fixtures and verify both the denied actor and allowed owner controls.",
    "alternative_mitigation": "Constrain the affected interface while a source correction is reviewed; deployment controls need independent validation.",
    "references": [
      "https://cwe.mitre.org/data/definitions/862.html"
    ]
  }
}

Test coverage

TestCategoryStatusTargetReason
source:sql-constructioninput_data_flowcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:shell-commandcommand_executioncompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:unsafe-deserializationinput_data_flowcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:dynamic-evalinput_data_flowcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:jwt-no-verifyauthenticationcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:weak-cryptocryptographycompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:debug-modeconfigurationcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:unsafe-htmlfrontendcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:potential-secretsensitive_datacompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:sensitive-loggingsensitive_loggingcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:cors-wildcardcorscompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:csrf-disabledcsrfcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:ssrf-interfaceserver_side_requestscompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:unsafe-templatetemplate_renderingcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:upload-namefile_uploadcompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:container-rootinfrastructurecompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:privileged-containerinfrastructurecompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
source:ai-tool-evalai_securitycompletedrepositoryBounded syntactic rule; no whole-program data-flow proof
python-dataflowinput_data_flowcompletedrepositoryBounded AST provenance and interprocedural summaries; candidates require contextual verification
dependency-advisoriesdependenciesblockedrepositoryNo authorized offline advisory snapshot configured; no current vulnerability claims
runtime-healthruntimecompletedrepository
response:/healthheaderscompleted/health
cors:/healthcorscompleted/health
vulnerable-cross-userauthorizationcompleted/records/vulnerable/42
secure-cross-userauthorizationcompleted/records/secure/42
coverage:sessionsessionnot_testedrepositoryNo applicable implemented check or configured synthetic scenario executed
coverage:sensitive_responsesensitive_responsenot_testedrepositoryNo applicable implemented check or configured synthetic scenario executed
coverage:validationvalidationnot_testedrepositoryNo applicable implemented check or configured synthetic scenario executed
coverage:error_handlingerror_handlingnot_testedrepositoryNo applicable implemented check or configured synthetic scenario executed
coverage:business_logicbusiness_logicnot_testedrepositoryNo applicable implemented check or configured synthetic scenario executed
coverage:tenant_isolationtenant_isolationnot_testedrepositoryNo applicable implemented check or configured synthetic scenario executed

Limitations