You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Static security review of peon-app (control plane). Not a live pentest.
Result: 0 Critical · 3 High · 8 Medium · 5 Low · 2 Info
No confirmed Critical unauthenticated remote RCE. Strongest gaps: auth rate limiting, notification SSRF, and service delete without container teardown.
High (do first)
[ ] H-01 — No rate limiting on login / signup / OTP / forgot-password
Summary
Static security review of peon-app (control plane). Not a live pentest.
Result: 0 Critical · 3 High · 8 Medium · 5 Low · 2 Info
No confirmed Critical unauthenticated remote RCE. Strongest gaps: auth rate limiting, notification SSRF, and service delete without container teardown.
High (do first)
[ ] H-01 — No rate limiting on login / signup / OTP / forgot-password
src/app/api/auth/login,signup,resend-otp,forgot-password[ ] H-02 — Notification webhook SSRF
src/services/internal/notifications/notifications.ts(postJson)[ ] H-03 — Service delete does not stop/remove host containers
src/services/internal/service/lifecycle.tsremove()deleteResourcesMedium
StrictHostKeyChecking=no—deploy/engine.ts(pin known_hosts / prefer GitHub App HTTPS)lib/ssh/host-key.tsnext.config.tsENCRYPTION_KEYSHA-256 fallback accepts weak secrets — require 32-byte base64lib/docker/databases.tsLow / Info
resend-otpwithout pending-signup guardisInstanceAdminmismatch inproxy.tsAlready in good shape (no action)
sid+ AuthSession)hostVerifierPeon→VPS (fix: verify SSH host keys with trust-on-first-use and optional pinning #15)timingSafeEqualSuggested 30-day order
Limitations
Static review only. No production exploit attempts. Infra / AWS IAM / host OS outside this repo.