Skip to content

v2.1.0-security — аудит безопасности A+B+C+D

Choose a tag to compare

@x2v0 x2v0 released this 23 Oct 18:35
· 48 commits to master since this release

Безопасность

Закрыто 22 из 27 findings аудита: 5 Critical, 4 High, 7 Medium, 6 Low. Остались 2 в w2a (C-5 V2 signer, M-5 keystore pw).

Закрыто

A — Shizuku, auth, install

  • Shizuku удалён → «без ПК / без root» теперь правда
  • Fail-closed auth (без MTAPI_TOKEN сервер не стартует)
  • Constant-time token compare (crypto/subtle)
  • /restart требует Bearer token
  • bridge.Reset() — typed error вместо nil (не роняет сервер)
  • Токен не логируется в logcat
  • Install APK через Intent.ACTION_VIEW + FileProvider (без Shizuku)

B — path traversal, logcat, SMS, timeouts

  • filesSave, cameraPhoto, microphoneRecord — canonical path check
  • Per-method bridge timeouts (camera 35s, mic 65s, ping 35s, default 5s)
  • Убраны утечки clipboard/sensor/location в logcat
  • SMS: rate-limit 30s, лимит 1000 символов, E.164-ish

C — location leak, WebView, SSRF, sensors

  • locationWatchStart/Stop — removeUpdates + Looper.quitSafely() (нет thread leak, нет battery drain)
  • setWebContentsDebuggingEnabled только в BuildConfig.DEBUG
  • netFetch — SSRF-блоклист (RFC1918 + localhost)
  • sensorStreamStop — нормализация ключа через Sensor.getStringType()
  • saveFileToDownloads — sanitize + canonical check

D — Low/Medium

  • MIXED_CONTENT_NEVER_ALLOW
  • TTS кэширован (было: новый TextToSpeech на каждый вызов)
  • notify id через AtomicInteger (было: коллизии каждые 65с)
  • bad JSON логирует только длину (было: полный payload)
  • wifiInfo → <hidden> вместо <unknown ssid>
  • torch — понятное сообщение про отсутствие flash
  • Dead code (_atoi32, неиспользуемые импорты) убран

Тесты

  • go build — PASS
  • go vet — PASS
  • go test ./... — PASS
  • JS tests — PASS
  • gofmt — чисто

Открыто

  • C-5 (w2a): свой V2 APK signer — код написан, но не вызывается. Сейчас используется apksigner из Android SDK.
  • M-5 (w2a): keystore password виден в ps при apksigner. Закроется после C-5.

Установка

APK к релизу не приложен. Сборка через w2a требует Android SDK build-tools. См. README.

Лицензия

MIT — see LICENSE.