Skip to content

Credentials are stored and transmitted in clear text #16

Closed

Description

@compot-dev
  • Storage: camera URLs, including user:password, are stored in plain-text SharedPreferences.
  • RTSP: the app only supports plain RTSP with Basic auth (base64), so the password is readable by anyone on the network path.
  • WebUI: HTTP Basic is sent in clear text as well. usesCleartextTraffic is enabled.

Proposal: Digest auth (#8), RTSPS support, and storing passwords through the Android Keystore.

Activity

  1. compot-dev commented on Oct 12, 2026

    @compot-dev
    CollaboratorAuthor

    Partially done in #54: on Android 6.0+ camera URLs are stored encrypted (Android Keystore, AES-GCM, enc1:), and existing values are migrated on first start. Still open: Android 5.x and Keystore failures fall back to plain text, and the transport (RTSP/HTTP) is unencrypted. RTSPS is not supported yet.

  2. compot-dev commented on Oct 12, 2026

    @compot-dev
    CollaboratorAuthor

    Closing; the final state is documented in the README security notes (#57).

    • Storage: camera URLs, including passwords, are encrypted with AES-256-GCM under an Android Keystore key on Android 6.0+ (feat: store camera URLs encrypted with an Android Keystore key (part of #16) #54). On Android 5.x, or if the Keystore is unavailable, they stay in plain text in the app's private storage. Backup is disabled (allowBackup="false"), so reading them needs root or physical access. Refusing to save on such devices would make the app unusable there, so this is accepted.
    • Transport: RTSP and HTTP are not encrypted, and RTSPS is not supported and not planned. With Digest auth the password itself is not sent; credentials that a camera expects inside the URL (e.g. user=…_password=…) travel with every request. Use the app on trusted networks.
    • Logs: credentials are masked in logcat (Camera password is written to logcat #55).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestlimitationKnown limitation, listed in README

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions