Security ValidationΒΆ

Live results from darkforest v2.0, a pure Rust security validator that runs penetration tests, protocol fuzzing, and cryptographic posture checks against all 13 services.

"DARK_FOREST" findings are informational observations worth tracking, not failures.

Back

🟒 Overall: 179 PASS, 0 FAIL, 6 DARK_FOREST¢

Metric Value
Total checks 185
Pass 179
Fail 0
Dark Forest (informational) 6
Scan time 973.9s
Timestamp unknown
Suite all

Results by SuiteΒΆ

Suite Total Pass Fail Dark Forest
🟒 crypto 19 17 0 2
🟒 fuzz.barracuda 8 8 0 0
🟒 fuzz.beardog 8 8 0 0
🟒 fuzz.biomeos 8 8 0 0
🟒 fuzz.coralreef 8 8 0 0
🟒 fuzz.hub 12 11 0 1
🟒 fuzz.loamspine 8 8 0 0
🟒 fuzz.nestgate 8 8 0 0
🟒 fuzz.petaltongue 8 8 0 0
🟒 fuzz.rhizocrypt 8 8 0 0
🟒 fuzz.skunkbat 8 8 0 0
🟒 fuzz.songbird 8 8 0 0
🟒 fuzz.squirrel 8 8 0 0
🟒 fuzz.sweetgrass 8 8 0 0
🟒 fuzz.toadstool 8 8 0 0
🟒 pentest.compute 21 21 0 0
🟒 pentest.external 20 19 0 1
🟒 pentest.readonly 9 7 0 2

Dark Forest FindingsΒΆ

DARK_FOREST items are informational β€” not failures, but observations worth tracking.

ID Finding Severity Evidence
PEN-A1-01 Hub API leaks version 5.4.5 at /hub/api/ (unauthenticated) medium GET /hub/api/ returned version=5.4.5
PEN-C3-01 Reviewer can see shared/projects/ (doc says showcase only) low ls succeeded
PEN-C3-02 Reviewer can see shared/data/ low ls succeeded
FUZ-HUB-02 Null byte username reflected in error page (HTTP 403, CSP mitigates) medium xfuzz15f2c8
CRY-11 BEARDOG_MASTER_KEY not found in systemd units β€” ephemeral key derivation in use high Key material regenerated each restart
CRY-12 Cookie format may be v1 (SHA-1) β€” verify Tornado version medium set-cookie: _xsrf=MnwxOjB8MTA6MTc3ODMzMDYwNnw1Ol94c3JmfDY4OlRtOXVaVHBFU0VKRFdXcHFWR3hVY2pod01tVTFNbm95Um5GVk5FZGtVa055ZW1nMWQzWkhZV1pFWTNKVmVscEZQUT09fDFkN2FiMDA1M2UyZmY2Y2Q0ZDExNTQwMjA4Y2NkNjI4MWNjOWJkM2VjYjExM2QyNWFiNjRmOWRhNjlmNzMxYTI; Max-Age=3600; Path=/hub/

Failed ChecksΒΆ

All checks passed. No failures detected.


Full Check DetailsΒΆ

