SunLionet assumes adversarial transport, hostile local networks, and untrusted distribution media. The system is designed to fail closed: unverified configuration bytes are never applied, revoked signers are rejected offline, and Android routing keeps the VPN interface established during proxy-core failure or network churn.
| Version | Supported |
|---|---|
| 0.3.x-rc1 | Yes |
| < 0.3.0 | No |
Do not open public issues for vulnerabilities.
Report security issues to security@sunlionet.org with GPG-encrypted details when possible. Include:
The Security Response Team acknowledges reports within 24 hours. P0/P1 fixes are targeted within 24-72 hours after confirmation. Public advisories are published only after a fixed release or mitigation path exists. See Vulnerability Response Lifecycle.
ed25519: plus first 16 base64url characters of SHA-256(public key).SNB1.2 MiB.1 MiB.Trust updates use:
TrustUpdateMagic = "SNB-TRUST-1"TrustUpdateDomain = "SUNLIONET-TRUST-UPDATE-V1\x00"TrustStateDomain = "SUNLIONET-TRUST-STATE-V1\x00"2VersionPrevStateHash30 daysRollback, stale version, invalid previous hash, and insufficient threshold signatures are security failures.
Accepted forms:
sunlionet://config/<base64url-envelope>SL1:<base64url-envelope>SLQR1:<index>/<total>:<fragment>, max 8 fragmentsThe base64url payload is capped at 300 characters. The signed message is:
"SUNLIONET-ONBOARDING-V1\x00" || unsigned-envelope
The envelope is rejected unless the embedded signer public key is already trusted. Activation windows may not exceed 24 hours. Host, SNI, tag, and credential fields are strictly length and character filtered before profile storage.
Chunk magic is SNCE, version 1, text wrapper SNBEC/1. Each chunk has a local SHA-256 checksum and the full payload SHA-256. Reassembly only repairs transport bytes; trust is granted only after the reconstructed bundle passes Ed25519 verification.
Telemetry is opt-in only and dormant by default. Payloads contain enum counters only. No profile IDs, source IPs, SSIDs, IMEI, timezone, device IDs, route names, free text logs, or precise timestamps are accepted. Batches are time-blurred 24-72 hours and encrypted per transmission with fresh X25519 ephemeral keys, HKDF-SHA256, and ChaCha20-Poly1305.
10.0.0.1 and fd00:736c:6e::1.SunlionetVpnService enters HOLDING and keeps route ownership.ProxyCore transitions engage the kill switch before HotReload.beacon and leaves the kill switch engaged.VpnService.Builder.context.Context for all goroutine and runtime lifecycle exits.For a new transport or proxy backend:
proxycore.ProxyCore.Validate is side-effect free and context-cancelable.HotReload assumes the kill switch is engaged and emits no plaintext.Stop is idempotent.go test ./... and go test ./tests/chaos.go test -race ./tests/chaos.High-value audit targets:
pkg/bundle/verify.gopkg/bundle/chunk_engine.gopkg/importctl/import.gopkg/importctl/revocation.gopkg/proxycore/failover.gopkg/mobilebridge/onboarding.gopkg/mobilebridge/ble_mesh.gopkg/telemetry/telemetry.goandroid/app/src/main/java/com/sunlionet/agent/SunlionetVpnService.ktandroid/app/src/main/java/com/sunlionet/agent/Bridge.ktIf a signing key is compromised:
TrustUpdateBlock with revoke_signer.If a VPN leak is suspected:
HOLDING state.