fix: audit pass — WebRTC audit, HTTPS gate, leak compare, kill-switch guard, doc backlog
This commit is contained in:
@@ -199,4 +199,74 @@ All remaining E/M/B/U/T items, installer signing, metrics, coverage gates
|
||||
|
||||
---
|
||||
|
||||
*Proxy God Audit — 2026-05-22*
|
||||
## 9. Remediation log (2026-05-22 passes)
|
||||
|
||||
| ID | Status | Notes |
|
||||
|----|--------|-------|
|
||||
| C-01 | **Fixed** | `fingerprint.py`, `webrtc_check.py` — DWORD `3` + `WebRtcIPHandling` REG_SZ |
|
||||
| C-02 | **Fixed** | `browser_launcher.py` — scoped `taskkill /PID` |
|
||||
| C-04 | **Fixed** | `app.py` — `_final` scheduled after all `after(0)` callbacks |
|
||||
| C-05 | **Fixed** | `app.py` preflight uses `is_chain_leak()` + VPN-aware `/16` |
|
||||
| C-06 | **Fixed** | `service.py` — HTTPS CONNECT failure rotates chain (not healthy) |
|
||||
| C-08 | **Fixed** | `firewall.py` — `emergency_disengage()` no-op unless `is_engaged()` |
|
||||
| C-10 | **Fixed** | `app.py` — auto-save on launch is `pending` with empty password |
|
||||
| E-06 | **Fixed** | `service.py` — log when pinned chain enabled but empty |
|
||||
| E-11 | **Fixed** | `dns_leak.py`, `ban_tester.py` — restore socket timeout in `finally` |
|
||||
| E-24 | **Fixed** | `config.py` — pool sources must be `https://` only |
|
||||
| E-26 | **Fixed** | `ban_tester.py` — removed bare `"captcha"` hint; stricter phrases |
|
||||
| E-27 | **Fixed** | `ban_tester.py` — dedupe by URL |
|
||||
| M-06 / U-06 | **Fixed** | Preflight subtitle no longer claims “fingerprint” check |
|
||||
| M-15 | **Fixed** | `CHANGELOG.md` — Fernet/DPAPI not implemented (clarified) |
|
||||
| B-02 | **Fixed** | `ProxyChainManager.spec` — `upx=False` |
|
||||
| leak_audit | **Fixed** | `_check_webrtc_policy()` accepts DWORD `3` or REG_SZ |
|
||||
| (prior) | **Fixed** | CI, GOST zip SHA256, settings migration/backup, LICENSE, log rotation |
|
||||
|
||||
---
|
||||
|
||||
## 10. Still needs to be fixed
|
||||
|
||||
Items below were **not** changed in this pass because they need design decisions, external tooling, or behavior that is not safe to guess.
|
||||
|
||||
### Critical / security (P0)
|
||||
|
||||
| ID | Why left open | Suggested direction |
|
||||
|----|---------------|---------------------|
|
||||
| **C-03 / S-01** | Encrypting `settings.json` / signup JSON requires key management (DPAPI vs Fernet passphrase) and migration for existing installs | Windows DPAPI via `cryptography` or OS credential store; one-time migration on load |
|
||||
| **C-07** | Pinned chains need per-hop health probes without breaking intentional manual order | Optional “validate pinned hops on start” toggle + blacklist dead hops only |
|
||||
| **C-09** | Narrowing signup extension off `<all_urls>` breaks **custom signup URLs** | Dynamic host permissions or user-approved host list per session |
|
||||
| **C-11** | No pinned SHA256 for extracted `gost.exe` in repo | Add `GOST_EXE_SHA256` constant from official release manifest |
|
||||
| **C-12** | `asyncio.run()` in worker threads (`app.py` preflight) — refactor needs dedicated event-loop policy | Run network checks via `asyncio.new_event_loop()` in thread or shared async runner |
|
||||
| **S-03** | `verify=False` on httpx is intentional for broken proxy TLS; enabling verify breaks many public proxies | Per-setting toggle; document risk |
|
||||
| **B-01** | Authenticode signing needs cert + build pipeline | Sign `dist\ProxyChainManager.exe` in release script |
|
||||
|
||||
### High (P1)
|
||||
|
||||
| ID | Why left open |
|
||||
|----|---------------|
|
||||
| **E-01** | Refresh `real_ip` when VPN state changes mid-session |
|
||||
| **E-02–E-03** | Sticky exit + leak interaction needs product rule (rotate vs warn) |
|
||||
| **E-04** | `is_chain_leak(real_ip=None)` fail-open — changing affects rotation semantics |
|
||||
| **E-05** | /16 neighbor policy is intentional without VPN |
|
||||
| **E-07–E-10** | Pool/pinned/exit edge cases need operator UX, not one-line fixes |
|
||||
| **E-12–E-13** | DNS leak test methodology (DoH vs system DNS) needs spec |
|
||||
| **E-14 / S-08** | Kill-switch DNS allow rule required for GOST hostname resolution |
|
||||
| **E-15** | Non-admin kill-switch skip — document or block Start without admin |
|
||||
| **E-16–E-18** | OS adapter/MAC spoof recovery after crash |
|
||||
| **E-19–E-20** | Firefox PID tracking / relaunch loop limits |
|
||||
| **E-21** | Boot task LIMITED vs admin kill-switch |
|
||||
| **E-22** | GP proxy lock remediation (destructive) |
|
||||
| **E-23** | Auto-rewrite sanitized settings — add “don’t auto-save” option |
|
||||
| **E-25** | `ban_tester.check_dns_leak()` uses useless `x-real-ip` header — **dead code**, unused by GUI; remove or replace with `dns_leak.run_dns_leak_test` |
|
||||
| **E-28–E-30** | Third-party intel APIs / map geo / GOST blacklist rules |
|
||||
| **M-01–M-14** | README alignment, GUI kill-switch button, encrypted vault, ban history, etc. |
|
||||
| **U-01–U-10** | Tray/minimize UX, admin relaunch save state, About version, cookie menu keys, password masking in list |
|
||||
| **T-01–T-14** | Test coverage expansion |
|
||||
| **B-03–B-10** | UAC manifest, PyInstaller pin, SHA256 sidecar, bundle GOST, SBOM, Defender scope |
|
||||
|
||||
### Medium (P2)
|
||||
|
||||
Installer polish, metrics, coverage gates, IPv6 chain path, SOCKS5 remote DNS policy (`browser_profile.py:125` — may be intentional for Firefox+GOST).
|
||||
|
||||
---
|
||||
|
||||
*Proxy God Audit — last updated 2026-05-22*
|
||||
|
||||
Reference in New Issue
Block a user