LOCAL EVIDENCE · EXPLICIT SCOPE

Local AppSec Lab

Application security assessment · local-active · partial

/assessed-project
Run f8fb3fceeac74f9794e8a796d08d2fcb · 2026-10-27T07:30:52.602130+00:00 · 2.1s
deterministic-workers

3source files inspected
1dependencies identified
1services identified
1services started
5routes discovered
5routes tested
19http requests
0browser workflows
10dynamic checks completed
10worker assignments completed
0candidate findings
1confirmed findings
0false positives
1blocked checks
5not tested checks
Falseruntime startup failed
Truecleanup completed
0model tokens reserved
0model cost upper bound usd

Findings

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

HIGH · confirmed · LAB-1f0dcbd0e32a6026

Synthetic access policy violated: vulnerable-cross-user

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

Location
app.py:28
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.; Source reference identifies the route declaration/dispatch; it is not a complete execution-path trace.
Evidence and independent verification
{
  "evidence": [
    {
      "test_id": "vulnerable-cross-user",
      "category": "authorization",
      "method": "GET",
      "path": "/records/vulnerable/42",
      "timestamp": "2026-10-27T07:30:53.727899+00:00",
      "owner": {
        "status": 200,
        "body_sha256": "2b2acbb0d18af214049cb9b2b0301b5d3e83ee737947054522dc226b17d9a8da",
        "body_bytes": 37,
        "truncated": false,
        "marker_present": true,
        "security_headers": {
          "content-type": "application/json",
          "x-content-type-options": "nosniff"
        }
      },
      "actor": {
        "status": 200,
        "body_sha256": "2b2acbb0d18af214049cb9b2b0301b5d3e83ee737947054522dc226b17d9a8da",
        "body_bytes": 37,
        "truncated": false,
        "marker_present": true,
        "security_headers": {
          "content-type": "application/json",
          "x-content-type-options": "nosniff"
        }
      },
      "owner_precondition": true,
      "expected_status": [
        401,
        403,
        404
      ],
      "violation": true,
      "actor_identity": "configured-synthetic-actor",
      "duration_seconds": 0.22012025000003632,
      "limitations": "Expected policy and fixture ownership are supplied by the developer."
    }
  ],
  "verification": [
    {
      "reviewer": "independent-deterministic-verifier",
      "timestamp": "2026-10-27T07:30:54.370712+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-27T07:30:54.588394+00:00",
        "owner": {
          "status": 200,
          "body_sha256": "2b2acbb0d18af214049cb9b2b0301b5d3e83ee737947054522dc226b17d9a8da",
          "body_bytes": 37,
          "truncated": false,
          "marker_present": true,
          "security_headers": {
            "content-type": "application/json",
            "x-content-type-options": "nosniff"
          }
        },
        "actor": {
          "status": 200,
          "body_sha256": "2b2acbb0d18af214049cb9b2b0301b5d3e83ee737947054522dc226b17d9a8da",
          "body_bytes": 37,
          "truncated": false,
          "marker_present": true,
          "security_headers": {
            "content-type": "application/json",
            "x-content-type-options": "nosniff"
          }
        },
        "owner_precondition": true,
        "expected_status": [
          401,
          403,
          404
        ],
        "violation": true,
        "actor_identity": "configured-synthetic-actor",
        "duration_seconds": 0.21770250000190572,
        "limitations": "Expected policy and fixture ownership are supplied by the developer."
      }
    }
  ]
}

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
dependency-advisoriesdependenciesblockedrepositoryNo authorized offline advisory snapshot configured; no current vulnerability claims
runtime-healthruntimecompletedrepository
response:/healthheaderscompleted/health
cors:/healthcorscompleted/health
response:/protectedheaderscompleted/protected
response:/records/secure/42headerscompleted/records/secure/42
response:/records/vulnerable/42headerscompleted/records/vulnerable/42
response:/validateheaderscompleted/validate
vulnerable-cross-userauthorizationcompleted/records/vulnerable/42
secure-cross-userauthorizationcompleted/records/secure/42
protected-anonymousauthenticationcompleted/protected
invalid-inputvalidationcompleted/validate?id=appsec-lab-invalid
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: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