Glass Power Tools

Security

Glass Power Tools holds the keys to other machines: SSH keys, database passwords, remote-desktop credentials. This page says how it protects them, what it does not protect, and how to report a problem.

Reporting a vulnerability

Please report security problems privately, by email to msitarzewski@gmail.com, not in a public issue. Once this repository is public, GitHub's private vulnerability reporting (Security ▸ Report a vulnerability) works too. Include what you found, how to reproduce it, and the version (Settings ▸ About). You will get an answer, and a fix or a plan, as quickly as the problem warrants. Please give a reasonable time to fix a problem before disclosing it.

Only the latest release is supported.

Problems in third-party code this app carries (Packages/) are reported to that project as well; this repository's PATCHES.md files record what is changed locally.

How credentials are kept

Connections

The Mac app is not sandboxed

A terminal has to start your shell and reach your files, tools and SSH agent, which App Sandbox does not allow. The Mac app therefore runs outside the sandbox, with the hardened runtime and no runtime exceptions. It is to be distributed outside the Mac App Store, signed with a Developer ID and notarized by Apple. Its widget extension runs sandboxed: it reads only the summary the app writes for the widgets (machine names, service kinds, times and counts) from an App Group of its own. The Finder's toolbar button, its Quick Action and Share ▸ Send to a Machine are sandboxed extensions too: they hold no credentials and make no connections, but leave the request (and any shared files) in that App Group and open the app, which does the work. The iPhone, iPad and Vision Pro apps run in their platforms' sandboxes.

Third-party code

The SSH stack (Citadel and its fork of SwiftNIO SSH) and the RDP engine (RDPKit) are carried in Packages/ at recorded upstream commits, with every local change listed and explained in the package's PATCHES.md or GLASSDT-PATCHES.md. Every dependency is pinned to an exact revision in Package.resolved. See THIRD-PARTY-NOTICES.md.