LOCAL EVIDENCE · EXPLICIT SCOPE

Local AppSec Lab

Application security assessment · local-active · partial

/assessed-project
Run deb35e4c711542dca7b342d320c47045 · 2026-10-27T07:30:49.279308+00:00 · 2.7s
deterministic-workers

5source files inspected
0dependencies identified
1services identified
1services started
8routes discovered
8routes tested
25http requests
0browser workflows
16dynamic 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: 1  informational: 0  

LOW · informational · LAB-39965a8c6a50c56e

Browser defense headers absent

An HTML response omitted common browser defense headers.

Location
server.js:17
Root cause
Exact source-level cause is not established by the available evidence.
Expected
Set a suitable CSP and X-Content-Type-Options: nosniff.
Observed
Missing: content-security-policy
Remediation
Apply headers at the application or trusted proxy; test compatibility.
Regression
Limitations
Deployment reverse-proxy headers may differ.; Source reference identifies the route declaration/dispatch; it is not a complete execution-path trace.
Evidence and independent verification
{
  "evidence": [
    {
      "status": 200,
      "body_sha256": "91869435dd35d3008460ba74c9efaf2fee49a50c12da9de9d27cdb374f4926b6",
      "body_bytes": 79,
      "truncated": false,
      "marker_present": false,
      "security_headers": {
        "content-type": "text/html",
        "x-content-type-options": "nosniff"
      }
    }
  ],
  "verification": [
    {
      "reviewer": "independent-deterministic-verifier",
      "timestamp": "2026-10-27T07:30:51.727544+00:00",
      "previous_state": "informational",
      "conclusion": "Source location exists; applicability/reachability requires contextual review",
      "source_sha256": "4bebe2d69e94c2cef027e1ee37706a86e53dc18a36ffdf9ef4a4a6a008ca8402"
    }
  ]
}

HIGH · confirmed · LAB-b700cb9bdca155b8

Synthetic access policy violated: vulnerable-cross-user

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

Location
server.js:14
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:51.073197+00:00",
      "owner": {
        "status": 200,
        "body_sha256": "b4393615868dacc38e3eca28bce69ffedef145a2d1df6a0a702f8d592e24f3b1",
        "body_bytes": 52,
        "truncated": false,
        "marker_present": true,
        "security_headers": {
          "content-type": "application/json",
          "x-content-type-options": "nosniff"
        }
      },
      "actor": {
        "status": 200,
        "body_sha256": "b4393615868dacc38e3eca28bce69ffedef145a2d1df6a0a702f8d592e24f3b1",
        "body_bytes": 52,
        "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.2191947909996088,
      "limitations": "Expected policy and fixture ownership are supplied by the developer."
    }
  ],
  "verification": [
    {
      "reviewer": "independent-deterministic-verifier",
      "timestamp": "2026-10-27T07:30:51.728049+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:51.939459+00:00",
        "owner": {
          "status": 200,
          "body_sha256": "b4393615868dacc38e3eca28bce69ffedef145a2d1df6a0a702f8d592e24f3b1",
          "body_bytes": 52,
          "truncated": false,
          "marker_present": true,
          "security_headers": {
            "content-type": "application/json",
            "x-content-type-options": "nosniff"
          }
        },
        "actor": {
          "status": 200,
          "body_sha256": "b4393615868dacc38e3eca28bce69ffedef145a2d1df6a0a702f8d592e24f3b1",
          "body_bytes": 52,
          "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.211418250000861,
        "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:/html-insecureheaderscompleted/html-insecure
cors:/html-insecurecorscompleted/html-insecure
response:/html-secureheaderscompleted/html-secure
cors:/html-securecorscompleted/html-secure
response:/protectedheaderscompleted/protected
response:/publicheaderscompleted/public
cors:/publiccorscompleted/public
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