ID Check Category
πŸŒ‘ PEN-A1-01 Hub API leaks version 5.4.5 at /hub/api/ (unauthenticated) info_leak
βœ… PEN-A1-02 Server header: server: info_leak
βœ… PEN-A2-01 /hub/admin blocked (HTTP 302) auth
βœ… PEN-A2-02 /hub/api/users blocked (HTTP 403) auth
βœ… PEN-A2-03 /hub/api/proxy blocked (HTTP 403) auth
βœ… PEN-A2-04 /hub/api/services blocked (HTTP 403) auth
βœ… PEN-A3-01 Traversal blocked: /hub/../../../etc/passwd (HTTP 302) auth
βœ… PEN-A3-02 Traversal blocked: /hub/%2e%2e/%2e%2e/etc/passwd (HTTP 302) auth
βœ… PEN-A3-03 Traversal blocked: /services/voila/voila/render/../../../etc/passwd (HTTP 302) auth
βœ… PEN-A3-04 Traversal blocked: /services/voila/voila/render/%2e%2e/%2e%2e/%2e%2e/etc/passwd (HTTP 302) auth
βœ… PEN-A3-05 Traversal blocked: /services/voila/voila/render/..%252f..%252f..%252fetc/passwd (HTTP 302) auth
βœ… PEN-A4-01 Host 'evil.com' not reflected info_leak
βœ… PEN-A4-02 Host '127.0.0.1:9999' not reflected info_leak
βœ… PEN-A4-03 Host 'localhost:22' not reflected info_leak
βœ… PEN-A5-01 Voila service reachable (behind Hub OAuth) auth
βœ… PEN-A6-TK-01 Tunnel healthy (tunnelKeeper) network
βœ… PEN-A6-TK-02 cloudflared running (PID 396577) network
βœ… PEN-A6-TK-03 DNS resolves: 2606:4700:3033::6815:1a15 network
βœ… PEN-A6-TK-04 Tunnel config valid (7 ingress rules), credentials readable crypto
βœ… PEN-A7-00 All primal ports bound to 127.0.0.1 only network
βœ… PEN-B1-01 dig not available or DNS blocked network
βœ… PEN-B1-02 Raw DNS to external blocked network
βœ… PEN-B2-01 MethodGate enforced on beardog β€” JH-0 fully resolved auth
βœ… PEN-B2-02 storage.list rejected on nestgate:9500 auth
βœ… PEN-B2-03 storage.store_blob rejected on nestgate:9500 auth
βœ… PEN-B2-04 spine.status rejected on loamspine:9700 auth
βœ… PEN-B2-05 job.list rejected on toadstool:9400 auth
βœ… PEN-B2-06 crypto.list_keys rejected on beardog:9100 auth
βœ… PEN-B2-07 composition.list rejected on biomeos:9800 auth
βœ… PEN-B3-01 Cannot write to shared conda envs isolation
βœ… PEN-B3-02 Cannot write to shared site-packages isolation
βœ… PEN-B4-01 Cannot read JupyterHub process environ isolation
βœ… PEN-B4-02 Cannot read JupyterHub cmdline (hidepid=2) isolation
βœ… PEN-B4-03 Cannot read jupyterhub.sqlite crypto
βœ… PEN-B4-04 Cannot read jupyterhub_cookie_secret crypto
βœ… PEN-B5-01 Cannot list /home/irongate/ isolation
βœ… PEN-B5-02 Cannot read /etc/crontab info_leak
βœ… PEN-B5-03 Cannot enumerate sensitive system services info_leak
βœ… PEN-B6-01 Cannot access /home/abgreviewer/ isolation
βœ… PEN-B6-02 Cannot access /home/abg-test/ isolation
βœ… PEN-B7-01 CHP proxy API blocked or not exposed (HTTP 403) network
βœ… PEN-C1-01 ipykernel not in reviewer PATH isolation
βœ… PEN-C1-02 Reviewer cannot execute python3 isolation
βœ… PEN-C1-03 jupyter CLI not in reviewer PATH isolation
βœ… PEN-C2-01 Reviewer cannot create dirs in ~/notebooks/ isolation
βœ… PEN-C2-02 Reviewer cannot create files in ~/notebooks/ isolation
πŸŒ‘ PEN-C3-01 Reviewer can see shared/projects/ (doc says showcase only) isolation
πŸŒ‘ PEN-C3-02 Reviewer can see shared/data/ isolation
βœ… PEN-C4-01 Observer cannot create dirs in ~/notebooks/ isolation
βœ… PEN-C4-02 MethodGate enforced β€” observer RPC blocked without token auth
βœ… FUZ-barracuda-mal barracuda handled all 19 malformed payloads fuzz
βœ… FUZ-barracuda-tls_clienthello barracuda rejects tls_clienthello fuzz
βœ… FUZ-barracuda-http2_preface barracuda rejects http2_preface fuzz
βœ… FUZ-barracuda-ssh_banner barracuda rejects ssh_banner fuzz
βœ… FUZ-barracuda-redis_ping barracuda rejects redis_ping fuzz
βœ… FUZ-barracuda-memcached_stats barracuda rejects memcached_stats fuzz
βœ… FUZ-barracuda-big barracuda handled 100KB payload fuzz
βœ… FUZ-barracuda-timing barracuda: response times within 0.003s fuzz
βœ… FUZ-beardog-mal beardog handled all 19 malformed payloads fuzz
βœ… FUZ-beardog-tls_clienthello beardog rejects tls_clienthello fuzz
βœ… FUZ-beardog-http2_preface beardog rejects http2_preface fuzz
βœ… FUZ-beardog-ssh_banner beardog rejects ssh_banner fuzz
βœ… FUZ-beardog-redis_ping beardog rejects redis_ping fuzz
βœ… FUZ-beardog-memcached_stats beardog rejects memcached_stats fuzz
βœ… FUZ-beardog-big beardog handled 100KB payload fuzz
βœ… FUZ-beardog-timing beardog: response times within 0.000s fuzz
βœ… FUZ-biomeos-mal biomeos handled all 19 malformed payloads fuzz
βœ… FUZ-biomeos-tls_clienthello biomeos rejects tls_clienthello fuzz
βœ… FUZ-biomeos-http2_preface biomeos rejects http2_preface fuzz
βœ… FUZ-biomeos-ssh_banner biomeos rejects ssh_banner fuzz
βœ… FUZ-biomeos-redis_ping biomeos rejects redis_ping fuzz
βœ… FUZ-biomeos-memcached_stats biomeos rejects memcached_stats fuzz
βœ… FUZ-biomeos-big biomeos handled 100KB payload fuzz
βœ… FUZ-biomeos-timing biomeos: response times within 0.001s fuzz
βœ… FUZ-coralreef-mal coralreef handled all 19 malformed payloads fuzz
βœ… FUZ-coralreef-tls_clienthello coralreef rejects tls_clienthello fuzz
βœ… FUZ-coralreef-http2_preface coralreef rejects http2_preface fuzz
βœ… FUZ-coralreef-ssh_banner coralreef rejects ssh_banner fuzz
βœ… FUZ-coralreef-redis_ping coralreef rejects redis_ping fuzz
βœ… FUZ-coralreef-memcached_stats coralreef rejects memcached_stats fuzz
βœ… FUZ-coralreef-big coralreef handled 100KB payload fuzz
βœ… FUZ-coralreef-timing coralreef: response times within 0.003s fuzz
βœ… FUZ-loamspine-mal loamspine handled all 19 malformed payloads fuzz
βœ… FUZ-loamspine-tls_clienthello loamspine rejects tls_clienthello fuzz
βœ… FUZ-loamspine-http2_preface loamspine rejects http2_preface fuzz
βœ… FUZ-loamspine-ssh_banner loamspine rejects ssh_banner fuzz
βœ… FUZ-loamspine-redis_ping loamspine rejects redis_ping fuzz
βœ… FUZ-loamspine-memcached_stats loamspine rejects memcached_stats fuzz
βœ… FUZ-loamspine-big loamspine handled 100KB payload fuzz
βœ… FUZ-loamspine-timing loamspine: response times within 0.000s fuzz
βœ… FUZ-nestgate-mal nestgate handled all 19 malformed payloads fuzz
βœ… FUZ-nestgate-tls_clienthello nestgate rejects tls_clienthello fuzz
βœ… FUZ-nestgate-http2_preface nestgate rejects http2_preface fuzz
βœ… FUZ-nestgate-ssh_banner nestgate rejects ssh_banner fuzz
βœ… FUZ-nestgate-redis_ping nestgate rejects redis_ping fuzz
βœ… FUZ-nestgate-memcached_stats nestgate rejects memcached_stats fuzz
βœ… FUZ-nestgate-big nestgate handled 100KB payload fuzz
βœ… FUZ-nestgate-timing nestgate: response times within 0.003s fuzz
βœ… FUZ-petaltongue-mal petaltongue handled all 19 malformed payloads fuzz
βœ… FUZ-petaltongue-tls_clienthello petaltongue rejects tls_clienthello fuzz
βœ… FUZ-petaltongue-http2_preface petaltongue rejects http2_preface fuzz
βœ… FUZ-petaltongue-ssh_banner petaltongue rejects ssh_banner fuzz
βœ… FUZ-petaltongue-redis_ping petaltongue rejects redis_ping fuzz
βœ… FUZ-petaltongue-memcached_stats petaltongue rejects memcached_stats fuzz
βœ… FUZ-petaltongue-big petaltongue handled 100KB payload fuzz
βœ… FUZ-petaltongue-timing petaltongue: response times within 0.000s fuzz
βœ… FUZ-rhizocrypt-mal rhizocrypt handled all 19 malformed payloads fuzz
βœ… FUZ-rhizocrypt-tls_clienthello rhizocrypt rejects tls_clienthello fuzz
βœ… FUZ-rhizocrypt-http2_preface rhizocrypt rejects http2_preface fuzz
βœ… FUZ-rhizocrypt-ssh_banner rhizocrypt rejects ssh_banner fuzz
βœ… FUZ-rhizocrypt-redis_ping rhizocrypt rejects redis_ping fuzz
βœ… FUZ-rhizocrypt-memcached_stats rhizocrypt rejects memcached_stats fuzz
βœ… FUZ-rhizocrypt-big rhizocrypt handled 100KB payload fuzz
βœ… FUZ-rhizocrypt-timing rhizocrypt: response times within 0.000s fuzz
βœ… FUZ-skunkbat-mal skunkbat handled all 19 malformed payloads fuzz
βœ… FUZ-skunkbat-tls_clienthello skunkbat rejects tls_clienthello fuzz
βœ… FUZ-skunkbat-http2_preface skunkbat rejects http2_preface fuzz
βœ… FUZ-skunkbat-ssh_banner skunkbat rejects ssh_banner fuzz
βœ… FUZ-skunkbat-redis_ping skunkbat rejects redis_ping fuzz
βœ… FUZ-skunkbat-memcached_stats skunkbat rejects memcached_stats fuzz
βœ… FUZ-skunkbat-big skunkbat handled 100KB payload fuzz
βœ… FUZ-skunkbat-timing skunkbat: response times within 0.000s fuzz
βœ… FUZ-songbird-mal songbird handled all 19 malformed payloads fuzz
βœ… FUZ-songbird-tls_clienthello songbird rejects tls_clienthello fuzz
βœ… FUZ-songbird-http2_preface songbird rejects http2_preface fuzz
βœ… FUZ-songbird-ssh_banner songbird rejects ssh_banner fuzz
βœ… FUZ-songbird-redis_ping songbird rejects redis_ping fuzz
βœ… FUZ-songbird-memcached_stats songbird rejects memcached_stats fuzz
βœ… FUZ-songbird-big songbird handled 100KB payload fuzz
βœ… FUZ-songbird-timing songbird: response times within 0.000s fuzz
βœ… FUZ-squirrel-mal squirrel handled all 19 malformed payloads fuzz
βœ… FUZ-squirrel-tls_clienthello squirrel rejects tls_clienthello fuzz
βœ… FUZ-squirrel-http2_preface squirrel rejects http2_preface fuzz
βœ… FUZ-squirrel-ssh_banner squirrel rejects ssh_banner fuzz
βœ… FUZ-squirrel-redis_ping squirrel rejects redis_ping fuzz
βœ… FUZ-squirrel-memcached_stats squirrel rejects memcached_stats fuzz
βœ… FUZ-squirrel-big squirrel handled 100KB payload fuzz
βœ… FUZ-squirrel-timing squirrel: response times within 0.003s fuzz
βœ… FUZ-sweetgrass-mal sweetgrass handled all 19 malformed payloads fuzz
βœ… FUZ-sweetgrass-tls_clienthello sweetgrass rejects tls_clienthello fuzz
βœ… FUZ-sweetgrass-http2_preface sweetgrass rejects http2_preface fuzz
βœ… FUZ-sweetgrass-ssh_banner sweetgrass rejects ssh_banner fuzz
βœ… FUZ-sweetgrass-redis_ping sweetgrass rejects redis_ping fuzz
βœ… FUZ-sweetgrass-memcached_stats sweetgrass rejects memcached_stats fuzz
βœ… FUZ-sweetgrass-big sweetgrass handled 100KB payload fuzz
βœ… FUZ-sweetgrass-timing sweetgrass: response times within 0.001s fuzz
βœ… FUZ-toadstool-mal toadstool handled all 19 malformed payloads fuzz
βœ… FUZ-toadstool-tls_clienthello toadstool rejects tls_clienthello fuzz
βœ… FUZ-toadstool-http2_preface toadstool rejects http2_preface fuzz
βœ… FUZ-toadstool-ssh_banner toadstool rejects ssh_banner fuzz
βœ… FUZ-toadstool-redis_ping toadstool rejects redis_ping fuzz
βœ… FUZ-toadstool-memcached_stats toadstool rejects memcached_stats fuzz
βœ… FUZ-toadstool-big toadstool handled 100KB payload fuzz
βœ… FUZ-toadstool-timing toadstool: response times within 0.001s fuzz
βœ… FUZ-HUB-01 Hub handles oversized cookie (HTTP 431) fuzz
πŸŒ‘ FUZ-HUB-02 Null byte username reflected in error page (HTTP 403, CSP mitigates) fuzz
βœ… FUZ-HUB-03 Fake token rejected (HTTP 403) auth
βœ… FUZ-HUB-04 Login form handles SQL injection payloads without crash fuzz
βœ… FUZ-HUB-05 XSS in ?next parameter not reflected fuzz
βœ… FUZ-HUB-M-put PUT /hub/api/users returns 405 fuzz
βœ… FUZ-HUB-M-delete DELETE /hub/api/users returns 405 fuzz
βœ… FUZ-HUB-M-patch PATCH /hub/api/users returns 405 fuzz
βœ… FUZ-HUB-M-options OPTIONS /hub/api/users returns 200 fuzz
βœ… FUZ-HUB-M-trace TRACE /hub/api/users returns 405 fuzz
βœ… FUZ-HUB-TRACE TRACE method blocked (HTTP 405) fuzz
βœ… FUZ-HUB-FLOOD Hub survives 50 concurrent connections fuzz
βœ… CRY-01 Cookie secret entropy OK: 4.88 bits/byte, 32 bytes crypto
βœ… CRY-02 Cookie secret is 4 days old (within 90-day window) crypto
βœ… CRY-03 Cookie secret permissions OK: mode=600, owner=irongate crypto
βœ… CRY-04 No API tokens in database or database not accessible crypto
βœ… CRY-05-tamison tamison: SHA-512 hash crypto
βœ… CRY-05-abgreviewer abgreviewer: yescrypt hash crypto
βœ… CRY-05-abg-test abg-test: SHA-512 hash crypto
βœ… CRY-05-kmok kmok: yescrypt hash crypto
βœ… CRY-06 Hash rounds/cost factor adequate crypto
βœ… CRY-07 BearDog rejected tampered token (non-standard response) crypto
βœ… CRY-08 BearDog rejected expired token (non-standard response) crypto
βœ… CRY-09 BTSP port rejects plaintext (handshake required) crypto
βœ… CRY-10 rhizocrypt BTSP rejects plaintext crypto
πŸŒ‘ CRY-11 BEARDOG_MASTER_KEY not found in systemd units β€” ephemeral key derivation in use crypto
πŸŒ‘ CRY-12 Cookie format may be v1 (SHA-1) β€” verify Tornado version crypto
βœ… CRY-13-cookie_secret Cookie secret: permissions OK (600) crypto
βœ… CRY-13-jupyterhub_database JupyterHub database: permissions OK (600) crypto
βœ… CRY-13-cloudflare_tunnel_config Cloudflare tunnel config: permissions OK (600) crypto
βœ… CRY-13-tunnel_creds Tunnel credential files properly restricted crypto