fix: write session files with mode 0o600 (was umask-default 0644)
$DATA_DIR/sessions/<sid> contains OAuth access_tokens / refresh_tokens (via session['oauth2_token']), AWS / Google / Azure / BigAnimal cloud credentials (via the cloud refactors earlier in this branch), the Kerberos credential cache path, MFA OTP material, and pass_enc_key — the symmetric KEK that decrypts the user's saved Postgres server passwords. The HMAC header added earlier in this branch protects integrity but not confidentiality: anyone with read access to the file gets the secrets. Default `open(path, 'wb')` uses the process umask, which on typical systems leaves files 0o644 (world-readable). Switch new_session() and put() to a new _open_session_file() helper that opens with `os.open(... O_WRONLY | O_CREAT | O_TRUNC, 0o600)`, mirroring the upload helper introduced in PR 1. The directory itself is already 0o700, so this is defense-in-depth for container scenarios where the data volume might be mounted under shared uids, or for misconfigurations of the directory mode. NB: Existing session files retain their old mode until next write, then adopt 0o600. Operators who want to forcibly tighten existing files can chmod the sessions directory recursively post-upgrade. Adds a positive test asserting both put() and new_session() produce 0o600 files (skipped on Windows where POSIX mode bits are not meaningful).
A
Ashesh Vashi committed
bee80fe943eca57d923bd059317eedddbf496e2d
Parent: ccfbd2c