A boundary case was missed.
2026-09-24T04:40:07.878200+00:00 · Historical source content; retained unchanged.
SignalBridge connects application access to security investigations. Explore real tool runs, compare source events with alerts, and inspect the evidence behind a finding.
Aman Agarwal · Recorded runs in an isolated lab
Each run used a real tool in an isolated lab. Figures are read from the run's receipt and checked when this page is built.
9 / 9 scenarios answered as designed
Nine synthetic scenarios in a dedicated offline VM.
38 / 38 signed tokens verified, stored once and acknowledged
Two lab systems on one PC, with synthetic accounts.
28 / 28 protocol controls passed
A real Keycloak server and browser in an isolated lab, with synthetic accounts.
27,118 / 27,118 reads delivered
Not a 24-hour result; the run was stopped after the Wazuh capture ended.
24 / 24 records archived
One forwarded SignalBridge detection; not independent Wazuh rediscovery.
24 / 24 records archived after recovery
A planned stop and rotation in the lab, not an unplanned outage.
1 → 0 findings before and after the fix
Authenticated passive scan of the lab reference app; not a full assessment.
23 / 23 events restored into a separate database
Synthetic lab data; one case through the full workflow.
24 / 24 monitoring controls passed
Lab thresholds and synthetic load, not production capacity.
Latest recorded application proof · October 2
Follow the genuine reference-app run: 23 processed events, a detected document-access defect and verified restoration controls. The later Wazuh collection failure is retained alongside it.
These are retained outputs from real tools. Expand records and receipts to inspect what ran, what arrived, and what failed.
A member could read a private state and image. The lab removed their membership, reused the same session, checked access again, then restored membership and retested. The owner served as a positive control while the former member was blocked.
The member can retrieve the known state and image.
An owner removes membership; the existing session is retained.
Authentication still succeeds. Identity alone does not grant permission.
The former member's state request is denied. The image is not visible; the owner can still retrieve both.
The lab restores membership before its final positive checks.
The member sees the state and the same known image again.
What this establishes: the tested state route denied the former member despite valid authentication, while owner access and restored-member access worked. The image returned 404 for the former member and the known content for the owner and restored member; interpret those controls together.
Historical local checks of /api/state and /api/chat-image on a copied development app with synthetic identities. Separate from the Wazuh ledger replay; these are not the same events. A 404 alone does not prove authorization denial.
ba5bf541-0dcc-4559-835f-6c918eb15ac0
286c2d7461917eb1177122b67be270f963af1232 · modified copied snapshot1b53511c58642fec4d1d4351e66689662f99bc6986e5067f5f08c0990b603ad0
d101c7136840ae5e0fcfcad534b9b4d882ad7db651577a6193e89da0ffebfedd
84d9e151cd93d3039c2a1b14c57b6c983df11b9fc2ca7976272fc44419d9df7e
Open the complete authorization receipt · includes 23 route checks and separate service checks.
| Selected recorded check | Stage | Result |
|---|---|---|
member_next_exact_state_visible
|
assertion | passed |
member_next_exact_image_visible
|
assertion | passed |
route_member_removed
|
setup | passed |
removed_member_same_session_still_auth_valid
|
assertion | passed |
removed_member_same_cookie_next_state_denied
|
assertion | passed |
removed_member_same_cookie_next_image_hidden
|
assertion | passed |
owner_next_state_survives_removal
|
assertion | passed |
owner_next_image_survives_removal
|
assertion | passed |
route_membership_restored
|
restoration | passed |
restored_member_next_state_visible
|
restoration | passed |
restored_member_next_image_visible
|
restoration | passed |
These checks support the implementation behind the integrations. Inspect their execution scope and source version, including the detection capabilities that remain unmet.
This single-file demo makes no service connections, reads no application database and contains no live customer records. Source content matched the core receipt when this page was generated. The links at the end open optional files from the repository.
All existing rule checks passed, but three broader capability probes did not alert. That distinction matters: correct implementation is not complete threat coverage. This challenge was written by the builder with knowledge of the rules.
These are separate denominators. An unmet capability remains visible even when every existing rule behaves as specified. Event metadata alone cannot prove unauthorized access or coordinated intent.
| Challenge and purpose | Expectation | Observed | Outcome |
|---|---|---|---|
|
C01 · Exactly five minutes
Rule contract · The 300-second boundary is inclusive. |
R1; 1 case(s) | R1; 1 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C02 · One second outside
Rule contract · Three resources span 301 seconds: no R1 window contains all three. |
No alert; 0 case(s) | No alert; 0 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C03 · Mixed failure outcomes
Rule contract · Denied and not-visible reads both contribute to R1. |
R1; 1 case(s) | R1; 1 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C04 · Simultaneous observations
Rule contract · Three distinct resources at one timestamp still qualify. |
R1; 1 case(s) | R1; 1 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C05 · Repeated delivery below threshold
Rule contract · Replaying two event identities cannot create a third resource. |
No alert; 0 case(s) | No alert; 0 case(s) 2 accepted · 2 duplicates · 2 processed |
Met |
|
C06 · Two actor boundary
Rule contract · Two reads by one actor and one by another do not meet R1. |
No alert; 0 case(s) | No alert; 0 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C07 · Episode changes
Rule contract · Changing an episode does not reset the live actor window. |
R1; 1 case(s) | R1; 1 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C08 · Managed-device context
Rule contract · Advisory replay suppression must not suppress the live baseline. |
R1; 1 case(s) | R1; 1 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C09 · Revoked read denied
Rule contract · A single denied read after removal is not allowed access (R2). |
No alert; 0 case(s) | No alert; 0 case(s) 1 accepted · 0 duplicates · 1 processed |
Met |
|
C10 · Policy regression allowed
Rule contract · An allowed read tagged policy_regression produces R2. |
R2; 1 case(s) | R2; 1 case(s) 1 accepted · 0 duplicates · 1 processed |
Met |
|
C11 · Revoked read service error
Rule contract · An error is not evidence of allowed access and must not produce R2. |
No alert; 0 case(s) | No alert; 0 case(s) 1 accepted · 0 duplicates · 1 processed |
Met |
|
C12 · Late middle event
Rule contract · After two events are processed, a late arrival fills the qualifying window. |
R1; 1 case(s) | R1; 1 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C13 · R2 replay after processing
Rule contract · An acknowledged duplicate cannot produce a second investigation. |
R2; 1 case(s) | R2; 1 case(s) 1 accepted · 1 duplicates · 1 processed |
Met |
|
C14 · Sustained activity across buckets
Rule contract · Qualifying endpoints in two UTC buckets intentionally form two cases. |
R1; 2 case(s) | R1; 2 case(s) 4 accepted · 0 duplicates · 4 processed |
Met |
|
C15 · Allowed read is not a failure
Rule contract · Two failures and a legitimate allowed read do not meet R1. |
No alert; 0 case(s) | No alert; 0 case(s) 3 accepted · 0 duplicates · 3 processed |
Met |
|
C16 · Distinct R2 events
Rule contract · Two distinct allowed-after-removal observations each retain a case. |
R2; 2 case(s) | R2; 2 case(s) 2 accepted · 0 duplicates · 2 processed |
Met |
|
P01 · Slow enumeration
Capability probe · Desired coverage: three resources over six minutes. The existing five-minute window may miss this pattern. |
Desired: at least one alert | No alert; 0 case(s) 3 accepted · 0 duplicates · 3 processed |
Unmet |
|
P02 · Distributed probing
Capability probe · Desired coverage: one read by each of three actors. The existing per-actor rule may miss coordinated activity. |
Desired: at least one alert | No alert; 0 case(s) 3 accepted · 0 duplicates · 3 processed |
Unmet |
|
P03 · Missing revocation context
Capability probe · Desired coverage: a membership-change observation followed by an allowed read labeled member. Current metadata lacks an authoritative affected-member relationship; this tests the need for richer source context, not proof of unauthorized access. |
Desired: at least one alert | No alert; 0 case(s) 2 accepted · 0 duplicates · 2 processed |
Unmet |
8b86fb3dec004b42a35d650257aaea24
74f652fd84c22a6cc29fd22b7bc37ff2791901ea3529152e3845dce6e3988f35 · 690 files · matched at generation6709461d435e6dad7f89cf9e447f3629423caf9728e11118858ddcdae0cf8345
20261005-challenge-8b86fb3dec004b42a35d650257aaea24.json
ace8a0ca3915aad934335c1b56f39d7bee616cf8ff1b30e816e46edf80107eb9
9 fixed offline check groups cover the workbench implementation. Node suites test courier and HTTP-harness behavior using mocks; their counts do not represent requests to real Supabase services.
| Executed check | Result | Tests | Seconds |
|---|---|---|---|
| django-tests | Passed | 1997 | 95.313 |
| django-check | Passed | — | 1.392 |
| migration-drift | Passed | — | 1.419 |
| ruff-check | Passed | — | 0.042 |
| ruff-format | Passed | — | 0.041 |
| publication-scan | Passed | — | 17.29 |
| node-courier-tests | Passed | 22 | 0.253 |
| node-http-harness-mock-tests | Passed | 17 | 0.125 |
| node-bettail-route-mock-tests | Passed | 23 | 0.136 |
20261005T172804562269Z-73bbd2b8
e404062a53fb04a0010ed49029c2d21998277c00 · working tree had changes74f652fd84c22a6cc29fd22b7bc37ff2791901ea3529152e3845dce6e3988f35 · 690 files20261005T172804562269Z-73bbd2b8.json
af918701901708e1f38002c2396609436d4045f88d2f7098aeb15f0b0d1ffb04
The original simulation exposed a time-window boundary gap. Compare recorded outcomes on the same declared scenarios, and inspect the individual results below.
2026-09-24T04:40:07.878200+00:00 · Historical source content; retained unchanged.
2026-10-05T17:30:10.126627+00:00 · Source matched at page generation.
The comparison uses five expected-alert and ten expected-no-alert scenarios. These development cases are not an independent holdout or a measurement of production detection accuracy. A code change and its retest are separate recorded executions.
Executed 2026-10-05T17:30:06.420945+00:00 → 2026-10-05T17:30:10.126627+00:00 · disposable in-memory SQLite · Django in-process test client
| True positive | False negative | False positive | True negative | Accepted / processed |
|---|---|---|---|---|
| 5 | 0 | 0 | 10 | 600 / 600 |
Single-process SQLite harness timing includes test-client overhead; not network or production capacity. The bounded benign load generated 0 alerts. Timings are retained in metrics.json; they are not a capacity promise.
| Scenario | Expected rule | Observed rule | Coverage |
|---|---|---|---|
| authorized_read | None | None | Met |
| distinct_private_failures | R1 | R1 | Met |
| same_resource_retries | None | None | Met |
| below_threshold | None | None | Met |
| bucket_boundary_gap | R1 | R1 | Met |
| revoked_read_allowed | R2 | R2 | Met |
| controlled_policy_fault | R2 | R2 | Met |
| successful_membership_change | None | None | Met |
| session_errors_not_private_reads | None | None | Met |
| dependency_errors | None | None | Met |
| mixed_sources | None | None | Met |
| cross_application | None | None | Met |
| mixed_environments | None | None | Met |
| out_of_order | R1 | R1 | Met |
| duplicate_delivery | None | None | Met |
e69afefc6019460cbbbac918f04f637d
e404062a53fb04a0010ed49029c2d21998277c00 · working tree had changes74f652fd84c22a6cc29fd22b7bc37ff2791901ea3529152e3845dce6e3988f35 · 690 files20261005-simulation-e69afefc6019460cbbbac918f04f637d.json
5724ccf83f6c21b3d02bd60111aadd4c4f5fd06677e444f766930fb1651321de
084157f3a123e80e8d26d0e6531931e7be9157e62e122d2953c07c8c1b975026 · private original bytes not reread by this page builderNot tested in this simulation:
Executed 2026-09-24T04:40:05.353490+00:00 → 2026-09-24T04:40:07.878200+00:00 · disposable in-memory SQLite · Django in-process test client
| True positive | False negative | False positive | True negative | Accepted / processed |
|---|---|---|---|---|
| 4 | 1 | 0 | 10 | 600 / 600 |
Single-process SQLite harness timing includes test-client overhead; not network or production capacity. The bounded benign load generated 0 alerts. Timings are retained in metrics.json; they are not a capacity promise.
| Scenario | Expected rule | Observed rule | Coverage |
|---|---|---|---|
| authorized_read | None | None | Met |
| distinct_private_failures | R1 | R1 | Met |
| same_resource_retries | None | None | Met |
| below_threshold | None | None | Met |
| bucket_boundary_gap | R1 | None | Missed |
| revoked_read_allowed | R2 | R2 | Met |
| controlled_policy_fault | R2 | R2 | Met |
| successful_membership_change | None | None | Met |
| session_errors_not_private_reads | None | None | Met |
| dependency_errors | None | None | Met |
| mixed_sources | None | None | Met |
| cross_application | None | None | Met |
| mixed_environments | None | None | Met |
| out_of_order | R1 | R1 | Met |
| duplicate_delivery | None | None | Met |
a69f778bb91d433691bc1c1e70b5f260
a6398ec42994e26deabe646d980c86c29f326a9c · working tree had changesadae7bc5ca52c84f87da77ef04a4fc9faef9a4671675bfa0d054a3af624158fd · 126 files20260924-offline-simulation.json
fd42303052d1b63b6866f5f69ce1a39390b37df838cfe3cb9ce0f11019c1e7d6
5ee88efc509d50f5e393cbc3e0b0b7680f99bdb9689f3e33c0e0b27cf14ea673 · private original bytes not reread by this page builderNot tested in this simulation:
Python and Django authorization, signed ingestion, durable queue processing, scope-aware detections, scanner-report normalization, provenance-aware review and adverse testing.
Separate receipts record genuine local Supabase Auth/REST/Storage checks, two copied BetTail application routes, and bounded synthetic Wazuh and ZAP pilots. Those executions are separate from the offline counts above. They do not establish continuous monitoring, complete application coverage or production readiness.